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
运行时常量池是方法区的一部分
相关推荐
Caused by: java.lang.OutOfMemoryError: PermGen space解决方案, avax.servlet.ServletException: java.lang.OutOfMemoryError: PermGen space at org.apache.jasper.servlet.JspServlet.service(JspServlet.java...
- 第2章 Java内存区域与内存溢出异常- 2.4 实战:OutOfMemoryError异常2.4.4 本机直接内存溢出直接内存(Direct Memory
java.lang.OutOfMemoryError: Java heap space 解决方法
搜集整理关于java错误处理:java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError: Java heap space 资料整理
java.lang.OutOfMemoryError: PermGen space 解决方案
1. Java heap space 2. GC overhead limit exceeded 3. Permgen space 5. Unable to c
解决OutOfMemoryError: PermGen space,过程是痛苦的,结果是舒畅的
NULL 博文链接:https://geyubin.iteye.com/blog/779330
java.lang.OutOfMemoryError: PermGen space
报错 java.lang.OutOfMemoryError: PermGen space 报错 java.lang.OutOfMemoryError: Java heap 启动报错java.lang.ClassNotFoundException: 1catalina.org.apache.juli.FileHandler JAVA_OPTS="-server -Xms800m ...
java.lang.OutOfMemoryError: PermGen space及其解决方法,解决项目太大tomcat内存溢出
Tomcat给我的java.lang.OutOfMemoryError: PermGenTomcat给我的java.lang.OutOfMemoryError: PermGenTomcat给我的java.lang.OutOfMemoryError: PermGenTomcat给我的java.lang.OutOfMemoryError: PermGenTomcat给我的...
java虚拟机OutOfMemoryError:Java heap space堆dump文件,可以直接用来分析。
Myeclipse下java.lang.OutOfMemoryError Java heap space的解决
tomcat内存溢出解决办法,错误信息:java.lang.OutOfMemoryError:PermGen space 参考该文档可快速解决内存溢出的问题,服务器:tomcat
Tomcat内存溢出的解决方法(java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError),内附解决方案!
java.lang.OutOfMemoryError: Java heap space 解决方法
java.lang.OutOfMemoryError处理错误
java解决nested exception is java.lang.OutOfMemoryError Java heap space 解决OOM