美文网首页
基本的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