zoukankan      html  css  js  c++  java
  • G1(Garbage First)

    把 java 堆内存拆分成多个大小相同的 Region, 逻辑上区分年轻代和老年代;
    G1的内存分配的过程和策略还是 垃圾回收的整个过程一样的,但是它的内存比例是动态的

    特点:可以设置垃圾回收的预期停顿时间 -XX:MaxGCPauseMills

    新生代gc如何优化?

    G1 的年轻代是动态的, -XX:G1NewSizePercent=5 ~ -XX:G1MaxNewSizePercent=60

    初始分配 5%的region给年轻代,eden满了之后 对比预设的停顿时间,如果此时回收预估耗时 远低于预设,则继续分配 region 给年轻代 , 避免频繁的进行minor gc;

    会根据设定的gc停顿时间不断的给年轻代分配更多 region ,到一定程度才触发新生代gc,保证gc停顿时间在预设范围内

    如果 -XX:MaxGCPauseMills 设置小了会造成 分配了没多少region就进行 gc,虽然gc时间很短,但是很频繁
    如果设置大了, 年轻代分配很多 region 才进行gc,这个时候对象很多,可能一次性回收几百个 region, 虽然gc频率变低了,但是停顿时间变长了

    Mixed GC 如何优化(减少发生)?

    尽量避免对象过快的进入老年代
    特别要注意避免 新生代gc后存活对象过多无法放入 survivor 区 和 动态年龄判断 这两种情况让很多对象进入老年代

    关键还是 -XX:MaxGCPauseMills ,需要结合系统压测工具、gc日志、内存分析工具等来进行综合分析, 保证gc频率和停顿时间的平衡

    G1 适用场景

    非常适合大内存堆进程,停顿可控 多次回收
    mixed gc回收老年代和年轻代的时候用的是复制算法 => 空间换时间

    G1执行流程

    image

    本文来自博客园,作者:mushishi,转载请注明原文链接:https://www.cnblogs.com/mushishi/p/14553120.html

  • 相关阅读:
    查询避免Unknown column ‘xxx’ in ‘where clause’
    mybatis判断集合长度
    springbootjpa的dao层也会出现找不到javabean的操作
    Kotlin小测试
    java8特性表达式
    layui的入门使用
    tomcat去除项目访问路径限制
    XShell上传文件到Linux服务器上
    git添加新工程
    天气预报
  • 原文地址:https://www.cnblogs.com/mushishi/p/14553120.html
Copyright © 2011-2022 走看看