好友
阅读权限10
听众
最后登录1970-1-1
|
最近在研究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-Xmx1024m java_pid6280.hprof
会启动一个服务,如图1所示。
接着使用浏览器访问 http://localhost:7000/ 即可看到相关信息.
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|