文档章节

JVM总结-OutOfMemoryError异常

 放心去流浪
发布于 04/09 11:46
字数 735
阅读 51
收藏 0

在JVM规范中,除了程序计数器,虚拟机内存的其他几个运行区域都有可能发生OutOfMemoryError异常。

Java堆溢出:

Java堆是用来存储对象实例,只要不停地创建对象实例,并且让GC ROOTS到对象之间有可达路径来避免垃圾回收机制清除这些对象,当对象数量达到最大堆的容量限制就会产生内存溢出的异常。

通过设置JVM参数-XX:+HeapDumpOnOutOfMemoryError可以让JVM在发生内存泄露异常Dump出当前内存堆转储快照方便后面分析。默认情况下,堆内存快照会保存在JVM的启动目录下名为java_pid<pid>.hprof 的文件里(在这里<pid>就是JVM进程的进程号)

当堆内存溢出时,会在异常信息后提示Java heap space

使用内存映像分析工具进行分析,判断是内存溢出还是内存泄露

1、内存泄露:

通过工具查看泄露对象到GC ROOTS引用链。就可以找到泄露对象是通过怎样的路径与GC ROOTS相关联,导致垃圾收集器无法自动回收他们

2、内存溢出:

检查虚拟机的堆参数,看是否还可以调大,从代码上检查某些对象生命周期过长,持有时间过长的情况。

例子:

使用JProfiler

1、打开快照文件

2、查看占用内存较大的对象

 

2、查看该对象通过怎样的路径与gc roots相关联

虚拟机栈和本地方法栈溢出

在HotSpot中是不区分虚拟机栈和本地方法栈的,虚拟机在扩展栈时无法分配到足够的内存空间就会抛出OutOfMemoryError。

方法区和运行时常量池溢出

运行时常量池溢出,错误后紧跟PermGen space说明运行时常量池属于方法区的一部分。

运行时产生大量的类可能填满方法区,如一些框架使用CGLib这类字节码技术,增强的类越多,就需要越大的方法区来保证动态生成的Class可以加载进内存

本机直接内存溢出

在Heap Dump中不会出现明显的异常,可以考虑是这个情况DirectByteBuffer直接通过反射获取Unsafe实例进行内存分配,会抛出内存溢出异常,但是他抛出的异常没有真正向操作系统申请分配内存,而是通过计算得知内存无法分配。

 

© 著作权归作者所有

粉丝 2
博文 14
码字总数 11352
作品 0
私信 提问
JVM规范系列第6章:Java虚拟机指令集

一条 Java 虚拟机指令由一个特定操作的操作码和零至多个操作所使用到的操作数所构成。 虚拟机指令 = 操作码 + 操作数。 其中,操作码值分别为 254(0xfe)和 255(0xff),助记符分别为 impd...

陈树义
2018/12/19
0
0
JVM(二)Java虚拟机组成详解

导读:详细而深入的总结,是对知识“豁然开朗”之后的“刻骨铭心”,想忘记都难。 Java虚拟机(Java Virtual Machine)下文简称jvm,上一篇我们对jvm有了大体的认识,进入本文之后我们将具体...

王磊的博客
01/14
151
0
JVM学习总结(一)运行时数据区

《深入Java虚拟机》这本书买了有一段时间了,当时看的时候就只是看,并没有边看边总结啥的,最后发现到脑子里面的根本所剩无几了。现在开始要好好归纳总结地再学习一遍。 运行时数据区域 JV...

hensemlee
2018/04/22
150
0
如何修复Java中的VirtualMachineError

即使是最好的代码也会抛出错误,对开发人员而言这意味着需要知道如何修复它们。在这篇文章中,Ram Lakshmanan 介绍了许多不同类型的 VirtualMachineError 以及如何解决这些问题,在应用程序不...

java菜分享
01/28
17
0
Java的OutOfMemoryError和StackOverflowError

Java的OutOfMemoryError和StackOverflowError Java Virtual Machine定义了两种异常:OutOfMemoryError与StackOverflowError。 OutOfMemoryError:Java启动一个线程时,JVM没有足够的内存空间...

开开心心过
2017/10/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

最简单的获取相机拍照的图片

  import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import andr......

MrLins
56分钟前
4
0
说好不哭!数据可视化深度干货,前端开发下一个涨薪点在这里~

随着互联网在各行各业的影响不断深入,数据规模越来越大,各企业也越来越重视数据的价值。作为一家专业的数据智能公司,个推从消息推送服务起家,经过多年的持续耕耘,积累沉淀了海量数据,在...

个推
57分钟前
8
0
第三方支付-返回与回调注意事项

不管是支付宝,微信,还是其它第三方支付,第四方支付,支付机构服务商只要涉及到钱的交易都要进行如下校验,全部成功了才视为成功订单 1.http请求是否成功 2.校验商户号 3.校验订单号及状态...

Shingfi
今天
4
0
简述Java内存分配和回收策略以及Minor GC 和 Major GC(Full GC)

内存分配: 1. 栈区:栈可分为Java虚拟机和本地方法栈 2. 堆区:堆被所有线程共享,在虚拟机启动时创建,是唯一的目的是存放对象实例,是gc的主要区域。通常可分为两个区块年轻代和年老代。更...

DustinChan
今天
6
0
Excel插入批注:可在批注插入文字、形状、图片

1.批注一直显示:审阅选项卡-------->勾选显示批注选项: 2.插入批注快捷键:Shift+F2 组合键 3.在批注中插入图片:鼠标右键点击批注框的小圆点【重点不可以在批注文本框内点击】----->调出批...

东方墨天
今天
6
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部