文档章节

-XX:HeapDumpOnOutOfMemoryError

小胖子编程
 小胖子编程
发布于 2017/08/30 22:53
字数 313
阅读 7
收藏 1
点赞 0
评论 0

用法: -XX:+HeapDumpOnOutOfMemoryError 当堆抛出OOM错误时,dump出当前的内存堆转储快照。

举个栗子

public class OOM {

    static class OOMObject {

    }

    //-Xmx20M -Xms20M -XX:+HeapDumpOnOutOfMemoryError -XX:+UseParNewGC -XX:+UseConcMarkSweepGC
    public static void main(String[] args) {
        List<OOMObject> list = new LinkedList<>();
        while(true) {
            list.add(new OOMObject());
        }
    }

}

这个例子很简单,就是不断创建OOMObject,加入到list中(为了让GC Roots到对象之间有可达路径,避免被GC),直到堆内存不够时,抛出OOM异常。

运行后,控制台打印信息

java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid97312.hprof ... 
Heap dump file created [33684485 bytes in 0.424 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at com.gc.OOM.main(OOM.java:19)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

可以看到dump出了hprof文件可供分析,可以用MAT工具进行分析

用MAT打开后,可以看到分析情况

image.png

image.png

由此也可以知道,是因为list的容量过大而导致OOM,可以根据此来进行优化代码或者JVM参数。

如果是由内存泄漏导致的,也可以通过工具查看泄漏对象到GC Roots的引用链,就能进行相应的分析处理。

另一个与之相关联的参数: -XX:HeapDumpPath=/temp/ 该参数的含义是指定dump的文件目录

© 著作权归作者所有

共有 人打赏支持
小胖子编程
粉丝 1
博文 9
码字总数 9126
作品 0
绍兴
jvm诊断与优化(3)

jvm内存:如图从左到右依次为: [ (新生代)PSYoungGen:{ EdenS0(form)S1(to) } (老年代)ParOldGen:{ Old Memory} ] (方法区持久区)Perm -Xms120M 设置堆的初始大小120M -Xmx120M 设置堆最大的...

Canaan_ ⋅ 2016/04/22 ⋅ 0

tomcat 产生heapdump文件配置

系统有时会遇到OutOfMemoryError,Java堆溢出了。我们需要找到造成OutOfMemoryError原因。一般有两种情况: 1、内存泄露,对象已经死了,无法通过垃圾收集器进行自动回收; 2、内存溢出,内存...

江江的喵 ⋅ 2015/12/17 ⋅ 0

Gradle工程错误:Gradle sync failed: Java home is different

Gradle sync failed: Java home is different (1)错误描述 Gradle sync failed: The newly created daemon process has a different context than expected. It won't be possible to reco......

aa176 ⋅ 2017/04/16 ⋅ 0

idea64.exe.vmoptions

xjt2016 ⋅ 2016/10/13 ⋅ 0

IDEA15 idea64.exe.vmoptions optimization

-ea -server -Xms1g -Xmx1g -Xss16m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DoEscapeAnalysis -XX:+UseCompressedOops -XX:+UnlockExperimentalVMOptions -XX:+UseConcMarkSweepGC -X......

阿凡达纳 ⋅ 2015/11/29 ⋅ 2

JVM参数大全

-XX:PretenureSizeThreshold: 大于这个设置值的对象直接在老年代分配避免在Eden区及两个Survivor区之间发生大量的内存复制(只针对Serial和ParNew) -XX:MaxTenuringThreshold: 对象年龄计...

清风傲剑 ⋅ 2016/06/07 ⋅ 0

org.gradle.jvmargs 在Gradle.Properties里的目的是什么?

Gradle.Properties里有个注释掉的行 org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 目的是什么?...

shikeaiDev ⋅ 2014/09/14 ⋅ 2

jvm参数设置

JAVAOPTS="-Xms2048m -Xmx2048m -Xmn768m -Xss512K -XX:PermSize=96m -XX:MaxPermSize=96m -XX:SurvivorRatio=8 -XX:InitialTenuringThreshold=8 -XX:MaxTenuringThreshold=8 -XX:ParallelGC......

星逝流 ⋅ 2016/01/04 ⋅ 0

linux调查java应用常出问题命令

1.找到当前账户全部能看的java进程,看每个的内存回收情况,2秒一次,看5次 for pid in $(jps | grep -v Jps | awk '{print $1}') ; do echo $pid; jstat -gc $pid 2s 5; done 2.java虚拟机启...

兜里有佩 ⋅ 2017/02/24 ⋅ 0

Java JVM内存分析

JVM常见参数及溢出分析工具和方法 JDK1.6.45常用基本参数 -server 服务模式启动 -verbose:gc 开启gc日志打印 -Xms值} 最小堆 -Xmx{值} 最大堆 -Xss{值} 栈容量 -Xmn{值} 新生代的内存空间大小...

尤雪萍 ⋅ 2014/04/05 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Jenkins实践3 之脚本

#!/bin/sh# export PROJ_PATH=项目路径# export TOMCAT_PATH=tomcat路径killTomcat(){pid=`ps -ef | grep tomcat | grep java|awk '{print $2}'`echo "tom...

晨猫 ⋅ 今天 ⋅ 0

Spring Bean的生命周期

前言 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解。 首先看下生命周期图: 再谈生命周期之前有一点需要先明确: Spring 只帮我们管理单例模...

素雷 ⋅ 今天 ⋅ 0

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部