一 jmap查看堆结构配置
1.1 堆内存分配策略
Java堆区用于存储Java对象实例,那么堆的大小在JVM启动时就已经设定好了,大家可以通过选项“-Xmx”和“-Xms”来进行设置。
“-Xms”用于表示堆区的起始内存,等价于-XX:InitialHeapSize
“-Xmx”则用于表示堆区的最大内存,等价于-XX:MaxHeapSize
一旦堆区中的内存大小超过“-Xmx”所指定的最大内存时,将会抛出OutOfMemoryError:heap异常。
通常会将-Xms和-Xmx两个参数配置相同的值,其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小,从而提高性能。
heap默认最大值计算方式:如果物理内存少于192M,那么heap最大值为物理内存的一半。如果物理内存大于等于1G,那么heap的最大值为物理内存的1/4。
heap默认最小值计算方式:最少不得少于8M,如果物理内存大于等于1G,那么默认值为物理内存的1/64,即1024/64=16M。最小堆内存在jvm启动的时候就会被初始化。
1.2使用jmap 查看堆内存的分配
# 查看进程ID
jps -l
# 查看对应的进程ID的堆内存分配
jmap -heap 3725
1.3 案例演示
1.代码
public class AdaptiveSizePolicyTest {
public static void main(String[] args) {
try {
Thread.sleep(1000000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
2.演示操作
PS E:\virtual-iplant-project\jvm-optimise> jps
12592 Launcher
143284 Main
15704
183720 Jps
195544 AdaptiveSizePolicyTest
PS E:\virtual-iplant-project\jvm-optimise> jinfo -flag NewRatio 195544
-XX:NewRatio=2
3.查看:jhsdb jmap --heap --pid 195544
1.4 案例2

二 新生代与老年代配置
2.1 操作设置比例
堆大小 = 新生代 + 老年代。其中,堆的大小可以通过参数 –Xms、-Xmx 来指定。
默认的,新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio=2 来指定,就代表老年代和新生代的比例为2:1 ),即:新生代 ( Young ) = 1/3 的堆空间大小。
设置参数:-XX:+PrintGCDetails -XX:NewRatio=5

2.查看log日志:
查看比例关系

JVM堆结构配置与新生代老年代比例设置

1889

被折叠的 条评论
为什么被折叠?



