我是Java的新手,我想知道不同版本的HotSpot JVM垃圾收集器的结构和垃圾收集过程的原理(我主要对Java 1.6中使用的那些感兴趣) ,1.7和1.8),但遗憾的是,我无法找到用Java来涵盖这一主题的广泛资源。
答案 0 :(得分:0)
链接有点旧,但我希望有所帮助
http://cs.williams.edu/~freund/cs434/hotspot-gc.pdf
也可能想检查
http://mechanical-sympathy.blogspot.com.br/2013/07/java-garbage-collection-distilled.html
最后一个在为所有类型的东西调整JVM时给了我很多帮助,无论如何都是一个很好的阅读。
答案 1 :(得分:0)
Java中有多个垃圾收集器;但是受欢迎的人才是“eden"和衰老模型。
当然,现在大多数人都在运行G1垃圾收集器,即使是那种流行的模型也经常没有描述真正发生的事情。不要太担心这种不准确性,对于很多版本来说,这是事实上的默认。
垃圾收集主要涉及两个主要任务,即回收内存和孔压缩。
对于旧伊甸园风格的垃圾收集者,其想法是
因此," eden" space是堆的一部分,其中尚未检查对象以查看JVM程序执行线程是否仍可访问它。幸存者空间是对象被复制到的地方(复制允许重新建立地址并因此压缩),而其他更永久的空间表示更长寿命的对象。
现在有了新的G1垃圾收集器,你实际上有数千(到数百万)的迷你堆,整个堆都根据它包含的对象的生存能力进行标记。有时通过组合两个"堆积块来完成压缩&#34 ;;但是,由于堆大得多,通常它们只是被丢弃而不是压缩(由于当考虑更少的对象时堆中的所有对象都无法访问的可能性更高)。