1、jvm调优
jvm调优说白了就是杜绝Full GC或者减少Full GC次数,使系统稳定运行。
下面先说说堆内存模型
2、堆内存模型
下面是堆内存模型图
由上图可以看出堆内存分为年轻代和老年代,年轻代又分为eden区和Survivor区,Survivor区分为from区和to区。
2.1可达性分析算法
可达性分析算法:将“GC ROOTS”对象作为启点,从这些节点开始向下搜索引用对象,找到的对象都标记为非垃圾对象,其余的未标记的对象都是垃圾对象
2.2GC回收机制
当eden区满时,根据可达性分析算法,清除垃圾对象,保留有用对象,对象分代年龄加一(对象分代年龄可以理解为对象的一个属性,标识对象经过几次GC),将存活的对象移至from区,当eden区再次满时,对eden区和from区进行minor GC,回收垃圾对象,存活对象分代年龄加一,移至to区,如此循环,当from区或to区满时或对象分代年龄为十五时(默认值)或者一次性移进Survivor区的大小大于Survivor区一半,对象移至old,但old区满时,就好进行Full GC(堆整个堆内存进行垃圾回收),进行Full GC时,会触发stw,程序会停止运行,等待Full GC结束。
3、jvm怎么调优
jvm调优即手动调整年轻代的大小:下面分析一下下面的这个命令:
java -Xms3072M -Xmx3072M -Xmn2048 -Xss1M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -jar 应用.jar
-Xms:JVM启动时整个堆(包括年轻代,年老代)的初始化大小
-Xmx: JVM启动时整个堆的最大值
-Xmn:年轻代大小
即通过调整年轻代大小,尽量不让对象进入老年代,避免进行Full GC。