学习笔记1:深入理解Java虚拟机——JVM高级特性与最佳实践_OOM(内存溢出)_虚拟机参数设置_MAT

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/y41992910/article/details/83591073

eclipse中设置debug标签页的vm参数
1,Run->Debug configurations->Java Application
2,选中已经写好的项目
3,Arguments->VM arguments
4,在VM arguments 里面就可以对虚拟机的内存参数进行设置
5,设置完成后,Apply->Debug
6,过程结束
7.获取dump文件
8.用MAT工具进行分析.

设置参数如下

-verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\\dump.hprof

内存映像分析工具(例如eclipse memory analyzer)堆dump出来的堆转储快照进行分析,重点是确认内存中的对象是否是必要的.
也就是要先分清楚到底是出现了内存泄漏(memory leak)还是内存溢出(memory overflow)

import java.util.ArrayList;
import java.util.List;

public class HeapOOM {
	
	static class OOMObjec{
	}

	public static void main(String[] args) {
		List<OOMObjec> list = new ArrayList<>();
		while (true) {
			list.add(new OOMObjec());
		}
	}
}

在这里插入图片描述

在这里插入图片描述





注意项目名称不要有下划线,不然会报错说找不到主类.

[GC (Allocation Failure)  7727K->5313K(19456K), 0.0102958 secs]
[GC (Allocation Failure) -- 13505K->19416K(19456K), 0.0150072 secs]
[Full GC (Ergonomics)  19416K->10071K(19456K), 0.1473511 secs]
[Full GC (Ergonomics)  17568K->15873K(19456K), 0.1319149 secs]
[Full GC (Allocation Failure)  15873K->15869K(19456K), 0.0746161 secs]
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid27392.hprof ...
Heap dump file created [27960490 bytes in 0.080 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Unknown Source)
	at java.util.Arrays.copyOf(Unknown Source)
	at java.util.ArrayList.grow(Unknown Source)
	at java.util.ArrayList.ensureExplicitCapacity(Unknown Source)
	at java.util.ArrayList.ensureCapacityInternal(Unknown Source)
	at java.util.ArrayList.add(Unknown Source)
	at HeapOOM.main(HeapOOM.java:14)



-verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\\dump
	
	[GC (Allocation Failure)  7626K->5249K(19456K), 0.0075257 secs]
[GC (Allocation Failure)  13441K->11134K(19456K), 0.0121616 secs]
[Full GC (Ergonomics)  11134K->11066K(19456K), 0.1505298 secs]
[Full GC (Ergonomics)  18562K->16355K(19456K), 0.1338673 secs]
[Full GC (Allocation Failure)  16355K->16343K(19456K), 0.0911646 secs]
java.lang.OutOfMemoryError: Java heap space
Dumping heap to D:\\dump ...
Heap dump file created [27960542 bytes in 0.452 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Unknown Source)
	at java.util.Arrays.copyOf(Unknown Source)
	at java.util.ArrayList.grow(Unknown Source)
	at java.util.ArrayList.ensureExplicitCapacity(Unknown Source)
	at java.util.ArrayList.ensureCapacityInternal(Unknown Source)
	at java.util.ArrayList.add(Unknown Source)
	at HeapOOM.main(HeapOOM.java:14)
ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
JDWP exit error AGENT_ERROR_NO_JNI_ENV(183):  [util.c:840]

1,堆是存储对象实例的,即自己写的类都是在堆中进行内存分配的;设置堆的大小:-Xmx20M(最大值) ,-Xms20M(最小值)。
2,栈是存储局部变量,操作栈,动态链接,方法出口(都在栈桢中) 的地方,调用方法时,会创建栈桢;设置栈的大小:-Xss128K。
3,方法区是存放Class的相关信息,如类名,访问修饰符,常量池,字段描述,方法描述等。此外运行时常量池是属于方法区的,即存放常量,静态常量等;设置方法区大小,-XX:PermSize=10M和-XX:MaxPermSize=10M。
4,本地直接内存;设置本地直接内存大小:-XX:MaxDirectMemorySize(默认与-Xmx的值一样)。

猜你喜欢

转载自blog.csdn.net/y41992910/article/details/83591073
今日推荐