JVM调优

了解jvm调优:

调什么:

1:调整FULL GC(垃圾回收)的执行频率 越少越好

2:调整FULL GC(垃圾回收)的执行时间 越短越好

首先要了解JVM模型:

JVM里有五大空间:

方法区,堆,java栈,native栈(本地方法栈),程序计数器

方法区:存储常量池、全类名....固定的不会被回收的数据,还有静态变量

:对象(所以对象new出的对象)

java栈:栈帧(有点像方法)

native栈:用来对接其他语言的 例如对接C语言:用java获取系统时间,获取CPU的温度(native修饰的方法)

 

程序计数器

 

五大区有可以分为两大块:

线程共享区(这里面的东西会引起线程安全问题)

线程私有区(每个线程都有一份不会引起线程安全问题,只有成员属性或静态属性才会存在线程安全问题,方法属性是不存在线程安全的因为它是线程私有的)

下面一个一个讲:

线程私有区:

java栈:

先进后出

存储栈帧的(栈帧可以等于java中的方法,但又不完全等于)

 

局部变量和操作数栈都是用来记录JVM指令的执行的(数据在两个之间相互推送);

 

程序计数器:

线程执行到5被人给抢走了,再拿到线程它怎么知道走到哪里了

就需要程序计数器(记录JVM指令执行的行数)下个线程来就从5继续执行

终结:栈里存的栈帧;栈帧就是来执行jvm指令的执行操作;stackOverFoll(栈内存溢出),如果是方法过多就是栈帧溢出,如果是属性值太多就是操作数栈溢出

总结:

JVM有五大区,方法区,堆,java栈,native栈(本地方法栈),程序计数器;这五大区可以分为两大块:线程共享区;线程私有区;

线程私有区中比较重要的就是Java栈,栈中存储的是栈帧,栈帧可以理解为方法,它里面有四块,返回地址:记录程序的执行行数,如果抛异常是它来记录错误行数的;动态连接:写代码的时候有时候一个对象会执向多个引用,由它来记录指向的引用对象;局部变量表和操作数栈来记录JVm执行指令的;程序计数器:JVM执行有很多,一个线程不可能一直归你使用,可能执行到一半线程被抢占走了,其他线程就得依靠程序计数器记录JVm指令执行的行数;native栈用来对接其他语言的

字节码文件就是JVM指令

 

线程共享区:

线程私有区,线程结束就释放掉了;共享区是所有线程都共享的区域

堆:

 

 

内存8:1:1

JVM调优调的就是它们的大小,如果执行频率太高,垃圾太多了,老年代就调大一点;如果执行轻GC的频率太高了就把年轻代调大一点;如果from转换太快了就把幸存者区调大一点。

JVM调优工具

JDK自带的jconsole

 

 

垃圾回收算法:分代算法,标记清除。。。

 

finally什么时候不执行?

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

admiraldeworm

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

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

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

打赏作者

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

抵扣说明:

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

余额充值