Home >Java >javaTutorial >What situations can cause Java memory overflow?

What situations can cause Java memory overflow?

WBOY
WBOYforward
2023-05-09 16:19:231440browse

1. Heap overflow, The heap stores instance objects, but sooner or later the heap area will be full. If the heap area memory is set, an exception will be thrown when created.

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 exceeded
at com.fdd.test.HeapOOM.main(HeapOOM.java:11)*/

2. Virtual machine stack and local method stack overflow

If the stack depth required by the thread is greater than the depth allowed by the virtual machine lock, a StackOverflowError exception is thrown.

If the virtual machine cannot apply for enough storage space when expanding the stack, an exception will occur.

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. Method area and runtime constant pool overflow

4. Native direct memory overflow

DirectMemory capacity It can be specified by -XX:MaxDirectMemorySize. If not specified, the default is the same as the value of the Java heap (specified by -Xmx).

The above is the detailed content of What situations can cause Java memory overflow?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete