Tag: 性能

Xerces DOM解析器非常慢?

目前,我正在尝试使用JTidy清理HTML文件,将其转换为XHTML并将结果提供给DOM解析器。 以下代码是这些努力的结果: public class HeaderBasedNewsProvider implements INewsProvider { /* … */ public Collection getNewsEntries() throws NewsUnavailableException { Document document; try { document = getCleanedDocument(); } catch (Exception e) { throw new NewsUnavailableException(e); } System.err.println(document.getDocumentElement().getTextContent()); return null; } private final Document getCleanedDocument() throws IOException, SAXException, ParserConfigurationException { InputStream input = inputStreamProvider.getInputStream(); Tidy tidy = new Tidy(); […]

如何有效地生成一组具有预定义分布的唯一随机数?

我有一个具有一些概率分布的项目图: Map itemsDistribution; 给定一定的m我必须生成一Set从上述分布中采样的m元素。 截至目前,我正在使用天真的方式: while(mySet.size < m) mySet.add(getNextSample(itemsDistribution)); getNextSample(…)方法根据概率从分布中提取对象。 现在,随着m增加,性能严重受损。 对于m = 500和itemsDistribution.size() = 1000元素,有太多的颠簸,并且函数在while循环中保留太长时间。 生成1000个这样的集合,并且您有一个可以爬行的应用程序。 是否有更有效的方法来生成具有“预定义”分布的唯一随机数集? 大多数收集改组技术等是均匀随机的。 解决这个问题的好方法是什么? 更新 :循环将调用getNextSample(…) “至少” 1 + 2 + 3 + … + m = m(m+1)/2次。 这是在第一次运行中,我们肯定会得到该集合的样本。 第二次迭代,它可能被调用至少两次,依此类推。 如果getNextSample本质上是顺序的,即遍历整个累积分布以找到样本,则循环的运行时复杂度至少为: n*m(m+1)/2 ,’n’是数字分布中的元素。 如果m = cn; 0<c<=1 m = cn; 0<c<=1则循环至少为Sigma(n ^ 3)。 这也是下限! 如果我们通过二分搜索替换顺序搜索,则复杂性至少为Sigma(log n * n ^ […]

如何有效地转置2D位矩阵

我一直在绊倒这个问题(例如在这个问题中 )。 给定基本整数类型数组forms的2D位矩阵/板/arrays,例如long数组。 为简单起见,我们可以假设一个方阵,例如,在64位long平台上具有64个long值的数组。 令x[i]为0 <= i < 64为输入数组。 计算数组y[i]为0 <= i <= 64这样: (x[i] >> j) & 1 == (y[j] >> i) & 1 这里x >> i是x >> i的按位右移i位, &是按位,并且x[i]是数组x第i个位置的值。 如何实现一个最有效地将数组x映射到数组y的函数? 主要是我正在寻找非破坏性的方法,使输入数组x完好无损。 实施语言 使用的编程语言应该对整数类型进行数组和按位运算。 许多语言都满足这些要求。 C / C ++和Java解决方案看起来非常相似,所以让我们选择这些语言。

最小化Java函数调用开销

我有一段代码 ,在我运行的每个测试中,函数调用都会产生大量的开销。 代码是一个紧密循环,对数组的每个元素执行一个非常简单的函数(包含4-8百万个int )。 运行代码,主要包含 for (int y = 1; y < h; ++y) { for (int x = 1; x < w; ++x) { final int p = y * s + x; n[p] = f.apply(d, s, x, y); } } 执行类似的事情 (final int[] d, final int s, final int x, final int y) […]

OpenJPA合并/持久化非常慢

我在带有MySQL 5.0 DB的WebSphere Application Server 8上使用OpenJPA 2.2.0。 我有一个对象列表,我想合并到数据库中。 就像是: for (Object ob : list) { Long start = Calendar.getInstance().getTimeInMillis(); em = factory.createEntityManager(); em.getTransaction().begin(); em.merge(ob); em.getTransaction().commit(); em.close(); Long end = Calendar.getInstance().getTimeInMillis(); Long diff = end – start; LOGGER.info(“Time: ” + diff); } 当我运行这个循环时,我需要大约300-600毫秒来合并一个对象。 当我删除行“em.merge(ob);”时 然后我需要“0”毫秒来迭代1个列表对象。 所以我的问题是:我可以做些什么来缩短合并一个对象的时间? 谢谢!

Java – 性能问题; 变量名和文件名长度

好吧只是关于性能的一些问题,但我认为一些问题是合乎逻辑的: – 如果我使用短名称的变量将更好/更快地处理? 示例:“String s”将优于“String superphrase”。 – 关于文件名,如果文件名很短,访问速度会更快吗? 示例:(几乎相同)filename.txt或f.txt。 感谢所有人,我真的很想让我的软件变得更好:)

速度优化:私有和公共变量 – Java

我问这个问题纯粹是为了问题的速度方面。 从私有或公共(Java)获取对象的值之间的速度差异是什么? class MyClass { public int myInt = 5; } class MyOtherClass { private int myInt = 5; public int getMyInt() { return myInt; } } class MyMainClass { public static void main (String [] args) { MyClass myObject = new MyClass(); MyOtherClass myOtherObject = new MyOtherClass(); // which is faster? System.out.println(myObject.myInt); System.out.println(myOtherObject.getMyInt ()); […]

在Java中有效地读取zip文件

我正在开发一个可以处理大量数据的项目。 我有很多(数千个)zip文件,每个文件包含一个简单的txt文件,包含数千行(大约80k行)。 我目前正在做的是以下内容: for(File zipFile: dir.listFiles()){ ZipFile zf = new ZipFile(zipFile); ZipEntry ze = (ZipEntry) zf.entries().nextElement(); BufferedReader in = new BufferedReader(new InputStreamReader(zf.getInputStream(ze))); … 通过这种方式,我可以逐行读取文件,但它的定义太慢了。 鉴于需要读取大量文件和行,我需要以更有效的方式阅读它们。 我找了一个不同的方法,但我找不到任何东西。 我认为我应该使用的是用于密集I / O操作的java nio API,但我不知道如何将它们与zip文件一起使用。 真的很感激任何帮助。 谢谢, 马尔科

** BUSTED **如何使用sun.misc.Unsafe加快字节查找速度?

我正在尝试使用Unsafe迭代内存而不是遍历byte []中的值。 使用unsafe分配内存块。 内存足以容纳65536个字节值。 我在尝试这个: char aChar = some character if ((byte) 0 == (unsafe.getByte(base_address + aChar) & mask)){ // do something } 代替: char aChar = some character if ((byte) 0 == ( lookup[aChar] & mask )){ // do something } 我认为 Unsafe可以比使用常规数组访问更快地访问内存,并对每个索引执行索引检查… 只是一厢情愿地认为jvm会有一个特殊的操作(不安全),它会以某种方式使常规数组访问和迭代更快。 在我看来,jvm在正常的byte []迭代中运行良好,并且可以使用普通的,纯粹的,纯粹的java代码快速完成它们。 @millimoose击中众所周知的“钉在头上” “不安全可能对许多事情有用,但这种微观优化程度不是其中之一。” – 毫米“ 在非常严格的有限情况下使用Unsafe会更快: (仅64位jvm)对于单个65535字节[]查找更快,每次测试只完成一次 。 在这种情况下,64_bit […]

如何将字母数字电话号码转换为数字

更新: 我的实用程序的最终版本如下所示: StringBuilder b = new StringBuilder(); for(char c : inLetters.toLowerCase().toCharArray()) { switch(c) { case ‘0’: b.append(“0”); break; case ‘1’: b.append(“1”); break; case ‘2’: case ‘a’: case ‘b’: case ‘c’: b.append(“2”); break; case ‘3’: case ‘d’: case ‘e’: case ‘f’: b.append(“3”); break; case ‘4’: case ‘g’: case ‘h’: case ‘i’: b.append(“4”); break; case ‘5’: case […]