Java Garbage Collection基础之Java 垃圾回收机制技术详解

一、JVM架构
1、HotSpot 架构

2、 HotSpot关键组件

二、应用程序性能的衡量要素

1、响应时间

2、吞吐量

三、自动垃圾收集器是如何工作的
1、什么是自动垃圾收集机制?

步骤一:标记

步骤二:正常删除

步骤二a:带压缩删除

2、为什么使用分代垃圾回收机制?

3、JVM各代介绍

四、垃圾回收的一般步骤

1、首先,所有新生成的对象都是放在年轻代的Eden分区的,初始状态下两个Survivor分区都是空的。年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象。

2、当Eden区满的的时候,小垃圾收集就会被触发。

3、当Eden分区进行清理的时候,会把引用对象移动到第一个Survivor分区,无引用的对象删除。

4、在下一个小垃圾收集的时候,在Eden分区中会发生同样的事情:无引用的对象被删除,引用对象被移动到另外一个Survivor分区(S1)。此外,从上次小垃圾收集过程中第一个Survivor分区(S0)移动过来的对象年龄增加,然后被移动到S1。当所有的幸存对象移动到S1以后,S0和Eden区都会被清理。注意到,此时的Survivor分区存储有不同年龄的对象。

5、在下一个小垃圾收集,同样的过程反复进行。然而,此时Survivor分区的角色发生了互换,引用对象被移动到S0,幸存对象年龄增大。Eden和S1被清理。

6、这幅图展示了从年轻代到老年代的提升。当进行一个小垃圾收集之后,如果此时年老对象此时到达了某一个个年龄阈值(例子中使用的是8),JVM会把他们从年轻代提升到老年代。

7、随着小垃圾收集的持续进行,对象将会被持续提升到老年代。

8、这样几乎涵盖了年轻一代的整个过程。最终,在老年代将会进行大垃圾收集,这种收集方式会清理-压缩老年代空间。

五、JVM垃圾收集器的种类

参数
描述

-Xms
JVM启动的时候设置初始堆的大小

-Xmx
设置最大堆的大小

-Xmn
设置年轻代的大小

-XX:PermSize
设置持久代的初始的大小

-XX:MaxPermSize
设置持久代的最大值

1、串行收集器:

java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -XX:+UseSerialGC -jar
c:javademosdemojfcJava2DJava2demo.jar

2、并行收集器

年轻代:与串行垃圾收集器年轻代相同的,只不过是,使用多个CPU并行的运行,减少了垃圾收集的开销,因此增加了吞吐量。

java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -XX:+UseParallelGC -jar
c:javademosdemojfcJava2DJava2demo.jar

java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -XX:+UseParallelOldGC -jar
c:javademosdemojfcJava2DJava2demo.jar

3、并发标记清理收集器

java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -XX:+UseConcMarkSweepGC -XX:ParallelCMSThreads=2 -jar c:javademosdemojfcJava2DJava2demo.jar

4、G1 垃圾回收器

java -Xmx12m -Xms3m -XX:+UseG1GC -jar c:javademosdemojfcJava2DJava2demo.jar

六、总结

:http://www.linuxidc.com/Linux/2017-02/140122.htm