当前位置:首页 > Java技术 > java 年轻代 jvm 调优

java 年轻代 jvm 调优

一、查看服务器项目JVM参数以及参数分析

1、jps 命令 : 列出系统中所有的 Java 应用程序以及PID

如下图所示,26647就是我部署在服务器的一个小项目的 PID

java 年轻代 jvm 调优 _ JavaClub全栈架构师技术笔记

2、jmap命令:查看堆的使用情况

如下所示,数据为未调整的默认值

[root@VM_49_159_centos ~]# jmap -heap 26647

Attaching to process ID 26647, please wait...

Debugger attached successfully.

Server compiler detected.

JVM version is 25.162-b12

using thread-local object allocation.

Mark Sweep Compact GC

Heap Configuration:    (堆的结构配置)

MinHeapFreeRatio         = 40    ( 空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制. )

MaxHeapFreeRatio         = 70   ( 空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制. )

MaxHeapSize              = 482344960 (460.0MB)       (堆的最大值)

NewSize                  = 10485760 (10.0MB)   (初始年轻代大小)

MaxNewSize               = 160759808 (153.3125MB)        (年轻代最大值)

OldSize                  = 20971520 (20.0MB)        (初始年老代大小)

NewRatio                 = 2        (年老代 :年轻代  默认是 2:1)

SurvivorRatio            = 8       ( Survivor区分为from和to两个部分,各占一半,年轻代另外一个区是Eden区,Eden:from 默认为8:1)

MetaspaceSize            = 21807104 (20.796875MB)        ( 表示metaspace首次使用不够而触发FGC的阈值 ,JDK8之后废除永久代,采用元空间)

CompressedClassSpaceSize = 1073741824 (1024.0MB)      (压缩类空间,出现java.lang.OutOfMemoryError: Compressed class space可以调大该值)

MaxMetaspaceSize         = 17592186044415 MB      ( metaspace区域的最大值 )

G1HeapRegionSize         = 0 (0.0MB)          ( G1垃圾收集器 Garbage-First Garbage Collector 的region大小)

Heap Usage:    (堆的使用率)

New Generation (Eden + 1 Survivor Space):      年轻代中 Eden区+From区

capacity = 11075584 (10.5625MB)    容量

used     = 1421240 (1.3554000854492188MB)   已使用

free     = 9654344 (9.207099914550781MB)     剩余

12.832190158099113% used            使用占比

Eden Space:       年轻代中 Eden区

capacity = 9895936 (9.4375MB)

used     = 1410936 (1.3455734252929688MB)

free     = 8485000 (8.091926574707031MB)

14.257731658733444% used

From Space:      年轻代中Sruvivor的From区

capacity = 1179648 (1.125MB)

used     = 10304 (0.00982666015625MB)

free     = 1169344 (1.11517333984375MB)

0.8734809027777778% used

To Space:   年轻代中Sruvivor的To区

capacity = 1179648 (1.125MB)

used     = 0 (0.0MB)

free     = 1179648 (1.125MB)

0.0% used

tenured generation:  年老代

capacity = 24395776 (23.265625MB)

used     = 22119176 (21.09449005126953MB)

free     = 2276600 (2.1711349487304688MB)

90.66805663406649% used

20026 interned Strings occupying 1919776 bytes.

二、堆内存的简单分析和年轻代分区及GC算法

1、堆内存的简单分析

由于JDK8之后真正废除了永久代,所以堆的主要组成就是 年轻代和年老代了

年轻代又分为 Eden和Survivor区,默认大小是 8:2 ,因为Survivor由两个同等大小的From区和To区组成

为什么Survivor区要分成两个同等大小的呢,这个就关系到年轻代的GC算法----“复制算法”了

2、复制算法简单描述

年轻代的GC算法主要采用复制算法,首先GC开始前,To区是空的。

然后GC开始时,无引用的对象会被回收(目前常用可达性分析算法判断是否存活),存活的会被复制到To区

From区的对象每经过一次MinorGC都会年龄增加一岁,达到阈值的会被复制到年老代中

(阈值可通过 -XX:MaxTenuringThreshold 设置)

没达到阈值的会被复制到To区,经过这次GC后,Eden区和From区就被清空了

接着From区和To区互换角色,继续等待下一次GC

未完待续.....

作者:15835993913
来源链接:https://blog.csdn.net/weixin_32818919/article/details/114790977


版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/java/97030.html

标签: JVM调优
分享给朋友: