public class heapoom { static class user {} public static void main(string[] args) { list<user> list = new arraylist<user>(); while (true) { list.add(new user()); } }}/*exception in thread main java.lang.outofmemoryerror:gc overhead limit exceededat com.fdd.test.heapoom.main(heapoom.java:11)*/
2、虚拟机栈和本地方法栈溢出
如果线程要求的堆栈深度大于虚拟机锁允许的深度,则抛出stackoverfloweror异常。
如果虚拟机在扩展堆栈时无法申请足够的存储空间,则会出现异常。
public class stackoutofmemoryerror { public static void main(string[] args) { test(); } private static void go() { system.out.println(stackoverflowerror异常); test(); }}/*exception in thread main java.lang.stackoverflowerror at sun.nio.cs.ext.doublebyte$encoder.encodeloop(doublebyte.java:617) at java.nio.charset.charsetencoder.encode(charsetencoder.java:579) at sun.nio.cs.streamencoder.implwrite(streamencoder.java:271) at sun.nio.cs.streamencoder.write(streamencoder.java:125) at java.io.outputstreamwriter.write(outputstreamwriter.java:207) at java.io.bufferedwriter.flushbuffer(bufferedwriter.java:129) at java.io.printstream.write(printstream.java:526) at java.io.printstream.print(printstream.java:597) at java.io.printstream.println(printstream.java:736) at com.fdd.test.stackoutofmemoryerror.go(stackoutofmemoryerror.java:11)at com.fdd.test.stackoutofmemoryerror.go(stackoutofmemoryerror.java:13)*/
3、方法区和运行时常量池溢出
4、本机直接内存溢出
directmemory容量可通过-xx:maxdirectmemorysize指定,如不指定,默认与java堆的值(-xmx指定)相同。
以上就是有哪些情况会导致java内存溢出?的详细内容。
