一、串行并行并发G1四大垃圾回收方式
蓝色的线表示运行的线程,黄色的线表示GC线程。
1.Serial(串行垃圾回收器)
它为单线程环境设计且只使用一个线程进行垃圾回收,会暂停所有的用户线程(“stop the world”),所以不适合服务器环境。
2.Parallel(并行垃圾回收器)
多个垃圾收集线程并行工作,此时用户线程时暂停的,适用于科学计算/大数据处理首台处理等弱交互场景。
3.CMS(并发垃圾回收器)
用户线程和垃圾收集线程同时执行(不一定是并行,可能交替执行),不需要停顿用户线程,互联网公司多用它,适用于对响应时间有要求的场景。
4.G1(Garbage First)
G1垃圾回收器将堆内存分割成不同的区域然后并发的对其进行垃圾回收(Java8开始使用)
5.ZGC(Java11,12新增的)
二、怎么查看默认的垃圾收集器是哪个?
JVM参数:java8默认用的并行垃圾回收器
java -XX:+PrintCommandLineFlags -version
E:\02_workspace\02_nio_rpc_wksapce\interview>java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=263144512 -XX:MaxHeapSize=4210312192 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLarg
ePagesIndividualAllocation -XX:+UseParallelGC
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
三、Java的GC回收的类型(7种)
- UseSerialGC:串行GC。
- UseParallelGC:并行GC。
- UseConcMarkSweepGC:并发标记清除GC
- UseParNewGC:在Young区的并行GC回收方式。
- UseParallelOldGC:在Old区的并行GC。
- UseG1GC。
- UseSerialOldGC:串行 Old GC。(Java8废弃)
底层源码:
四、Java的GC参数
Server/Client模式分别是什么意思?
五、G1垃圾回收器
以前收集器的特点:
- 年轻代和老年代是各自独立且连续的内存块。
- 年轻代收集使用单eden+S0+S1进行复制算法。
- 老年代收集必须扫描整个老年代区域。
- 都是以尽可能少而快速地执行GC为设计原则。
G1收集器,是一款面向服务端应用的收集器,应用在多处理器和大容量内存环境中,在实现高吞吐量的同时,尽可能的满足垃圾收集暂停时间的要求,另外,它还具有以下特性:
- 像CMS收集器一样,能与应用程序线程并发执行。
- 整理空闲空间更快。
- 需要更多的时间来预测GC停顿时间。
- 不希望牺牲大量的吞吐性能。
- 不需要更大的Java Heap。
G1收集器的设计目标是取代CMS收集器,它同CMS相比,在以下方面表现的更出色;
- G1是一个有整理内存过程的垃圾收集器,不会产生很多内存碎片。
-
G1的stop The World(STW)更可控,G1在停顿时间上添加了预测机制,用户可以指定期望停顿时间。