【top2】JVM调优

JVM调优

在这里插入图片描述
JVM调整FULL GC的执行效率,调整FULL GC的执行时间?GC垃圾回收机制;

JVM可以分为两块区域,一块是线程共享区(所有线程共享的),一块分为线程私有区(每个线程都有的);

线程共享区(线程不安全)包括方法区(方法区包括常量池,全类名)和Java堆(堆中存储所有的对象包含需要调优的对象);

线程私有区(线程安全)包含Java栈(用来存储栈帧),本地方法栈(对接C语言的接口,native栈),程序计数器;

栈帧:

栈帧等于方法(main方法或者其他方法),存储了局部变量表,操作数栈(执行JVM指令的存储空间),动态链接(记录多态之间的联系),返回地址(记录执行的代码行数的)

栈溢出的情况(操作数栈):

  1. 递归 ------>> 栈帧溢出
  2. 构建了易删的属性,操作数栈溢出(因为Java栈每个线程只有1M,超过1M就溢出了):因为是线程安全的(私有的)

线程共享区

方法区(1.8 合并到堆 元空间 (永久代))

堆:存储所有对象(GC存储的对象)

堆分为三个区:年轻代(Eden)、老年代(To)、幸存者区(From)(幸存垃圾)

  1. 新创建的Demo存储在年轻代,当年轻代(Eden)如果存满了会执行轻GC(要是被使用或者被引用就会放到幸存区)
  2. 如果幸存区满了,也会执行轻GC;要是执行GC回收不了了,会放到To区;
  3. 要是To区也满了,会进行位置交换,原有的To变成From,原有的From变成To,再执行轻GC,如果执行了15次GC,对象还没有被回收,进入老年代(To),等待fullGC执行。

总结:执行频率越少越好,执行时间越短越好

调优工具:jvs、jconsole、jstask、阿尔萨斯

JDK 自带了很多监控工具,都位于 JDK 的 bin 目录下,其中最常用的是 jconsole 和 jvisualvm 这两款视图监控工具。

jconsole:用于对 JVM 中的内存、线程和类等进行监控;

jvisualvm:JDK 自带的全能分析工具,可以分析:内存快照、线程快照、程序死锁、监控内存的变化、gc 变化等。

jconsole

调优的方向

调整年轻代的大小、老年代的大小、方法区的大小;

频繁GC的场景:方法区太小,常量数据太多又回收不了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江桥诗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值