(四)JVM实战——GC垃圾回收

垃圾回收算法

垃圾的判别

  • 引用计数法:实现简单,判定效率高,回收没有延迟;无法解决循环引用的问题;
  • 可达性分析算法(根搜索算法):没有循环引用的问题,防止内存泄漏

GCRoot包含哪些

  • 虚拟机栈中引用的对象:局部变量
  • 本地方法栈中引用的对象
  • 类静态属性引用的对象
  • 方法区中常量引用的对象
  • 被同步锁持有的对象
  • java虚拟机内部的引用

垃圾回收的算法

  • 标记-清除算法:把未标记的清除,存在内存碎片化问题
  • 复制算法:不存在内存碎片化问题;但是需要俩倍的内存空间;新生代选择此算法
  • 标记-整理算法:通过指针碰撞实现;效率不高;老年代使用;
  • 分代收集算法: 不同内存区域选择不同的垃圾回收策略
  • 增量收集算法:分阶段的垃圾回收,和用户线程交替执行,降低STW的时间,实现低延迟的效果
  • 分区算法:用于动态内存分配和释放

对象引用类型

  • 强引用:不回收
  • 软引用:内存不足回收
  • 弱引用:发现即回收
  • 虚引用:对象回收跟踪

垃圾回收器

GC的评估指标

  • 吞吐量:程序的运行时间指标
  • 暂停时间(STW):执行垃圾回收时,用户工作线程被暂停的时间
  • 内存占用:堆区所占用的内存大小

垃圾回收器

  • Serial GC:串行回收,使用复制算法
  • Serial Old GC:串行回收,使用标记整理算法
  • Parallel Scavenge GC:吞吐量优先垃圾回收器,jdk8默认的垃圾回收器,年轻代回收
  • Parallel Old GC:吞吐量优先垃圾回收器,jdk8默认的垃圾回收器,老年代回收
  • ParNew GC:并行回收,使用复制算法
  • CMS GC:低延迟垃圾回收器,标记-清除算法,会有碎片,老年代回收
  • G1:区域化,分代式垃圾回收器,尽可能高的吞吐量下保证延迟可控
  • ZGC:提供低延迟和高吞吐量的垃圾收集。它专注于减少长时间的垃圾回收停顿,并在大内存堆上进行高效的垃圾回收。

GC日志

日志参数

日志参数
名称说明
-XX:+PrintGCGC标准输出日志
-XX:+PrintGCDetailsGC详细的日志信息
-Xloggc:./logs/gcGC垃圾回收的日志文件存储位置

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厉害哥哥吖

您的支持是我创作下去的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值