JVM异常描述(超链接)已在本文中介绍,JVM程序计数器的每个运行时区域,Java虚拟机堆栈,本地方法堆栈,Java堆,方法区域,直接内存以及OutOfMemoryError的不同原因不同的错误消息。
Java堆是线程共享内存。几乎所有对象实例和数组都应在堆上分配。我们也经常遇到以下堆内存泄漏错误
java.lang.OutOfMemoryError: Java heap space
VisualVM工具的介绍使用VisualVM对堆内存泄漏进行故障排除并检查GC
伊甸园的老区和年轻区都在增长,几乎人满为患。 Full GC的数量增加了,并且内存没有有效释放。这是内存泄漏的明显迹象

查看系统日志
有一个Full GC日志,然后它开始报告OutOfMemoryError错误

分析堆转储

导入Dump之后,您可以看到类和实例占据了最大的内存-OOMMonitor类中的占位符变量



示例代码
public class OOMMonitor {
static class OOMobject {
public byte[] placeholder = new byte[64 * 1024];
}
public static void fillHeap(int num) throws InterruptedException {
List list = new ArrayList();
for (int i = 0; i < num; i++) {
//稍作延时,令监视曲线的变化更加明显
Thread.sleep(500);
list.add(new OOMobject());
System.out.println("Hello World");
}
}
public static void main(String[] args) throws Exception {
fillHeap(1000);
}
}
示例VM配置参数
-Xms20m
-Xmx20m
-verbose:gc
-XX:+PrintGCDetails
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/data/heapdump.hprof
扫描并关注我

本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-369363-1.html
让这帮家伙丢丢丑
死亡和无政府主义