垃圾回收

简介: 垃圾回收

如何查看当前JVM使用的垃圾回收器?


java -XX:+PrintCommandLineFlags -version


如何指定使用CMS回收?


-XX:+UseConcMarkSweepGC


如何打印回收日志?


-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/Users/dbq/Documents/git/gctest/logs/gc.log


垃圾回收过程


CMS垃圾回收的6个重要阶段


1、initial-mark 初始标记(CMS的第一个STW阶段),标记GC Root直接引用的对象,GC Root直接引用的对象不多,所以很快。


2、concurrent-mark 并发标记阶段,由第一阶段标记过的对象出发,所有可达的对象都在本阶段标记。


3、concurrent-preclean 并发预清理阶段,也是一个并发执行的阶段。在本阶段,会查找前一阶段执行过程中,从新生代晋升或新分配或被更新的对象。通过并发地重新扫描这些对象,预清理阶段可以减少下一个stop-the-world 重新标记阶段的工作量。


4、concurrent-abortable-preclean 并发可中止的预清理阶段。这个阶段其实跟上一个阶段做的东西一样,也是为了减少下一个STW重新标记阶段的工作量。增加这一阶段是为了让我们可以控制这个阶段的结束时机,比如扫描多长时间(默认5秒)或者Eden区使用占比达到期望比例(默认50%)就结束本阶段。


5、remark 重标记阶段(CMS的第二个STW阶段),暂停所有用户线程,从GC Root开始重新扫描整堆,标记存活的对象。需要注意的是,虽然CMS只回收老年代的垃圾对象,但是这个阶段依然需要扫描新生代,因为很多GC Root都在新生代,而这些GC Root指向的对象又在老年代,这称为“跨代引用”。


6、concurrent-sweep ,并发清理。


image.png

CMS的一次回收详细过程


日志分析


在线分析工具https://gceasy.io/


image.png

image.png


相关文章
|
算法 Java UED
JVM GC垃圾回收
JVM GC垃圾回收
159 3
JVM GC垃圾回收
|
2月前
|
缓存 算法 Java
GC垃圾收集算法
这篇文章详细讨论了垃圾收集(GC)的几种算法,包括引用计数、可达性分析、标记-清除、标记-复制和标记-整理算法,并介绍了这些算法的优缺点和适用场景。
34 0
GC垃圾收集算法
|
7月前
|
算法 Java
JVM GC 垃圾回收
【1月更文挑战第3天】JVM GC 垃圾回收
|
存储 算法 JavaScript
V8如何进行垃圾回收的
V8如何进行垃圾回收的
43 0
|
算法 小程序 Java
【垃圾回收】原来是这样!我懂了
本文主要介绍 java性能分析 之 垃圾收集
169 0
|
缓存 算法 安全
JVM垃圾回收GC
这是JVM系列知识的最后一篇文章,本文围绕垃圾回收GC,涉及常用的垃圾回收算法,以及几种垃圾回收器。
98 0
|
算法 Java UED
JVM - 再聊GC垃圾收集算法及垃圾收集器
JVM - 再聊GC垃圾收集算法及垃圾收集器
107 0
|
算法 Java 程序员
【GC 垃圾收集器】
【GC 垃圾收集器】
|
存储 前端开发 算法
V8 如何进行垃圾回收?
V8 如何进行垃圾回收?
103 0
|
算法 Java
详解gc(垃圾回收)机制六:分代垃圾回收
详解gc(垃圾回收)机制六:分代垃圾回收
212 0
详解gc(垃圾回收)机制六:分代垃圾回收