右耳菌-邓小白的Java架构师的修炼之路

JVM性能优化2 - 垃圾回收机制

2022-06-07  本文已影响0人  右耳菌

1. 自动垃圾收集

自动垃圾收集是查看堆内存,识别正在使用哪些对象以及哪些对象未被删除以及删除未使用对象的过程。

使用中的对象或引用的对象意味着程序的某些部分仍然维护指向该对象的指针。

程序的任何部分都不再引用未使用的对象或未引用的对象,因此可以回收未引用对象使用的内存。

像C这样的编程语言中,分配和释放内存是一个手动过程。在Java中,解除分配内存的过程由垃圾收集器自动处理。

2. 如何确定内存需要被回收

该过程的第一步称为标记。这是垃圾收集器识别哪些内存正在使用而哪些不在使用的地方。

标记不再使用的内存

不同类型内存的判断方式:

2.1 可达性分析算法

简单来说,将对象及其引用关系看作一个图,选定活动的对象作为回收根节点; 然后跟踪引用链条,如果一个对象和该根节点之间不可达,也就是不存在引用,那么即可认为是可回收对象,如下图所示。


可达性分析算法
2.2 引用类型和可达性级别

3. 垃圾收集算法

3.1 分代回收

根据对象的存活周期,将内存划分为几个区域,不同区域采用合适的垃圾收集算法。
新对象会分配到Eden,如果超过-XX:+PretenureSizeThreshold:设置大对象直接进入老年代的阈值。


分代回收 老年代回收算法

4. 垃圾收集器

新生代与老年代回收

单线程变成多线程的收集器:

也称为吞吐量优先的GC:吞吐量=用户代码运行时间/(用户代码运行时间+GC时间)

4.1 垃圾收集器组合
垃圾收集器组合
  1. CMS 往往考虑parNew,不考虑Serial
  2. 服务器上默认使用Parallel Scavenge 和 Parallel Old
  3. 调优时一般只会从默认调整到使用 G1、parNew还有CMS

如果觉得有收获就点个赞吧,更多知识,请点击关注查看我的主页信息哦~

上一篇下一篇

猜你喜欢

热点阅读