JVM笔记(垃圾回收器)

垃圾回收器算法:

常见的垃圾回收器

stop-the-world  (暂停整个程序,简称STW)

1、Serial (单线程工作的年轻代)  作用于年轻代   串行回收

在程序运行过程中,内存满了以后,触发GC, 先STW以后然后单线程一个个标记清除,程序继续运行

2、ps (多线程工作的年轻代)   作用于年轻代    并行回收   不可以配合CMS

在程序运行过程中,内存满了以后,触发GC, 先STW以后然后多线程一个个标记清除,程序继续运行

3、ParNew (多线程工作的新年轻代)   作用于年轻代  可以配合CMS的并行回收

4、SerialOld  (单线程工作的老年代)

5、ParallelOld  (多线程工作的老年代)

6、ConcurrentMarkSweep (运行时多线程的老年代,简称CMS)  老年代  并发的   垃圾回收和应用程序同时运行,不需要stop-the-word  

CMS为里程碑式的垃圾回收器。  这里出现难点,会出现浮动垃圾。如:垃圾处理过程中,已经标记为垃圾的内存。在程序运行过程中这块内存又使用了。

三色标记 ,做并发标记

在运行过程中,进行标记垃圾内存,标记完成以后。

也会发生STW,将已经标记为垃圾的内存,再次筛选标记。

然后程序继续运行,这时候将筛选完后的内存清理掉。然后开始第二轮标记。

7、G1  (分区回收)   逻辑分代,物理不分代    (三色标记+SATB)

8、ZGC    逻辑物理都不分代    ColoredPointers(颜色指针,着色指针)

9、Shenandoah  逻辑物理都不分代

10、Eplison  (如果确认你的程序不需要垃圾回收器,可使用)

调优主要调优1、2和4、5。           因为1.8默认的垃圾回收:PS+ParallelOld     

JVM调优

JVM运行命令参考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

JVM参数分类

标准:-开头,所有的HotSpot都支持

非标准:-x开头

不稳定:-xx开头    常用:   -xx:+PrintFlagsFinal(设置值);  -xx:+PrintFlagslnitial(默认值) ;  -xx:+PrintCommandLineFlags(命令行参数)

垃圾回收器的发展路线,是随着内存越来越大的过程来演进

从分代算法演化到不分代算法

在分代算法中,对象创建分配过程图:

猜你喜欢

转载自blog.csdn.net/miwanmeng/article/details/112565790