Java堆内存溢出
最近在研究Java虚拟机,下面演示个Java堆内存溢出的实例,Java堆内存用于存储对象实例,只有不断的创建对象并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么在对象数量达到堆得最大容量后就会产生堆内存溢出异常,示例代码如下:import java.util.List;
import java.util.ArrayList;
/**
* java -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=F:\IT\java HeapOOM
* 运行以上命令 产生hprof文件,可以分析溢出原因
*/
public class HeapOOM{
static class OOMObject{}
public static void main(String[] args){
List<OOMObject> list = new ArrayList<OOMObject>();
while(true){
list.add(new OOMObject());
}
}
}
用命令编译,然后执行以下命令
java -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=F:\IT\java HeapOOM
然后在F:\IT\java这个路径下有个hprof格式的文件。
然后用jhat命令来分析hprof文件,执行以下命令:
jhat -J-Xmx1024mjava_pid6280.hprof
会启动一个服务,如图1所示。
接着使用浏览器访问 http://localhost:7000/ 即可看到相关信息.
你想说什么? 然而并没有什么用。 {:301_978:} 非常好,以后实战可以用用,但是这个是基本理论,实际内存溢出的情况要比这个复杂到死 看了又看,不是很懂, 不错 啊,支持了 看了又看,就是看不懂 前阶段面试就遇到这个问题 领教了 只玩过缓冲区溢出的我、、、、
页:
[1]