当前位置:   article > 正文

JVM调优之JVM垃圾收集器_jvm调优需要改变垃圾收集器吗

jvm调优需要改变垃圾收集器吗

JVM垃圾收集器

前言:我们在jvm调优时,主要目的就是让程序能够稳定的运行,减少卡顿,提升用户体验。而我们程序要都知道,在进行Full GC时,会造成STW(Stop The World)停止所有用户线程,造成卡顿。严重时会造成大量用户线程超时、失败等。调优就是根据不同场景,选择不同的垃圾收集器,并对其参数调整,来达到我们的目的,那么垃圾收集器有哪些,他的机制如何,我们又该如何选择和调优呢?

一、垃圾回收机制和常见垃圾收集器

先来看看目前主流的垃圾收集器:
在这里插入图片描述
在说这些收集器的机制时,我们先了解一下分代理论和垃圾回收算法

分代收集理论

现代大部分的虚拟机的垃圾回收器都遵循“分代收集”的理论基础来进行设计实现:
■ 绝大部分的对象的声明周期很短,都是朝生夕死。
■ 历经多次垃圾回收后仍然存活的对象就可能更加越难被回收。
根据这个理论基础,JVM的大部分虚拟机将堆空间逻辑划分为新生代/年轻代、老年代,垃圾收集器可以根据不同的区域选择不同的回收算法进行GC。
在这里插入图片描述

垃圾回收算法

目前的算法有:标记-复制算法、标记-清除算法、标记-整理算法以及分代算法

1.标记-复制算法

如图所示:将内存分隔为两块相同大小的区域,每次只使用其中的一块,每当GC完成后,将存活的对象复制到另一块区域,然后将前一块清空。
在这里插入图片描述

2.标记-清除算法

如图所示:该算法分为标记和清除两个阶段,标记存活的对象,然后GC清除掉没有被标记的对象
在这里插入图片描述
这种算法虽然简单,但是有两个问题:
● 内存越大,要标记的对象越多,耗时越久,性能越低。
● 内存碎片化问题,导致大对象(数组)分配困难。

3.标记-整理算法

它的大体流程和标记清除法一致,但是它具有整理内存空间的功能。这种算法避免了内存碎片化的问题,但是效率上相对于标记-清除法略低。
在这里插入图片描述

4.分代算法

根据对象存活周期的不同将内存划分为几块,一般是新生代和老年代,新生代基本采用标记-复制算法,老年代采用标记整理算法。

接下来再说说不同的垃圾收集器:

二、Serial、Serial Old

Serial针对年轻代、Serial Old针对老年代,但是他俩有个特点就是单线程。流程很简单&#

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/773574
推荐阅读
相关标签
  

闽ICP备14008679号