jvm笔记

  • 定位垃圾:reference-count(无法解决循环引用);root-searching 根可达算法
  • 系统上线前预估系统的内存占用情况
    gc root :典型特征 main 可直接访问
    在这里插入图片描述
    • 垃圾收集算法
      在这里插入图片描述
  • 标记清除:容易产生碎片
  • 复制:效率非常高,比较浪费空间;适用于存活对象较少的情况
  • 标记压缩(标记整理):不会产生碎片,效率偏低(需要移动对象),
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3种方式各有优缺点,实际中都会使用

  • 堆内逻辑分区
    在这里插入图片描述

  • 一个对象从出生到消亡,8:1:1是一个经验数据;实在不行就进old区域;年龄默认15,cms默认6会进old,参数可以设定,参数最高就是15(hotspot,对象头部就4位二进制来记录年龄 2^4-1 = 15)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 年轻代使用 copy 算法,对象少,效率高;老年代使用 mark-sweep 或者mark-compact 算法

  • cms 收集器只作用于old 区域

  • java -XX:+PrintCommandLineFlags -version

serial

  • 单CPU效率最高,单线程的
    在这里插入图片描述
    在这里插入图片描述
  • CMS:stw 只找根对象,根对象特别少。漏标的对象不会太多,重新标记的时间也不会太长。重大问题:会产生碎片,当碎片特别多的时候,serial-old (单线程)会介入清理
  • 漏标解决:使用3色标记算法,白、灰、黑三色
  • 1.6——1.8 (1.8可以用G1,1.7G1不成熟,1.6没有G1;只能是cms)
  • jdk1.9 默认是g1

在这里插入图片描述

  • parNew
    在这里插入图片描述

  • g1:支持内存 几百G;再大就不行了。物理上分区;逻辑上分代。停顿200ms以内
    在这里插入图片描述
    在这里插入图片描述

  • ZGC:为大内存设计 ,上T(16T)。停顿一般10ms以内,最后达到1ms以内

常用组合

  • serial + serial-old
  • parallel + parallel-old
  • parNew + cms

调优

在这里插入图片描述

  • java -XX:+PrintFlagsFinal -version
  • 常用命令:jps;jmap;jstat;jstack
  • 实际生产中用的:arthas;主要解决:OOM,FullGC 问题

生产问题

  • jmap -histo PID 【8g 左右,10G 以下,离线分析】
  • jmap -dump:format=b,file=20200210.dump PID
  • 使用 jvisualVM
    在这里插入图片描述

arthas

  • arthas : jvm;thread;thread id
  • 热替换:jad,redfine
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值