JVM调优

JVM调优

概念:
JVM把内存区分为堆区(heap)、栈区(stack)和方法区(method)。由于本文主要讲解JVM调优,因此我们可以简单的理解为,JVM中的堆区中存放的是实际的对象,是需要被GC的。其他的都无需GC。
在这里插入图片描述
从上图我们可以清楚的看到,

1、JVM实质上分为三大块,年轻代(YoungGen),年老代(Old Memory),及持久代(Perm,在Java8中被取消)。
2、垃圾回收GC,分为2种,一是Minor GC,可以可以称为YGC,即年轻代GC;还有一种称为FullGC。
3、GC原理:

我们可以看到年轻代包括Eden区(对象刚被new出来的时候,放到该区),S0和S1,是幸存者1区和幸存者2区,从名字可以看出,是当发生Minor GC,没有被任何其他对象所引用的对象将会从内存中被清除,还被其他对象引用的则放到幸存者区。当发生多次Minor GC,在S0、S1区多次没有被清楚的对象,则会被移到老年代区域。当老年代区域被占满的时候,则会发送FullGC。

JVM调优的目的是减少FullGC
在实际运用过程中,我们可以合理调这些区域的占比,来减少GC
不管是Minor GC还是FullGC都会造成STD(STD:停止整个事件),导致用户操作界面卡顿
那么java虚拟机为什么要设置STD呢?
如果不设置STD的话那么就会照成一个指向不存在的对象这种情况出现比如a指向了对象A,但是对象A又被FullGC了,就会导致
a指向了一个不存在的对象

GC Roots根节点:线程栈的本地变量,静态变量,本地方法,栈的变量等等
本地方法:用native关键字标识的
在Thread.java里面
private native void start0();
是jdk低层源码c++实现的(如何找到jdk源码,通过我们安装好jdk后,安装路径下面会有个src文件,这个文件里面就是jdk源码)
下载阿里巴巴开源的jvm调优工具arthas_boot.jar
Arthas
Arthas是一款阿里巴巴开源的 Java 线上诊断工具,功能非常强大,可以解决很多线上不方便解决的问题。

Arthas诊断使用的是命令行交互模式,支持JDK6+,Linux、Mac、Windows 操作系统,命令还支持使用 tab 键对各种信息的自动补全,诊断起来非常利索。
官方网址及文档:
https://alibaba.github.io/arthas/index.html
gethub地址:
https://github.com/alibaba/arthas
java -jar arthas-boot.jar 执行arthas-boot 包
dashboard arthas的监控大盘
thread+线程ID 很快就能定位到占用最高的代码(CPU占用最高的代码)
thread -b 查询线程死锁,线程阻塞(blocked死锁,阻塞)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值