two targets
One:验证java虚拟机规范中描述的各个运行时区域存储的内容;
Two:在工作中遇到OOM时能根据异常的信息快速判断是哪个区域的内存溢出,知道怎样的代码会导致这些区域内存溢出,以及如何处理。
-java堆溢出
java heap用来存放对象实例,不断的创建对象,并保证这些对象可达。在达到最大容量限制就会产生内存溢出。-Xmx, -Xms, -Xmn(Young)。-XX:+HeapDumpOnOutOfMemoryError可以在溢出时dump出当前的内存堆存储快照。
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.lang.OutOfMemoryError:Java heap space
Dumping heap to java_pid3404.hprof...
Heap dump file created [22045981 bytes in 0.662 secs]
内存泄露:无意义对象仍然存活,导致的异常。
内存溢出:对象确实都必要存活。
-JVM Stack&native method Stack OOM
如果线程请求的栈深度大于虚拟机允许的最大深度,StackOverflowError。
如果虚拟机在扩展栈时无法申请到足够的内存,OutOfMemoryError。
public class JavaVMStackSOF{ private int stackLength = 1; private void stackLeak(){ stackLength++; stackLeak(); } public stack void main(String[] args){ JavaVMStackSOF oom = new JavaVMStackSOF(); try{ oom.stackLeak(); }catch(Throwable e){ System.out.println("stack length:" +oom.stackLength); throw e; } } }
stack length:2402
Exception in thread "main" java.lang.StackOverflowError
操作系统分配给每个进程的内存是有限制的,JVM提供了参数控制java堆(Xmx)和方法区(MaxPermSize)的内存大小,剩下的内存就由虚拟机栈(JVM Stack)和本地方法栈(Native Method Stack)瓜分。
public class JavaVMStackOOM { private void dontstop() { while (true){} } public void stackLeakByThread(){ while (true){ Thread thread = new Thread(new Runnable(){ @Override public void run(){ dontstop(); } }); thread.start(); } } public static void main(String[] args) { JavaVMStackOOM oom= new JavaVMStackOOM (); oom.stackLeakByThread(); } }
运行结果:
Exception in thred “main” java.lang.OutOFMemoryError: unable to create new native thread
-Method Area & Runtime Constant Pool
运行时常量池是方法区的一部分
相关推荐
当Java应用程序尝试分配新的对象,但堆内存(Heap Space)不足以容纳这些对象时,就会抛出`java.lang.OutOfMemoryError: Java heap space`。此错误可能由以下几个原因引起: - 创建超大数据结构,如大数组。 - ...
"Java.lang.OutOfMemoryError: Java heap space 解决方法" Java.lang.OutOfMemoryError: Java heap space 是 Java 中的一个常见错误,它发生时,Java 虚拟机 (JVM) 无法分配对象,因为堆空间不足。下面是解决该问题...
- 第2章 Java内存区域与内存溢出异常- 2.4 实战:OutOfMemoryError异常2.4.4 本机直接内存溢出直接内存(Direct Memory
### Java 错误处理:java.lang.OutOfMemoryError: Java heap space 在Java应用程序开发过程中,经常遇到的一个问题就是内存溢出错误,特别是在处理大量数据或长时间运行的应用时。其中,“java.lang....
在Java应用程序运行过程中,"java.lang.OutOfMemoryError: PermGen space"错误是常见的一个问题,尤其是在使用Tomcat这样的Java应用服务器时。这个错误表明应用程序在 PermGen 区域(Permanent Generation)耗尽了...
java.lang.OutOfMemoryError: PermGen space 解决方案
### 解决OutOfMemoryError: PermGen space 在Java应用程序运行过程中,可能会遇到“OutOfMemoryError: PermGen space”的错误提示。这种错误通常发生在永久代(PermGen space)内存不足的情况下,永久代主要用于...
通过阅读《实战Java虚拟机——JVM故障诊断与性能优化》,读者不仅可以学习到JVM的基础知识,还能掌握如何在实际工作中诊断问题和优化性能,从而提升Java应用程序的运行效率和稳定性。这本书是Java开发者深入理解JVM...
当应用程序加载大量类或者使用了大量的静态变量和常量时,PermGen space可能会耗尽,从而引发`java.lang.OutOfMemoryError: PermGen space`错误。对于频繁部署或重载JSP的Web应用,如Tomcat,这个问题尤为常见。 ...
### Myeclipse下java.lang.OutOfMemoryError: Java heap space的解决方案 在使用Myeclipse进行Java开发时,可能会遇到`java.lang.OutOfMemoryError: Java heap space`这个错误提示。这种异常通常发生在应用程序占用...
### Java.lang.OutOfMemoryError: PermGen space 及其解决方法 #### 一、PermGen space 概述 在Java虚拟机(JVM)中,PermGen space(永久代)是用于存储类的信息、常量、静态变量等数据的区域。在Java 8之前,Perm...
在进行Java项目编译的过程中,可能会遇到`java.lang.OutOfMemoryError: Java heap space`这种异常。这类异常通常表明Java虚拟机(JVM)在运行过程中遇到了内存不足的问题,特别是当堆内存无法满足程序的需求时。 ##...
我们立马登录到系统的线上机器去查看对应的日志,并看到类似下面的一句话:Exception in thread "http-nio-8080-exec-1089" java.lang.OutOfMemoryError: Java heap space。这个日志表明 Tomcat 的工作线程在处理...
Java程序在运行过程中可能会遇到各种异常,其中"nested exception is java.lang.OutOfMemoryError: Java heap space"是一个常见的问题,通常发生在程序试图分配超过堆内存限制的空间时。这个错误表明Java虚拟机(JVM...
在Java编程中,我们常常会遇到一个让人头疼的问题,那就是“java.lang.OutOfMemoryError: PermGen space”错误。这个错误提示表明,应用程序在运行过程中,内存的永久代(Permanent Generation)空间不足,导致了...
java虚拟机OutOfMemoryError:Java heap space堆dump文件,可以直接用来分析。
通过阅读《实战Java虚拟机——JVM故障诊断与性能优化》,读者可以系统地学习JVM相关知识,提升故障排查和性能调优的能力。配合提供的源码和在线资源,读者可以在实践中加深理解和应用,使自己的Java开发技能更上一层...
日志报错:此错误通常在JVM的永久代空间不足时出现,表现为“Exception in thread "Thread-XX" java.lang.OutOfMemoryError: PermGen space”。 排查思路:检查WebLogic Server的配置,尤其是JVM参数设置,看是否...