垃圾回收算法(4种)
GC算法是内存回收的方法论,垃圾收集器就是算法落地实现。
- 引用计数
- 复制算法
- 标记-清除
- 标记-整理
对垃圾回收期的理解:
目前为止没有完美的收集器出现,更没有万能的收集器,只有针对具体应用最合适的收集器,进行分代收集。
垃圾回收的方式有哪些?
黄色的线表示GC线程。
1.Serial(串行垃圾回收器)
它为单线程环境设计且只使用一个线程进行垃圾回收,会暂停所有的用户线程,所以不适合服务器环境。
2.Parallel(并行垃圾回收器)
多个垃圾收集线程并行工作,此时用户线程时暂停的,适用于科学计算/大数据处理首台处理等弱交互场景。
3.CMS(并发垃圾回收器)
用户线程和垃圾收集线程同时执行(不一定是并行,可能交替执行),不需要停顿用户线程,互联网公司多用它,适用于对响应时间有要求的场景。
4.G1
G1垃圾回收器将堆内存分割成不同的区域然后并发的对其进行垃圾回收
5.ZGC(Java11,12新增的)
怎么查看默认的垃圾收集器是哪个?
JVM参数:java8默认用的并行垃圾回收器
java -XX: +PrintCommandLineFlags -version
Java的GC回收的类型主要有几种?
- UseSerialGC:串行GC。
- UseParallelGC:并行GC。
- UseConcMarkSweepGC:并发标记清除GC
- UseParNewGC:在Young区的并行GC回收方式。
- UseParallelOldGC:在Old区的并行GC。
- UseG1GC。
G1垃圾回收器:
以前收集器的特点:
- 年轻代和老年代是各自独立且连续的内存块。
- 年轻代收集使用单eden+SO+S1进行复制算法。
- 老年代收集必须扫描整个老年代区域。
- 都是以尽可能少而快速地执行GC为设计原则。
G1收集器,是一款面向服务端应用的收集器,应用在多处理器和大容量内存环境中,在实现高吞吐量的同时,尽可能的满足垃圾收集暂停时间的要求,另外,它还具有以下特性:
像CMS收集器一样,能与应用程序线程并发执行。
整理空闲空间更快。
需要更多的时间来预测GC停顿时间。
不希望牺牲大量的吞吐性能。
不需要更大的Java Heap。
- G1收集器的设计目标是取代CMS收集器,它同CMS相比,在以下方面表现的更出色;
- G1是一个有整理内存过程的垃圾收集器,不会产生很多内存碎片。
- G1的stop The World(STW)更可控,G1在停顿时间上添加了预测机制,用户可以指定期望停顿时间。