深入理解JVM之垃圾回收器详解
1.浅谈垃圾收集器
GC算法(引用计数、复制、标记清除、标记整理算法)方法论,垃圾收集器就是对应的落地的实现!
1.4种垃圾收集器
- 1、串行(STW:Stop the World)单线程
- 2、并行垃圾回收器(多线程工作,也会导致 STW)
- 3、并发垃圾回收器(回收垃圾的同时,可以正常执行线程,并行处理,但是如果是单核CPU,只能交替执行!)
- 4、G1垃圾回收器(将堆内存分割成不同的区域,然后并发的对其进行垃圾回收)
2. 垃圾回收器
- 查看默认的垃圾回收器
java -XX:+PrintCommandLineFlags -version
java 的 gc 回收器主要有哪些?(曾经有7种,现在6种)
-
DefNew : 默认的新一代 【Serial 串行】
-
Tenured : 老年代 【Serial Old】
-
ParNew : 并行新一代 【并行ParNew】
-
PSYoungGen : 并行清除年轻代 【Parallel Scavcegn】
-
ParOldGen: 并行老年区
3. Server / Client 模式
默认现在都是 Server 模式;Client几乎不会使用;
32位的Window操作系统,默认都是 Client 的 JVM 模式;
64位的默认都是 Server 模式;
4.不同的垃圾回收器的机制不同
使用标准,如何选择垃圾回收器
- 1、单CPU,单机程序,内存小
-XX:UseSerialGC
- 2、多CPU,大的吞吐量、后台计算!
XX:+UseParallelGC
- 3、多CPU,但是不希望有时间停顿,快速响应!
-XX:+UseParNewGC
或者XX:+UseParallelGC
2.G1垃圾回收器
1.以前的垃圾回收器的特点
-
1、年轻代和老年代是各自独立的内存区域
-
2、年轻代使用 eden+s0+s1 复制算法
-
3、老年代收集必须扫描整个老年代的区域;
-
4、垃圾回收器原则:尽可能少而快的执行GC为设计原则!
2.G1垃圾回收器
G1(Garbage-First)收集器 ,面向服务器端的应用的收集器;
-
使用:
-XX:+UseG1GC
这个还不是它最大的亮点,它增加了一些参数,可以自定义垃圾回收的时间! -
-XX:MaxGCPauseMillis=100
最大的GC停顿时间单位:毫秒,JVM尽可能的保证停顿小于这个时间!
G1 优点
1、没有内存碎片!
2、可以精准空垃圾回收时间!