1. 힙 오버플로, 힙은 인스턴스 개체를 저장하지만 조만간 힙 영역이 가득 차게 됩니다. 힙 영역 메모리가 설정된 경우 생성 시 예외가 발생합니다.
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. 가상 머신 스택 및 로컬 메서드 스택 오버플로
스레드에 필요한 스택 깊이가 가상 머신 잠금에서 허용하는 깊이보다 크면 StackOverflowError 예외가 발생합니다.
스택 확장 시 가상 머신이 충분한 저장 공간을 신청할 수 없는 경우 예외가 발생합니다.
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 메모리 오버플로의 네 가지 상황은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!