2020-10-20

极客大学java进阶第2课

JVM核心技术-JVM命令行工具

  1. java Java应用的启动程序

  2. javac JDK内置的编译工具

  3. javap 反编译class文件的工具

  4. jps/jinfo 查看java进程

    1. -lmv 进程详情
  5. jstat 查看JVM内部gc信息

    1. -gc
      在这里插入图片描述
  6. jmap 查看heap或类占用空间统计

    1. -heap 打印堆内存
    2. -histo 看哪些类占用的空间最多
  7. jstack 查看线程信息

  8. jcmd 执行JVM相关命令

  9. jjs 执行js命令

JVM图形化界面

jconsole

jvisualVM

JMC(官方最强大的工具)

GC要关注单位时间内创建的对象数量

  1. 飞行记录器:关注一段时间内内存使用情况

GC的背景与一般原理

为什么会有GC:内存有限,
内存泄露:对象未被使用,但还一直存在

  1. gc算法
    • 标记
    • 标记清除:遍历所有可达对象,并在内存中分门别类记下.标记完成后,不可达对象清除后在之后的内存分配时可以重用
  2. 压缩整理:整理内存,是内存连续
  3. 老年代::经过多次gc而没有被回收的年轻代的对象 * -xx +MAxTenuringThreshold=15
  4. 对象分配在eden区,标记阶段eden区的存活对象就会被复制到存活区(因为eden区存活的时间会比较短,所以采取复制的方式).老年代默认都是存活的对象,采用移动的方式
    • 标记可达对象那个
    • 删除不可达对象
    • 整理老年代空间中的内容,方法是将所有的存活对象赋值,从老年代空间开始的地方依次存放
  5. 根对象:当前执行的方法的局部变量和参数,活动线程,静态字段,JNI(底层)引用

串行gc和并行gc

串行GC(Serial GC\ParNewGC)

串行gc对年轻代使用标记-复制算法,对年老代使用标记-清除-整理算法.会触发STW停止所有的应用线程.
-XX: UseSerialGC
-XX: +USeParNewGC 配合CMS使用

并行GC

年轻代和年老代的垃圾回收会触发STW,年轻代使用标记-复制算法,年老代使用标记-清除-整理

  • 在GC期间,所有CPU内核都在并行清理垃圾,暂停时间短
  • 在两次GC周期的间隔期,没有GC线程在运行,不会消耗任何系统资源.
并发GC(CMS)

新生代::标记-复制.
老年代::标记-清除

  1. 不对老年代整理,使用空闲列表来管理内存
  2. 标记-清除阶段的大部分工作和应用线程一起并发执行.
    CMS的6个阶段
  3. 初始标记:标记根对象和子引用
  4. 并发标记::标记引用
  5. 并发预处理:
  6. 最终标记(STW)
  7. 并发清除
  8. 并发重置
G1 GC
  1. 目标:将STW停顿时间变成可预期和可配置的
  2. 事实上,G1 GC是一款软实时垃圾回收器,可以将其设置某项特定的性能指标。为了达成可预期的停顿时间指标,G1有一些独特的实现
  3. 首先,堆不在分成年轻代和老年代,而是划分为多个(2048)可以存放对象的小块堆区域。每一个小块,可能一会被定义成eden区,一会被定义成survivor区合起来就是年轻代,所有的old区拼在一起那就是老年代。
  4. -XX:+UseG1GC -XX:MaxGCPauseMillis=50 每次暂停时间最大50ms
  5. G1以增量处理
  • 每次STW都会收集所有年轻代的内存块,但一般只包含部分老年代.
  • 在并发阶段估算每个小堆块存活对象的总数,构建回收原则:垃圾最多的小块会优先被处理
  1. G1处理步骤
  2. 年轻代模式转移暂停
  3. 并发标记
  4. 转移暂停:混合模式
  5. G1退化为Serial
    • 并发模式失败
    • 晋升失败:没有足够的内存供存活的对象使用,由此触发full gc
    • 巨型对象分配失败
GC对比

在这里插入图片描述

GC组合
  1. serial+serial old 实现单线程的低延迟垃圾回收机制
  2. parNew+CMS,实现多线程的低延迟垃圾回收机制
  3. Parallel Scavenge和Parallel Sacvenge Old,实现多线程的高吞吐量垃圾回收机制
GC算法选择
  1. 如果系统考虑吞吐优先,CPU资源都用来处理业务,用parallel GC
  2. 如果系统考虑低延迟优先,每次GC时间尽量短,用CMS GC
  3. 如果系统堆内存较大,同时希望整体来看平均GC时间可控,使用G1
总结
  1. 串行GC(Serial GC):
  2. 并行GC(ParNew,Parallel Scavenge,parallel old):多线程并行地执行垃圾回收
  3. CMS:多线程并发标记和清除
  4. G1
  5. ZGC:通过着色指针和读屏障,实现超低延迟
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值