垃圾收集从Java 1.4变为Java 6?

b.r*_*oth 6 java garbage-collection

我们最近将我们的一个应用程序从Java 1.4升级到Java 6.

通过一些负载和性能测试,我们观察到Java 6中的可用内存通常保持在比Java 1.4更低的水平.

在使用Java 6对应用程序进行一些分析之后,我们注意到许多对象不再被任何其他对象引用(即垃圾收集的候选者)留在内存中,显然从未被垃圾收集.我们把它作为较低可用内存的解释.

问题是:垃圾收集行为从Java 1.4改为Java 6的方式是什么?

Joa*_*uer 15

垃圾收集行为从Java 1.4改为Java 6的方式是什么?

非也!

Java 1.4到Java 6是一个非常长的时间跨度(在最初 版本之间差不多5年,在最初1.4版本当前的Java 6版本之间超过8年,根据这篇wiki文章).

在那段时间内应用了许多更改和优化,只要程序仍然有效,您就不应该真正关心.

拥有更多已用内存意味着JVM在不需要时不会浪费时间进行垃圾回收.如果您希望它使用更少的内存,那么您应该减少最大堆(或以其他方式调整JVM参数; 本文解释了如何在Java 5中执行此操作,大部分建议仍然适用).

如果你真的得到OutOfMemoryError了以前没有得到的东西,那就有点不同了.然后你应该检查你如何使用弱引用和软引用,或作为最后的手段尝试找出你是否遇到了JVM错误.


Nik*_*ohl 5

垃圾收集在1.4到5之间以及5到6之间进行了几次优化

oracle/sun在网上有一些关于性能差异的白皮书.

http://java.sun.com/performance/reference/whitepapers/5.0_performance.html#2.11

http://java.sun.com/performance/reference/whitepapers/6_performance.html#2.2