JVM 调优篇8 实战案例6- 计算合理设置堆内存大小

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

一   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日志:

 查看比例关系

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值