jvm学习笔记(一)初识 jvm

1.jdk,jre,jvm的区别:

jdk: java的开发环境

jre:java的运行环境

jvm:java虚拟机

oracle的官方图解:

jdk>jre>jvm

2.第一个内存溢出(java.lang.OutOfMemoryError)代码:

package com.xc.test;

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

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

}

运行报错:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Arrays.java:3210)
	at java.util.Arrays.copyOf(Arrays.java:3181)
	at java.util.ArrayList.grow(ArrayList.java:261)
	at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235)
	at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:227)
	at java.util.ArrayList.add(ArrayList.java:458)
	at com.xc.test.Test1.main(Test1.java:12)

运行设置jvm参数:

+HeapDumpOnOutOfMemoryError :生成分析文件

生成的分析文件在项目目录下:

3.一款eclipse查看分析文件的工具:

Memory Analyzer

下载地址:

https://www.eclipse.org/mat/downloads.php

下载好了之后 解压并打开:

并打开刚刚生成的java_pid3836.hprof  后缀为hprof的文件

如下:

共20m的堆内存 这块区域占了15m  所以可能出错的地方就在这一块

点击如下更换视图,可以看到是main这个线程占用了绝大多数的内存

接着展开我们可以看到 ,是代码新建了许许多多的demo对象导致内存占用比较多。

初始jvm完毕。

猜你喜欢

转载自blog.csdn.net/qq_34246546/article/details/81223474
JVM