JVM优化02

本文介绍了JVM中的垃圾回收算法,包括引用计数、标记清除、标记压缩、复制算法和分代算法,详细讲解了每种算法的原理和优缺点。接着探讨了各种垃圾收集器,如串行、并行、CMS和G1收集器的工作机制,并对G1收集器进行了深入分析,包括其区域划分、年轻代和混合GC的工作流程,以及Remembered Set的概念。最后提到了GC日志分析工具的使用。
摘要由CSDN通过智能技术生成

1.垃圾回收的常见算法

自动化的管理内存资源,垃圾回收机制必须要有一套算法进行计算,哪些是有效的对象,哪些是无效的对象,对于无效的对象就要进行回收处理.

常见的垃圾回收算法有:引用计数法,标记清除法,标记压缩法,复制算法,分代算法等;

1.1.引用计数算法

引用计数是历史最悠久的一种,最早George E.Collins在1960的时候首次提出,50年后的今天,该算法依然被很多编程语言使用.

1.1.1.原理

假设有一个对象A,任何一个对象对A的引用,那么对象A的引用计数器+1,当引用失败时,对象A的引用计数器就-1,如果对象A的计数器的值为0,就说明对象A没有引用了,可以被回收.

1.1.2.优缺点

优点:

  • 实时性较高,无需等到内存不够的时候,运行时根据对象的计数器是否为0,就可以直接回收;
  • 在垃圾回收的过程中,应用无需挂起,如果申请内存,内存不足,则立即报OOM错误;
  • 区域性,更新对象的计数器,只是影响到该对象,不会扫描全部对象;

缺点:

  • 每次对象被引用时,都需要去更新计数器,有一点时间开销;
  • 浪费CPU资源,即使内存够用,仍然在运行时进行计数器的统计;
  • 无法解决循环引用问题;(致命问题)

1.2.标记清除算法

标记清除算法,是将垃圾回收分为2个阶段,分别是标记和清除;

  • 标记:从根节点开始标记引用的对象;
  • 清除:未被标记引用的对象就是垃圾对象,可以被清理;

1.2.1.原理

image-20200524151750104

这张图代表的是程序运行期间所有对象的状态,它们的标志位全部是0(也就是未标记,以下默认0就是未标记,1为已标记),假设这会儿有效内存空间耗尽了,JVM将会停止应用程序的运行并开启GC线程,然后开始进行标记工作,按照根搜索算法,标记完以后,对象的状态如下图.

image-20200524152012885

可以看到,按照根搜索算法,所有从root对象可达的对象就被标记为了存活的对象,此时已经完成了第一阶段标记.接下来,就要执行第二阶段清除了,那么清除完以后,剩下的对象以及对象的状态如下图:

image-20200524152221851

可以看到,没有被标记的对象将会回收清除掉,而被标记的对象将会留下,并且会将标记重新归0,接下来就不用说了,唤醒停止的程序线程,让程序继续运行即可.

1.2.2.优缺点

可以看到,标记清除算法解决了引用计数算法中的循环引用的问题,没有从root节点引用的对象都会被回收.

同样标记清除算法也是有缺点的:

  • 效率较低,标记和清除两个动作都需要遍历所有的对象,并且在GC时,需要停止应用程序,对于交互性要求比较高的应用而言这个体验非常差;
  • 通过标记清除算法清理出来的内存,碎片化比较严重,因为被回收的对象可能存在于内存的各个角落.所以清理出来的内存是不连贯的;

1.3.标记压缩算法

标记压缩算法是在标记清除算法的基础上,做了优化改进的算法.和标记清除的算法一样,也是从根节点开始,对对象的引用进行标记,在清理阶段,并不是简单的清理未标记的对象,而是将存活的对象压缩到内存的一端.然后清理边界以外的垃圾,从而解决碎片化问题.

1.3.1.原理

image-20200524153829297

1.3.2.优缺点

优缺点同标记清除算法,解决了标记清除算法的碎片化的问题,同时,标记压缩算法多了一步,对象移动内存位置,其效率也有一定的影响.

1.4.复制算法

复制算法的核心就是,将原有的内存空间一分为二,每次只用其中的一块,在垃圾回收时,将正在使用的对象复制到另一个内存空间中,然后将该内存空间清空,交换两个内存的角色,完成垃圾的回收.

如果内存中的垃圾对象较多,需要复制的对象就较少,这种情况下适合使用该方式并且效率比较高.反之,则不适合.

image-20200524154301289

1.4.1.JVM中年轻代内存空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值