08.马士兵jvm

1.2个模型 分代模型和分区模型
如图jvm8 左分代 右分区
在这里插入图片描述

2.新生代 复制算法的运行过程

    eden产生对象--->复制对象到from和to(survivor区)--->清除eden区(空间大)
     ---->from对象复制到to--->清除from区变成to区--->fromto交换位置--->
    一定年龄可以加入老年代

3.6种垃圾回收器(垃圾多会卡顿,回收器卡顿时间不同)

1.serial(卡顿的原因,最古老的收集器) oracle offical: a stop-the-world(STW) copying collector which uses a single gc thread
         就是停止复制算法单线程的操作配对serial old   十几m
2.parallel scavenge(ps是上面的,并行)(1.8默认使用) 几百m--几g
3. cms concurrent mark sweep(并发标记) 同时回收垃圾,业务同时运行会改变垃圾回收 
    根据对象的关系垃圾出来, 20g
4. g1: SATB snapshot at the beginning(灰色对象和白色对象 记录下来,如果有黑色指像白色,就认为是垃圾,反之)(改对象的指向)
          分区,导致可以相互运行不影响,Rset(region)分区集,可以方便子节点访问父节点 百g
5. zgc 4t-16t(11不完善,jdk13) 

4.(cms)三色标记算法(用多种方式标记,cms用头部信息标记,其他的用01 10 11标记)(最后找完全部是黑色) bug浮动垃圾

 concurrent mark sweep并发标志清除
   白色: 只有自己一个节点(没有遍历到节点)
   灰色: 自己标记完成,但是没有来得及标记孩子节点, 垃圾回收器,只需要从灰开始,不用从根开始,找孩子
   黑色: 自己已经标记,孩子节点都标记了
         incremental update : 如果对象 的指向被改变,则把要更新的对象标记为灰色

   例子:
        A(黑)--->B(灰)--->C(白)  
       A--->D(白)   如果改上C连D 把C变为灰色
  1.有隐蔽的bug:垃圾回收线程,由于对象有多个属性,会漏标,变灰找到下一个对象,就变黑,下一个属性要用这个, 但是他是黑的所以找不到
      所以最后remark阶段,从头找,放漏标

5.ZGC zero paused gc 10ms colored pointer + load barrier(颜色指针+负载屏障)

 不支持32位,不支持指针压缩(通常用44位)
    ---没有用的空间18bit----|finalizable|remapped|marked1|marked0|object addr
        初始: 都是remapped状态
        过程: 从根开始找到一个对象就标记为remark0
                如果使用这个内容,就拿到 jvm负载屏障区域(改变了内存地址,所有垃圾回收拷贝内存都要变)

6.调优实战(linux) 要写个线程池

  java -version
   // -开头的是标准参数 ,-X是非标准参数 -XX
   java -X  
 //查看虚拟机所有参数 700个参数可以调
  java -XX:+PrintFlagsFinal | more
  //初始大小 最大大小 打印
  java -Xms200M -Xmx200M -XX:PrintGC com.top.jamsee
  //输出 allocation failure分配失败 50000k-1000k(200000k) 年轻代全部50m清理到1m,总内存200m
   //去安装阿里的 arthas阿尔萨斯 查看java的运行的状态,切换到目录运行jar包
       java -jar arthas-boot.jar
     //敲数字指向要监控的java程序 如 1
    //cpu 内存,runtime运行环境,运维都是重启
    dashboard
     exit可退出容器


        //不用安装的
        //查看那些对象吃内存,实际不用,需要让堆暂停业务暂停,heapdown,已经OOM了,查看这个日志,大厂不能这样说
        jmap -histo 1232 | head -20    

7.常见调优参数

  -Xms 初始堆大小
  -Xmx 最大堆大小
  -Xss 线程栈大小
  -XX:NewSize=n 设置年轻代大小
  -XX:NewRatio=3  设置年轻代和老年代 的比值. 1年轻代:3老年代
  -XX:SurvivorRatio=3  survivor有2个 eden3:2survivor
  -XX:MaxpermSize=10M 持久代大小
  //收集器设置,+号代表打开,-代表关闭
    -XX:+UseSerialGC 设置串行收集器
    -XX:+UseParallelGC 设置并行收集器
    -XX:+UseConcMarkSweepGC 使用并发收集器,CMS标志清除法,并发收集低停顿
     -XX:+UseParNewGC 并行收集新生代的垃圾,,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生
     -XX:+UseCMSCompactAtFullCollection 开启对老年代的压缩.减少碎片
     -XX:LargePageSizeinBytes=128m 设置内存分页大小对内存的提升(百度)
     -XX:+UseFastAccessorMethods  get/set方法转为本地代码
     -Djava.awt.headless=true 修复linux的tomcat处理图像产生的可能的一个bug
   //垃圾回收统计
    -XX:+PrintGC
    -XX:+PrintGCDetails
    -Xloggc:filename //与上面几个配合使用,日志信息记录到文件(文件名)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值