Tag: 性能

Java中的System.out.println()vs \ n

假设我想打印5行。 哪种方法最佳(性能和可读性)。 System.out.println(); System.out.println(); System.out.println(); System.out.println(); System.out.println(); 要么 System.out.println(“\n\n\n\n”); 这是一个偏好的问题还是比另一个更好的问题。 看起来使用第二种方法可以节省大量时间。

Hibernate性能

我有疑问,也许是某人看来是愚蠢的。 Hibernate快吗? 我在系统中使用它,它对数据库的查询数量非常大。 并且性能变得警觉。 关于当前背景的其他问题。 什么会更好 – 许多简单的查询(使用单个表)或少几个JOIN查询? 提前Artem的坦克

自动完成服务器端实现

在html输入框中为自动完成function实现服务器端组件的快速有效方法是什么? 我正在编写一个服务,在我们的Web界面的主搜索框中自动完成用户查询,完成显示在ajax驱动的下拉列表中。 我们运行查询的数据只是我们系统知道的大型概念表,大致与维基百科页面标题集相匹配。 对于这项服务,显然速度至关重要,因为网页的响应性对用户体验很重要。 当前实现只是将所有概念加载到有序集合中的内存中,并对用户击键执行简单的log(n)查找。 然后使用尾部提供超出最接近匹配的额外匹配。 该解决方案的问题在于它无法扩展。 它目前正在运行虚拟机堆空间限制(我已设置-Xmx2g,这是我们可以在我们的32位计算机上推送的最多),这阻止我们扩展我们的概念表或添加更多function。 在具有更多内存的计算机上切换到64位VM不是一个直接的选择。 我一直犹豫是否开始研究基于磁盘的解决方案,因为我担心磁盘搜索时间会影响性能。 有没有可能的解决方案可以让我更好地扩展,无论是完全在内存中还是在一些快速磁盘支持的实现中? 编辑: @Gandalf:对于我们的用例,重要的是自动完成是全面的,而不仅仅是对用户的额外帮助。 至于我们正在完成的内容,它是概念类型对的列表。 例如,可能的条目是[(“Microsoft”,“Software Company”),(“Jeff Atwood”,“Programmer”),(“StackOverflow.com”,“Website”)]。 一旦用户从自动完成列表中选择一个项目,我们就会使用Lucene进行完整搜索,但我还不确定Lucene是否可以自动完成自动完成。 @Glen:这里没有使用数据库。 当我在谈论桌子时,我只是指我的数据的结构化表示。 @Jason Day:我对这个问题的原始实现是使用Trie ,但由于需要大量的对象引用,因此内存膨胀实际上比排序集更差。 我将阅读三元搜索树,看它是否有用。

JAXBContext初始化加速?

有没有办法加快javax.xml.bind.JAXBContexts的初始化(大于1000个类)? 在我们的XML繁重的应用程序中,启动时间大约是10分钟,主要包括JAXBContexts的初始化时间。 🙁 我们在JDK 1.5和org.jvnet.jaxb2.maven2.maven-jaxb2-plugin中使用Sun的JAXB实现来从XSD生成代码。 澄清:问题不在于我们有许多具有相同上下文路径的JAXBContext实例,但问题是单个JAXBContext的初始化需要几十秒,因为它必须加载和处理数千个类。 (我们的XSD相当大且复杂。)所有JAXBContext实例都有不同的上下文路径 – 我们无法进一步减少数量。

昂贵算法的Clojure性能

