从Java 1.4.2更新到Java 6(两个Sun VM)会导致性能降低

时间:2008-12-12 11:24:27

标签: java performance jvm sun

我刚刚将一些在Sun Java 1.4.2 VM上运行的旧Java源升级到Sun Java(JRE)6 VM。或多或少我唯一需要改变的是为一些抽象对象添加显式数据类型(Hashmap,Vector等)。代码本身非常耗费内存,使用高达1G的堆内存(使用-Xmx1024m作为启动VM的参数)。

由于我在较新的Java VM上阅读了很多关于更好性能的信息,这是我进行此升级的原因之一。

  1. 任何人都可以想到现在我的情况表现更糟的原因(当然,一般来说,因为你不能看一下代码)?
  2. 如果我想优化(快速)现有代码,有没有人对非Java大师提出什么建议?任何提示,推荐的文档,工具?
  3. 感谢。

4 个答案:

答案 0 :(得分:7)

这里的信息不多。但是这里有一些你可能想要探索的事情:

  • 使用Xmx和Xms作为相同的值启动VM(在您的情况下为1024M)

  • 确保使用服务器jvm dll启动虚拟机。

  • 运行探查器以查看哪些对象占用内存或哪些对象没有被垃圾回收

  • 使用jconsole连接您的VM并跟踪对象

答案 1 :(得分:3)

如果你的应用程序几乎耗尽了可用空间,垃圾收集时间可能会占用计算时间。

启用gc调试以查找此内容。或者,更好的是,只需启动jconsole并将其附加到您的程序中。

答案 2 :(得分:3)

理论上可能是你的应用程序消耗更多内存,因为Strings共享其内部char []的方式发生了变化。在1.4之后完成共享。 查看我的旧博客http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/5100(新博客为here

我会比较垃圾收集器日志,看看内存使用情况是否确实存在问题。

如果这没有帮助,我们会使用像Yourkit这样的分析器来查找差异。

答案 3 :(得分:0)

绝对在应用程序上使用分析器(YourKit很棒)...在大多数情况下,你很容易浪费大量时间来猜测问题,你可以在分析器中快速缩小范围。