我有两个问题,其中一个涉及以下主题:
1)我遇到了一个问题,即无法找到关于HotSpot中不同垃圾回收器如何工作的全部信息。但我不是在谈论垃圾回收器工作的一般描述(我们在互联网上有很多这方面的信息),我是在谈论具体的算法。我找到了这篇白皮书(Java HotSpot虚拟机中的内存管理)http://www.oracle.com/technetwork/java/javase/tech/memorymanagement-whitepaper-1-150020.pdf。 但它只有一般想法。它对并行紧凑算法(我的意思是并行标记-清除-紧缩)进行了很好的描述(可能不太好,请参见我的第二个问题),但它没有解释其他垃圾回收器的算法。然而,这篇白皮书是我能在互联网上找到的最好的信息。我想知道的是,在哪里可以获取有关不同垃圾收集器(对于年轻代,我指的是:ParNew,DefNew,PSYoungGen; 对于老年代:PSOLdGen,ParOldGen,Concurrent-Mark-Sweep)如何工作的完整说明/信息。无法相信这些信息不可用于用户。
2)关于并行压实收集器算法(ParOldGen或Parallel Mark-Sweep-Compact)的问题。白皮书(见第一个问题)对其工作进行了描述。让我引用一句话(请花一分钟看一下):
有以下我无法理解的内容:
关于总结阶段:
由于之前的收集而发生压缩,通常情况下每个代的左侧某些部分将是密集的,包含大多数活动对象。从这样的密集区域中可以回收的空间量不值得对它们进行压缩的成本。
这是否意味着当我们有一个由98-99%的活动对象和2-1%的死对象组成的区域时(换句话说是非常小的死对象比例),则该区域的压缩不值得从该区域中回收的空间。但是,这些微小的空闲空间(孔)最终将被填满,并且在垃圾收集完成后将没有孔。
因此,总结阶段首先要做的事情是检查区域的密度,从最左边的区域开始,直到达到从该区域及其右侧区域中可以回收的空间值得对这些区域进行压缩的点。
那么,如果我们有大量的死对象,那么这个区域就值得压缩了,对吗?
1)我遇到了一个问题,即无法找到关于HotSpot中不同垃圾回收器如何工作的全部信息。但我不是在谈论垃圾回收器工作的一般描述(我们在互联网上有很多这方面的信息),我是在谈论具体的算法。我找到了这篇白皮书(Java HotSpot虚拟机中的内存管理)http://www.oracle.com/technetwork/java/javase/tech/memorymanagement-whitepaper-1-150020.pdf。 但它只有一般想法。它对并行紧凑算法(我的意思是并行标记-清除-紧缩)进行了很好的描述(可能不太好,请参见我的第二个问题),但它没有解释其他垃圾回收器的算法。然而,这篇白皮书是我能在互联网上找到的最好的信息。我想知道的是,在哪里可以获取有关不同垃圾收集器(对于年轻代,我指的是:ParNew,DefNew,PSYoungGen; 对于老年代:PSOLdGen,ParOldGen,Concurrent-Mark-Sweep)如何工作的完整说明/信息。无法相信这些信息不可用于用户。
2)关于并行压实收集器算法(ParOldGen或Parallel Mark-Sweep-Compact)的问题。白皮书(见第一个问题)对其工作进行了描述。让我引用一句话(请花一分钟看一下):
有以下我无法理解的内容:
关于总结阶段:
由于之前的收集而发生压缩,通常情况下每个代的左侧某些部分将是密集的,包含大多数活动对象。从这样的密集区域中可以回收的空间量不值得对它们进行压缩的成本。
这是否意味着当我们有一个由98-99%的活动对象和2-1%的死对象组成的区域时(换句话说是非常小的死对象比例),则该区域的压缩不值得从该区域中回收的空间。但是,这些微小的空闲空间(孔)最终将被填满,并且在垃圾收集完成后将没有孔。
因此,总结阶段首先要做的事情是检查区域的密度,从最左边的区域开始,直到达到从该区域及其右侧区域中可以回收的空间值得对这些区域进行压缩的点。
那么,如果我们有大量的死对象,那么这个区域就值得压缩了,对吗?
左边的区域被称为密集前缀,这些区域中不会移动对象。
“这些区域中不会移动对象”,但是这些区域可能有一些小的空闲空间,我说得对吗?不能理解重点。
右边的区域将被压缩,消除所有死空间。
请澄清它们将如何被压缩。每个区域都会单独压缩吗?我猜不会,那么这里可能会有一些移位操作吗?
总结阶段计算并存储每个压缩区的活动数据第一个字节的新位置。
为了理解这一点,我需要理解上一个问题。
关于压缩阶段:
在压缩阶段,垃圾回收线程使用总结数据来识别需要填充的区域,线程可以独立地将数据复制到这些区域。这产生了一个紧密打包在一端的堆,另一端有一个单独的大空块。
我完全困惑了。所以“总结阶段”没有进行压缩?前一个阶段的目的只是找到所有的空闲空间吗?
请帮助我获得清晰的图片。