垃圾回收
2022-07-12 17:18:01 0 举报
AI智能生成
JVM垃圾回收
作者其他创作
大纲/内容
回收算法
引用计数算法
优点:实现简单,效率高
缺点:对于对象之间相互循环引用问题难以解决
根搜索算法
标记-清除算法
缺点
标记和清除效率都不高
标记清除之后会产生大量的不连续的内存碎片, 空间碎片太多会导致当程序需要为较大对象分配内存时无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作
复制算法
标记-整理算法
分代收集算法
新生代
垃圾收集算法
复制算法
标记-清除算法
分区
Eden 区
Survivor from
Survivor to
垃圾回收
Minor GC,次数比较频繁,每次回收时间也比较短
java 虚拟机-Xmn 参数可以指定新生代内存大小
老年代
垃圾收集算法
标记-整理算法
垃圾回收
MajorGC/Full GC, 次数相对比较少, 每次回收的时间也比较长
java 虚拟机-Xms 参数可以指定最小内存大小,-Xmx 参数可以指定最大内存大小
永久代
垃圾收集算法
标记-整理算法
java 虚拟机参数-XX:PermSize 和-XX:MaxPermSize 可以设置永久代的初始大小和最大容量
垃圾回收器
概述
关系图
分支主题
新生代的收集器
Serial 收集器(复制算法)
新生代单线程收集器,标记和清理都是单线程,优点是简单高效
ParNew 收集器 (复制算法)
新生代并行收集器,实际上是 Serial 收集器的多线程版本
使用-XX:+UseParNewGC(新生代使用并行收集器,老年代使用串行回收收集器)
或者-XX:+UseConcMarkSweepGC(新生代使用并行收集器,老年代使用 CMS)
Parallel Scavenge 收集器 (复制算法)
新生代并行收集器, 追求高吞吐量, 高效利用 CPU
吞吐量 = 用户线程时间/(用户线程时间+GC 线程时间)
高吞吐量可以高效率的利用 CPU 时间,尽快完成程序的运算任务
适合后台应用等对交互相应要求不高的场景
-XX:MaxGCPauseMillis 配置最大垃圾收集停顿时间
-XX:GCTimeRatio 配置吞吐量大小
并行垃圾回收器在进行垃圾回收时, 同样会持有所有应用程序的线程, 并冻结所有应用程序线程,来进行垃圾回收工作
老年代的收集器
Serial Old 收集器 (标记-整理算法)
老年代单线程收集器,Serial 收集器的老年代版本
Parallel Old 收集器 (标记-整理算法)
老年代并行收集器, 吞吐量优先, Parallel Scavenge收集器的老年代版本
CMS(Concurrent Mark Sweep)收集器(标记-清除算法)
老年代并行收集器,以获取最短回收停顿时间为目标的收集器
具有高并发、 低停顿的特点, 追求最短 GC 回收停顿时间
整个堆
G1(Garbage First)收集器 (标记-整理算法)
Java 堆并行收集器
G1 回收的范围是整个 Java 堆(包括新生代,老年代)
0 条评论
下一页