我刚刚将一些在Sun Java 1.4.2 VM上运行的旧Java源升级到Sun Java(JRE)6 VM。或多或少我唯一需要改变的是为一些抽象对象添加显式数据类型(Hashmap,Vector等)。代码本身非常耗费内存,使用高达1G的堆内存(使用-Xmx1024m作为启动VM的参数)。
由于我在较新的Java VM上阅读了很多关于更好性能的信息,这是我进行此升级的原因之一。
感谢。
答案 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很棒)...在大多数情况下,你很容易浪费大量时间来猜测问题,你可以在分析器中快速缩小范围。