我已经实现了一个算法来计算最长的连续公共子序列(不要与最长的公共子序列混淆,尽管这个问题不重要)。 我需要从中挤出最大的性能,因为我会调用它。 我在Clojure和Java中实现了相同的算法,以便比较性能。 Java版本运行得更快。 我的问题是我是否可以对Clojure版本做任何事情来加速它达到Java的水平。 这是Java代码: public static int lcs(String[] a1, String[] a2) { if (a1 == null || a2 == null) { return 0; } int matchLen = 0; int maxLen = 0; int a1Len = a1.length; int a2Len = a2.length; int[] prev = new int[a2Len + 1]; // holds data from previous iteration […]

在Sun JRE 1.6u20上-XX:+ AggressiveOpts启用了哪些标志?

从Sun JRE 性能调优白皮书中 , -XX:+AggressiveOpts标志描述为: 打开在即将发布的版本中默认启用的点性能优化。 按此标志分组的更改是对JVM运行时编译代码的微小更改,而不是不同的性能function(例如BiasedLocking和ParallelOldGC)。 这是尝试JVM工程团队即将发布的最新性能调整的好旗帜。 注意:此选项是实验性的! 此选项启用的特定优化可以在发行版之间进行更改,甚至可以构建为构建版本。 在部署新版本的Java之前,您应该重新评估此选项的效果。 我的性能测试表明使用-XX:+AggressiveOpts实际上有助于我的应用程序,但由于这被标记为实验,我想要小心它(我过去曾被它烧过)。 所以,我想知道-XX:+AggressiveOpts上启用了哪些标志-XX:+AggressiveOpts 1.6y20上的AggressiveOpts。 通常我通过查看hotspot/src/share/vm/runtime/arguments.cpp文件中的方法Arguments::set_aggressive_opts_flags()来做到这一点,但我无法在http://download.java找到1.6u20的源代码。 .net / jdk6 / source / 。 还有其他方法可以找出-XX:+AggressiveOpts启用的标志吗? 我在哪里可以获得1.6u20版本的资源?

加速xpath

我有一个1000条目文档的格式是这样的 这里有超过1000个Entry节点。 我正在编写一个Java程序,它基本上逐个获取所有节点并对每个节点进行一些分析。 但问题是节点的检索时间随着它的增加而增加。 例如,检索第一个节点100毫秒以检索第二个节点需要78毫秒,并且它继续增加。 要检索999节点,它需要超过5秒。 这非常慢。 我们将此代码插入到包含超过1000个条目的XML文件中。 有些像数百万。 解析整个文档的总时间超过5分钟。 我正在使用这个简单的代码来遍历它。 这里nxp是我自己的类,它有从xpath获取节点的所有方法。 nxp.fromXpathToNode(“/Example/Entry” + “[” + i + “]”, doc); 和doc是该文件的文档。 i是要检索的节点。 当我尝试这样的事情时 List nl = nxp.fromXpathToNodes(“/Example/Entry”,doc); content = nl.get(i); 我面临同样的问题。 任何人都有任何关于如何加速节点tretirival的解决方案,因此从XML文件获取第一个节点和1000个节点需要相同的时间。 谢谢 这是xpathtonode的代码。 public Node fromXpathToNode(String expression, Node context) { try { return (Node)this.getCachedExpression(expression).evaluate(context, XPathConstants.NODE); } catch (Exception cause) { throw new RuntimeException(cause); } […]

使用Java为大文件生成MD5非常慢

我正在使用Java为某些文件生成MD5哈希。 我需要为几个文件生成一个MD5,总大小约为1千兆字节。 这是我的代码: private String generateMD5(SequenceInputStream inputStream){ if(inputStream==null){ return null; } MessageDigest md; try { int read =0; byte[] buf = new byte[2048]; md = MessageDigest.getInstance(“MD5”); while((read = inputStream.read(buf))>0){ md.update(buf,0,read); } byte[] hashValue = md.digest(); return new String(hashValue); } catch (NoSuchAlgorithmException e) { return null; } catch (IOException e) { return null; }finally{ try { […]

需要Java中的线程安全MessageDigest

我需要在性能关键环境中使用MessageDigest从多个线程中散列多个键。 我开始知道MessageDigest不是线程安全的,因为它将状态存储在它的对象中。 什么是实现密钥线程安全散列的最佳方法? 使用案例: MessageDigest messageDigest = MessageDigest.getInstance(“SHA-1”); //somewhere later, just need to hash a key, nothing else messageDigest.update(key); byte[] bytes = messageDigest.digest(); 特别: ThreadLocal会保证有效吗? 它会有性能损失吗? getInstance返回的对象是否不同,它们不会相互干扰? 文档说“新”对象,但我不确定它是否只是(共享)共享具体类的包装器? 如果getInstance()返回“真正的”新对象,那么每次我需要计算哈希值时,是否建议创建一个新实例? 在性能损失方面 – 它的代价是多少? 我的用例非常简单 – 只需哈希一个简单的密钥。 我不能使用同步。 谢谢,

Arrays.asList的性能

使用Arrays.asList转换静态对象数组的成本是多少? 假设对象数组有N个项,那么它只是一个O(N)算法,其中所有项都是通过引用复制的,还是仅仅是原始数组放在List外观后面的外观?