ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

JVM常见问题(2)

2021-10-10 20:32:25  阅读:139  来源: 互联网

标签:常见问题 标记 对象 清除 算法 内存 JVM 压缩算法


GC的算法有哪些?怎么用

GC算法主要有四种:

1、引用计数法(一般不用)

​ 每个对象都有一个引用计数器,当该对象被引用一次,则计数器+1,若对象引用失效一次,则计数器-1,当计数器为0时,则说明该对象为垃圾对象。

优点:

  • 简单
  • 计算代价分散
  • 对象从死亡到回收的时间短

缺点:

  • 不擅长处理循环引用的对象
  • 并发支持较弱
  • 占用内存

2、复制算法

​ 通过将内存平均分成两个部分,每次只使用其中一个部分,当这部分的内存满时,将内存中所有存活的对象复制到另一部分内存中,然后清空之前的内存,只使用当前的内存,以此交替进行。最典型的例子就是新生区的轻GC机制。

优点:

  • 简单
  • 不产生内存碎片

缺点:

  • 浪费内存空间

3、标记清除算法

​ 给每个对象标记,表示该对象的状态(是否需要清除)。整个过程分为两个阶段,第一个阶段是标记阶段,这个阶段会为每个对象更新标记,确认对象是否死亡,第二个阶段是清除阶段,对那些死亡的对象进行清除。

优点:

  • 不需要移动对象
  • 相较于引用计数,只需要检测标记即可

缺点:

  • 效率低,需要遍历全部对象,标记阶段需遍历活的对象,清除阶段需遍历所有对象
  • 从对象死亡到回收的时间长
  • 碎片空间无法利用

4、标记压缩算法

​ 该算法是在标记清除算法的基础上进行改进,在清除阶段,将所有存活对象进行移动,移至一个区域,将其余对象清除

优点:

  • 不会产生大量碎片空间,且gc后有连续的空内存空间

缺点:

  • 需要移动成本

  • 内存效率:复制算法 > 标记清除算法 > 标记压缩算法

  • 内存整齐度:复制算法 = 标记压缩算法 > 标记清除算法

  • 内存利用率:标记压缩算法 = 标记清除算法 > 复制算法

标签:常见问题,标记,对象,清除,算法,内存,JVM,压缩算法
来源: https://www.cnblogs.com/ymw617/p/15390500.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有