Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是Java GC中的压缩?_Java_Garbage Collection - Fatal编程技术网

什么是Java GC中的压缩?

什么是Java GC中的压缩?,java,garbage-collection,Java,Garbage Collection,我读了一篇文章,它给出了Java中GC的高级图片。它说: 压缩任务是通过压缩内存来消除内存碎片,以消除分配内存区域之间的空白空间 是否应该将物体移到其他地方以填充孔洞 我认为物体是移动的。如果是这样,意味着地址发生了变化,那么对该对象的引用也应该更新 查找所有反向引用并更新它们似乎太复杂了…是的,任意对象在内存中任意移动,是的,这需要更新对这些对象的引用。人们也可以使用间接寻址,但这已经发生了,而且我不知道有任何高性能GC在这样做 这确实有点复杂,但就GC优化而言,它是相当良性的。Basic工作

我读了一篇文章,它给出了Java中GC的高级图片。它说:

压缩任务是通过压缩内存来消除内存碎片,以消除分配内存区域之间的空白空间

是否应该将物体移到其他地方以填充孔洞

我认为物体是移动的。如果是这样,意味着地址发生了变化,那么对该对象的引用也应该更新


查找所有反向引用并更新它们似乎太复杂了…

是的,任意对象在内存中任意移动,是的,这需要更新对这些对象的引用。人们也可以使用间接寻址,但这已经发生了,而且我不知道有任何高性能GC在这样做

这确实有点复杂,但就GC优化而言,它是相当良性的。Basic工作得相当好,它基本上只是按地址顺序遍历所有对象,将它们移动到最小的可用地址,并在运行时构建一个分解表,其中包含用于快速修复引用的必要信息start address->displacement,然后它会在第二次运行时执行此操作。所有这些都不需要任何标记扫描收集器已经需要的对象类型、引用位置等以外的信息或簿记


当您在世代设置中将对象移出托儿所时,您还大致知道旧引用的位置。您需要知道这一点,才能进行较小的收集。

是的,任意对象会在内存中任意移动,是的,这需要更新对这些对象的引用。人们也可以使用间接寻址,但这已经发生了,而且我不知道有任何高性能GC在这样做

这确实有点复杂,但就GC优化而言,它是相当良性的。Basic工作得相当好,它基本上只是按地址顺序遍历所有对象,将它们移动到最小的可用地址,并在运行时构建一个分解表,其中包含用于快速修复引用的必要信息start address->displacement,然后它会在第二次运行时执行此操作。所有这些都不需要任何标记扫描收集器已经需要的对象类型、引用位置等以外的信息或簿记

当您在世代设置中将对象移出托儿所时,您还大致知道旧引用的位置。你需要知道,做一个小收集