美文网首页
基本的JVM优化(持续更新中......)

基本的JVM优化(持续更新中......)

作者: 大数据ZRL | 来源:发表于2020-01-21 09:27 被阅读0次

    JVM内存模型

    JVM内存模型.png

    性能调优

    • GC分代机制:
      • new出新对象首先放在Eden区;
      • Eden区满了就会触发minor gc,将Eden区的非垃圾对象复制到Survivor区的From区域,将剩下的Eden区垃圾对象全部回收。:栈中或方法区等中的变量作为gcRoot,寻找gcRoot下面引用到的所有对象,将通过各种gcRoot找到的对象(有引用)标记为非垃圾对象,其他的(没被引用)就为垃圾对象(可达性分析算法)
      • 如果Eden区再次满了,minor gc就会回收Eden和From两个区域的垃圾对象。此时,Eden和From区的非垃圾对象会被复制到To区。
      • 如果Eden区再次满了,minor gc就会回收Eden和To两个区域的垃圾对象。此时,Eden和To区的非垃圾对象会被复制到From区。
      • 每次gc,每个对象的分代年龄(年龄数据保存在对象的Object Header中)就会+1。From和To区域的对象会来回复制,直到对象的分代年龄达到某个阈值15,这个对象就会被直接放到老年代中。

    • 问题:
      • 老年代满了就会触发Full gc,对Eden、From、To、老年代所有区域进行垃圾回收
      • 但是所有gc操作时,JVM会把所有的用户线程停掉(STW:stop the world),对用户影响大

    • 解决思路:
      • 减少gc次数
      • 减少gc持续时间

    • 具体操作:
      • 注:①分代年龄大于15、②大对象、③大小大于Survivor区域内存大小的50%;这三种对象会被直接放入老年代
      • 1.增大Survivor区内存大小(对象不容易直接进入老年代,减少Full gc的次数)
      • 2.增大Eden区内存大小(减少Minor gc的次数)
      • 总结:让对象尽量在年轻代流转,避免对象轻易进入老年代
        JVM调优图.png

    java虚拟机介绍:https://www.jianshu.com/p/eef13678e533

    JVM内存模型:https://www.jianshu.com/p/771253e1c573

    基本的JVM优化:https://www.jianshu.com/p/39419b76d1aa

    Java虚拟机与关键字Volatile的关系:https://www.jianshu.com/p/35627291b14a

    相关文章

      网友评论

          本文标题:基本的JVM优化(持续更新中......)

          本文链接:https://www.haomeiwen.com/subject/uffszctx.html