最近重看 BlueDavy 的 《分布式java应用:基础与实践》和周志明的《深入理解java虚拟机》,发现以前有些概念还是理解得不够,缺少实践,所以想在这里记录下自己学习的一些知识点。
今天就来看看OutOfMemoryError 异常吧
1.Java堆异常
java堆异常算是比较常见的,我们可以通过参数 -XX:+HeapDumpOnOutOfMemoryError让虚拟机在出现内存溢出异常时Dump出当前的内存堆转储快照以便事后分析。
出现该异常时,堆栈信息为“java.lang.OutOfMemoryError”,后面还跟着"Java heap space"。
下面来看看解决思路:
- 可以通过内存映像分析工具(如 Eclipse Memory Analyzer ) 对 dump出来的堆转储快照进行分析,确认内存中的对象是否是必要的,就是说确定是内存泄漏还是内存溢出。
- 如果是内存泄漏,进一步通过工具,分析泄漏对象到GC Roots的引用链,定位出泄漏代码的位置
- 如果不存在泄漏,则需要检查jvm的堆参数(-Xmx 与 -Xms),是否可以增大。
2.虚拟机栈和本地方法栈溢出
Java虚拟机规范中描述了两种异常:
如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常。
如果虚拟机在扩展栈时无法申到足够的内存空间,则抛出OutOfMemoryError异常。
根据以上所述,解决此类异常,无法就是配置jvm的参数。
通过-Xoss参数可以设置本地方栈大小, -Xss 参数 设置栈内存大小
3.运行时常量池溢出
由于常量池分配在方法区内,我们可以通过-XX:PermSize 和 -XX:MaxPermSize限制方
法区的大小,从而间接限制其中常量池的容量
4. 方法区溢出
方法区用于存放Class的相关信息,如类名、访问修饰符、常量池、字段描述、方法描述等。
此类异常主要是产生了大量的class信息,无法及时被jvm 回收导致的,一旦遇到此问题,需要
具体问题,具体分析 :(
5. 本机直接内存溢出
DirectMemory容量可通过-XX:MaxDirectMemorySize指定,如果不指定,则默认与java堆的
最大值(-Xmx指定 )一样。
相关推荐
《深入理解JVM & G1 GC》一书深入剖析了Java虚拟机(JVM)的工作原理,特别是针对垃圾收集器(GC)中的G1(Garbage-First)算法进行了详尽的探讨。JVM是Java程序运行的基础,它负责解析、编译、执行Java代码,并管理...
每个使用Java的开发者都知道Java字节码是在JRE中运行,而JVM则是JRE中的核心组成部分,承担分析和执行Java字节码的工作,而Java程序员通常并不需要深入了解JVM运行情况就可以开发出大型应用和类库。尽管如此,如果你...
标题提到的“深入理解JVM虚拟机”,意味着要对JVM的内部机制进行深入的研究和理解。其核心知识点涵盖了如下几个方面: 1. JVM架构组成:JVM主要由类加载器(Class Loader)、运行时数据区(Runtime Data Area)、...
资源名称:深入理解JVM & G1 GC内容简介:G1 GC提出了不确定性Region,每个空闲Region不是为某个固定年代准备的,它是灵活的,需求驱动的,所以G1 GC代表了先进性。《深入理解JVM & G1 GC》主要为学习Java语言的...
根据提供的文件信息,“圣思园张龙 深入理解jvm”,我们可以推断出这份资料主要关注于Java虚拟机(JVM)的深入理解和实践应用。JVM是Java开发环境中非常核心的一个组成部分,它不仅为Java程序提供了运行时环境,还负责...
深入理解JVM,首先要明白Java技术的组成部分,包括Java编程语言、Java类文件格式、Java虚拟机(JVM)和Java应用程序接口(Java API)。这些组件共同构成了Java平台,使得Java程序能够实现跨平台运行。 Java虚拟机是...
全面理解JVM虚拟机.pdf
### 深入理解JVM #### 一、Java技术与Java虚拟机 Java不仅仅是一种编程语言,更是一项综合性的技术。它主要包括四个关键组成部分: 1. **Java编程语言**:这是一种面向对象的编程语言,提供了丰富的类库支持,...
深入理解JVM,深入理解JVM一本可以帮助开发者深入了解jvm的经典书籍
《深入理解JVM & G1 GC》这篇文章和相关压缩包文件主要聚焦于Java虚拟机(JVM)的内存管理,特别是垃圾收集器(GC)的优化,特别是G1(Garbage-First)垃圾收集器的深度解析。下面将详细阐述JVM、GC的基本概念,...
深入理解JVM垃圾收集算法与垃圾收集器
Java虚拟机(JVM)是Java程序的核心组件,它负责解析和执行Java字节码,使得Java具有“一次编译,到处运行”的特性。...深入理解JVM,可以帮助开发者更好地应对各种运行时问题,提升应用程序的稳定性和效率。
Java虚拟机(JVM)是运行Java程序的关键平台,其内部结构和内存管理机制非常复杂且精细。它将内存分为若干个不同的数据区域,以便管理Java程序的运行时数据。下面将详细介绍JVM中的运行时数据区,以及Java内存模型...
了解jvm的pdf,高清pdf,希望大家下载
2019最新深入理解JVM内存结构及运行原理(JVM调优)高级核心课程视频教程下载。JVM是Java知识体系中的重要部分,对JVM底层的了解是每一位Java程序员深入Java技术领域的重要因素。本课程试图通过简单易懂的方式,系统...
不得不看 JAVA 深入理解JVM 深入理解JAVA的原理 必读
深入理解JVM虚拟机机制是Java开发者必备的技能之一。Java技术的核心组成部分包括Java编程语言、Java类文件格式、Java虚拟机(JVM)和Java应用程序接口(Java API)。Java的平台无关性得益于JVM,它在不同操作系统和...
这本书旨在填补Java技术体系中关于Java虚拟机(JVM)知识的空白,帮助读者深入理解JVM的工作原理及其对程序性能的影响。JVM作为Java程序运行的基础,为开发者屏蔽了底层硬件和操作系统的复杂性,使得Java程序具有跨...