原 JVM系列(十):堆内存调优
版权声明:本文为博主原创文章,请尊重他人的劳动成果,转载请附上原文出处链接和本声明。
本文链接:https://www.91mszl.com/zhangwuji/article/details/1190
一:jdk1.7堆结构
二:jdk1.8堆结构
三:堆内存调优
-Xms | 设置初始分配大小,默认为物理内存的1/64 |
---|---|
-Xmx | 最大分配内存,默认为物理内存的1/4 |
-XX:PrintGCDetails | 输出详细GC处理日志 |
代码演示打印-Xms,-Xmx的大小。
package com.mszl.jvm;
/**
* 功能:堆内存
* 备注:更多资料请访问 http://www.91mszl.com
* @author bobo teacher
*/
public class T2 {
public static void main(String[] args) {
System.out.println(Runtime.getRuntime().availableProcessors() + "核"); // cpu核数
long totalMemory=Runtime.getRuntime().totalMemory();
long maxMemory=Runtime.getRuntime().maxMemory();
System.out.println("-Xms: " + totalMemory/1024/1024 + "MB");
System.out.println("-Xmx: " + maxMemory/1024/1024 + "MB");
}
}
执行结果
4核
-Xms: 15MB
-Xmx: 247MB
四:演示堆内存溢出
首先将eclipse的jvm参数设置为 -Xms10m -Xmx10m -XX:+PrintGCDetails 方便演示。
package com.mszl.jvm;
/**
* 功能:java.lang.OutOfMemoryError: Java heap space
* 备注:更多资料请访问 http://www.91mszl.com
* @author bobo teacher
*/
public class T3 {
public static void main(String[] args) {
long maxMemory=Runtime.getRuntime().maxMemory();
System.out.println("-Xmx: " + maxMemory/1024/1024 + "MB");
byte[] bt=new byte[20 * 1024 * 1024];
}
}
执行结果
最大堆内存为9M,我们发现新生代的内存为3072k,老年代的内存为6848k,3072/1024+6848/1024=9.68M约等于最大堆内存9M。同时也验证了堆内存由新生代+养老代组成。
2020-03-29 21:49:41 阅读(1133)
名师出品,必属精品 https://www.91mszl.com