youling 发表于 2016-9-18 21:17

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/ 即可看到相关信息.

shenshaokuai 发表于 2016-9-18 21:28

你想说什么?

别人都叫我老木 发表于 2016-9-18 21:31

然而并没有什么用。

呵呵0214 发表于 2016-9-19 02:34

{:301_978:} 非常好,以后实战可以用用,但是这个是基本理论,实际内存溢出的情况要比这个复杂到死

LeiSir 发表于 2016-9-19 06:12

看了又看,不是很懂,

小木hwy 发表于 2016-9-19 07:21

不错 啊,支持了

-Zing- 发表于 2016-9-19 11:58

908443382 发表于 2016-9-21 20:07

看了又看,就是看不懂

第二梦 发表于 2016-9-28 22:14

前阶段面试就遇到这个问题 领教了

MAXtoDEATH 发表于 2016-10-9 20:04

只玩过缓冲区溢出的我、、、、
页: [1]
查看完整版本: Java堆内存溢出