java垃圾回收基础

JRE:
JVM,Java platporm core classes, supporting Java platform libraries.

性能指标:
相应能力,吞吐量

jvm的主要组件
包括:类加载器,运行时数据区,执行引擎,
高亮的组件时和jvm性能相关:Heap:存放对象的地方。Jit编译器对性能也有很大的影响,但很少可以调整。Garbage Collector的合理选择对性能影响很大。
在这里插入图片描述

Garbage Collector
过程:
1,mark,将未被引用的对象进行标记,图中黄色的表示标记了的对象。
在这里插入图片描述

2a,delete,清理未被引用的对象,
在这里插入图片描述

2b,delete with compacting,删除压缩。为了提升性能,可以将其余的对象压缩到一起,这样接下来分配内存就会更快和更容易。
在这里插入图片描述

为什么需要进行分代垃圾收集?
就像之前说得,垃圾清理,通过标记清理是很低效的。随着分配的对象越来越多,导致垃圾回收时间越来越长,stw的时间会很长,性能越来越差。然后通过大量的经验,大多数对象的存活时间是很短的。所以需要进行分代垃圾处理。

jvm中堆的拆分
the heap is broken up into smaller parts or generations. The heap parts are: Young Generation, Old Generation, and Permanent Generation.
Young Generation 分为3parts:eden,Survivor “from”,Survivor “to”。
在这里插入图片描述

垃圾回收过程
1,首先,所有新建的对象都被分配空间在eden区。
在这里插入图片描述

2,当eden区被填满之后,就会进行一次Minor Garbage Collection。
在这里插入图片描述

3,将Eden所有未被引用的对象清除后,将Eden区剩下的对象,移动到Survivor区其中一个,如:S0,并给对象一个年龄1.
在这里插入图片描述

4,当Eden区再次被填满的时候,进行下一次Minor GC。将Eden区和S0区所有未被引用的对象清除后,再将这2各区剩下的对象移动到S1,所有对象加一岁。
在这里插入图片描述

5,在下一次Minor GC的时候,当Survivor区的对象达到了某个年龄如:8的时候,就会被移动到Old Generation中。
在这里插入图片描述

6,当Old Generation被填满的时候,就会进行一次Major GC,清理并压缩该控件。
在这里插入图片描述

可视GC插件
打开如下文件,安装Visual GC插件,即可。
在这里插入图片描述

效果图:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Edward_hjh/article/details/127108872