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

时间:2010-08-20 09:06:04

标签: java garbage-collection

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

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

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

问题是:垃圾收集的行为方式是否已从Java 1.4更改为Java 6?

3 个答案:

答案 0 :(得分:15)

  

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

当然!

Java 1.4到Java 6是一个相当长的时间跨度(initial releases之间差不多5年,initial 1.4 releasethe current Java 6 release之间超过8年。 this wiki article)。

在此期间会应用许多更改和优化,只要您的程序仍然有效,您就不应该非常关心。

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

如果你实际上得到了之前没有得到的OutOfMemoryError,那就有点不同了。然后你应该检查你如何使用弱引用和软引用,或者作为最后的手段试着找出你是否遇到了JVM错误。

答案 1 :(得分: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

答案 2 :(得分:3)

Java SE在8年内发生了很大变化。

关于垃圾收集器,使用Java SE 6进行了大量改进。 在Java SE 6 Update 14中引入了新的Garbage First GC。