2

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

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

  1. 谁能想到我现在的情况下性能更差的原因(当然,一般来说,因为您无法查看代码)?
  2. 如果我想优化(速度方面)现有代码,有没有人对非 Java 大师有什么建议?任何提示、推荐的文档、工具?

谢谢。

4

4 回答 4

7

这里没有太多信息。但这里有一些你可能想要探索的东西:

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

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

  • 运行分析器以查看哪些对象正在占用内存或哪些对象没有被垃圾收集

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

于 2008-12-12T11:35:30.093 回答
3

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

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

于 2008-12-12T11:28:40.357 回答
3

从理论上讲,您的应用程序可能会消耗更多内存,因为字符串共享其内部 char[] 的方式发生了变化。1.4 后共享较少。在http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/5100查看我的旧博客(新博客在这里

我会比较垃圾收集器日志,看看内存使用是否真的是问题所在。

如果这没有帮助,我们可以使用 Yourkit 之类的分析器来找出差异。

于 2008-12-12T15:07:46.037 回答
0

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

于 2010-01-31T02:25:59.567 回答