Java中的垃圾回收算法是由“供应商实现”的吗?
从Java虚拟机规范的介绍段到第3章:
例如,运行时数据区的内存布局、使用的垃圾收集算法以及Java虚拟机指令的任何内部优化(例如将它们转换为机器代码)都由实现者自行决定。[强调我的]
这绝对取决于供应商。例如,GCJ和Sun VM使用完全不同的垃圾收集器。
是的。Java虚拟机规范并没有具体说明垃圾回收方面的内容。每个供应商都有自己的实现方式来执行这项任务。 如果每个实现都可以自动调用垃圾收集器,那么我们就不需要手动调用垃圾回收了。
是的。Java虚拟机规范中没有具体说明垃圾回收。每个厂商都有自己的实现方式来进行GC。事实上,每个厂商都会有多种GC策略,可以根据特定任务进行最佳选择。
例如 为了获得吞吐量而调整的GC可能不适用于实时系统,因为它们会有不可预测的(通常更长)暂停时间。对于实时应用程序来说,不可预测性是致命的。
一些GC(如Oracle和IBM的GC)非常可调,并且可以根据您的应用程序的运行时内存特征进行优化。
从较高层次上看,GC的内部并不太复杂。许多在LISP早期开始的算法今天仍在使用。
阅读此文档(http://nd.edu/~dthain/courses/cse40243/spring2006/gc-survey.pdf "GC Introduction"),以获得关于垃圾回收的良好介绍。