2016 - 2024

感恩一路有你

标记整理和复制算法的区别 java gc中为什么复制算法比标记整理算法快?

浏览量:1371 时间:2021-04-05 06:08:13 作者:admin

java gc中为什么复制算法比标记整理算法快?

与复制算法相比,标记排序算法和复制算法的主要区别在于是否需要一个空闲内存区域来存储幸存的对象。

对于标记排序算法,没有可用内存,需要按顺序将幸存对象移动到内存的一端。为了保证其他幸存对象的内容在移动过程中不被覆盖,需要在标记期间根据内存地址对其进行排序。但是,复制算法并不关心幸存对象的内存地址顺序,只需要直接复制它们,所以复制算法比较标记记住,排序算法要快一点,但是需要更多的内存。根据两种算法的特点以及新一代存储对象和老年存储对象的特点,分别采用了相应的算法。

复制算法生存对象不关心存储地址顺序

标记和整理算法需要根据对象的存储顺序移动

什么是GC

Java GC(垃圾收集,垃圾收集)机制是Java和C/C的主要区别之一。在使用Java时,一般是无需编写特殊的内存收集和垃圾清理代码。这是因为Java虚拟机中有自动内存管理和垃圾清理机制。

2、关于GC的三种算法

1。复制算法:在JVM的堆内存中,新一代使用复制算法。新一代人的记忆区域分为伊甸园、从和到三个区域。这三个区域的内存占用率是8:1:1。新创建的对象存储在Eden区域和from区域。当整个两个区域的内存达到一定的占用时,将执行轻量级垃圾收集(minor GC),幸存对象将老化1,并将幸存对象复制到to区域。此时,from区域和to区域被交换(区分from区域和to区域:谁是空的,谁是to,from区域和to区域被连续交换)。当一个物体的年龄达到15岁时,它就从新生代移到了老年。优点:无内存碎片问题,能保持对象的完整性。缺点:保持to区域为空会浪费一定的内存空间。

2. 完全GC或主要GC:在过去,一般通过标记清除或标记清除和标记排序的混合来实现。

(1)标记扫描算法:标记扫描步骤1:标记:从根集扫描,标记幸存对象步骤2:清除:再次扫描整个内存空间,回收未标记的对象,并使用空闲列表记录可用区域。优点:两次扫描,耗时,会产生内存碎片。缺点:不需要额外的空间。

(2)标记压缩标记/整理算法:标记压缩标记/整理算法的唯一缺点是效率低下。它不仅可以标记所有幸存对象,还可以整理出幸存对象的引用地址。在效率方面,标记/排序算法低于复制算法]。3、 总结了三种算法的内存效率:

复制算法>标记清除算法>标记排序算法。

内存一致性:复制算法=标记排序算法>标记清除率

标记整理和复制算法的区别 手机标记 标记算法

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。