JVM堆参数调整

本文介绍了Java8中JVM的内存模型变化,特别是永久代被元空间取代。元空间使用本机内存,其大小受物理内存限制。文章讨论了JVM堆内存参数如-Xms和-Xmx的设置,并通过示例展示了不同配置下如何触发垃圾收集及可能出现的OOM情况。还探讨了如何通过调整JVM参数来避免内存问题。
摘要由CSDN通过智能技术生成

JVM垃圾收集(Java Garbage Collection)
以JDK1.8为例

Java7模型
在这里插入图片描述
Java8模型
在这里插入图片描述
在Java8中,永久代已经被移除,被一个成为元空间的区域所取代。
元空间的本质和永久代类似。

元空间与永久代之最大的区别在于:
永久代使用的JVM的堆内存,但是java8以后的元空间并不在虚拟机中而是在使用本机物理内存

因此,默认情况下,元空间的大小仅受本地内存限制。类的元数据放入native memory,字符串池和类的静态变量放入java堆中,这样可以加载多少类的元数据就不再由MaxPerSize控制,而由系统的实际可用空间来控制。

堆内存调优简介01

  • -Xms 设置初始分配大小,默认为物理内存的1/64。
  • -Xmx 最大分配内存,默认为物理内存的1/4。
  • -XX:+PrintGCDetails 输出详细的GC处理日志。
public static void main(String[] args) {
        // 返回Java虚拟机试图使用的最大内存量
        long maxMemory = Runtime.getRuntime().maxMemory();
        // 返回Java虚拟机中的内存总量
        long totalMemory = Runtime.getRuntime().totalMemory();
        // 生产环境配置成一样大,避免机器运行时出现峰值,低值的忽高忽低
        System.out.println("-Xmx:MAX_MEMORY + " + maxMemory + "(字节)、"+ (maxMemory/(double)1024/1024) + "(MB)");
        System.out.println("-Xms:TOTAL_MEMORY + " + totalMemory + "(字节)、"+ (totalMemory/(double)1024/1024) + "(MB)");
    }

配置JVM参数

-Xms1024m -Xmx1024m -XX:+PrintGCDetails

打印结果
在这里插入图片描述
305664/1024 + 699392/1024 = 981.5

配置JVM参数

-Xms10m -Xmx10m -XX:+PrintGCDetails

public static void main(String[] args) {
        String str = "lichi";
        while(true) {
            str += str + new Random().nextInt(88888888) + new Random().nextInt(999999999);
        }
    }

最后一次Full GC之后,出现OOM
在这里插入图片描述
在这里插入图片描述
[GC (Allocation Failure)
[PSYoungGen: 2038K->488K(2560K)] 2038K->736K(9728K), 0.0017218 secs]
[Times: user=0.00 sys=0.00, real=0.00 secs]
在这里插入图片描述
[Full GC (Allocation Failure)
[PSYoungGen: 0K->0K(2048K)]
[ParOldGen: 4882K->4862K(7168K)] 4882K->4862K(9216K),
[Metaspace: 3480K->3480K(1056768K)], 0.0095797 secs]
[Times: user=0.01 sys=0.00, real=0.01 secs]

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值