Java基础知识:垃圾收集

5
Java中的垃圾回收算法是由“供应商实现”的吗?

你的意思是不同的JVM之间会有所不同吗?我认为答案是肯定的,但要确认,请查看JLS中是否描述了垃圾回收方法。虽然我怀疑它没有被描述。 - Noon Silk
为了允许保守的收集器,实际上没有可以放置在收集器上的任何限制(除了不收集非垃圾对象之外)。没有垃圾回收是有效的。 - Tom Hawtin - tackline
是的。我们可以问一下,你为什么关心呢? - Alex Martelli
5个回答

6

Java虚拟机规范的介绍段到第3章:

例如,运行时数据区的内存布局、使用的垃圾收集算法以及Java虚拟机指令的任何内部优化(例如将它们转换为机器代码)都由实现者自行决定。[强调我的]


4

是的,不仅如此,每个JVM可以包含多个垃圾回收策略:


1

这绝对取决于供应商。例如,GCJ和Sun VM使用完全不同的垃圾收集器。


0

是的。Java虚拟机规范并没有具体说明垃圾回收方面的内容。每个供应商都有自己的实现方式来执行这项任务。 如果每个实现都可以自动调用垃圾收集器,那么我们就不需要手动调用垃圾回收了。


0

是的。Java虚拟机规范中没有具体说明垃圾回收。每个厂商都有自己的实现方式来进行GC。事实上,每个厂商都会有多种GC策略,可以根据特定任务进行最佳选择。

例如 为了获得吞吐量而调整的GC可能不适用于实时系统,因为它们会有不可预测的(通常更长)暂停时间。对于实时应用程序来说,不可预测性是致命的。

一些GC(如Oracle和IBM的GC)非常可调,并且可以根据您的应用程序的运行时内存特征进行优化。

从较高层次上看,GC的内部并不太复杂。许多在LISP早期开始的算法今天仍在使用。

阅读此文档(http://nd.edu/~dthain/courses/cse40243/spring2006/gc-survey.pdf "GC Introduction"),以获得关于垃圾回收的良好介绍。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接