OutOf Memory 의 세 가지 상황.
2514 단어 OutOfMemoryPermGenspaceJavaheap
kakaluyi 에서 따 온 부분 수정 이 있 습 니 다.
자바 의 OutOf Memory Exception 과 나타 날 수 있 는 방법:
A Exception in thread "main" java.lang.OutOfMemoryError: PermGen space
public static void main(String[] args) {
// List , Full GC
List list = new ArrayList();
// 10M PermSize integer OOM
int i = 0;
while (true) {
list.add(String.valueOf(i++).intern());
}
}
영구 영역 넘 침
이 부분 은 Class 와 Meta 의 정 보 를 저장 하 는 데 사 용 됩 니 다.Class 는 Load 될 때 PermGen space 영역(상수 탱크:정적 변수 포함)에 들 어 갑 니 다.인 스 턴 스 를 저장 하 는 Heap 영역 과 달리 GC(Garbage Collection)는 주 프로그램 실행 기간 에 PermGen space 를 청소 하지 않 기 때문에 앱 이 CLASS 를 많이 로드 하면 PermGen space 오류 가 발생 할 수 있 습 니 다.
B java.lang.OutOfMemoryError: Java heap space
public static void main(String[] args) {
// List , Full GC
List list = new ArrayList();
// 10M PermSize integer OOM
int i = 0;
while (true) {
list.add(new String(i++));
}
}
쌓다
이 부분 은 클래스 의 인 스 턴 스 를 저장 하 는 데 사 용 됩 니 다.캐 시 된 인 스 턴 스(Cache)대상,큰 map,list 참조 큰 대상 등 이 저 장 됩 니 다.
C Exception in thread "main" java.lang.StackOverflowError
public class JavaVMStackSOF {
private int stackLength = 1;
public void stackLeak() {
stackLength++;
stackLeak();
}
public static void main(String[] args) throws Throwable {
JavaVMStackSOF oom = new JavaVMStackSOF();
try {
oom.stackLeak();
} catch (Throwable e) {
System.out.println("stack length:" + oom.stackLength);
throw e;
}
}
}
창고 가 넘치다
이 부분 은 부분 변수,방법 스 택 프레임 정 보 를 저장 하 는 데 사 용 됩 니 다.스 택 프레임 이 너무 많 습 니 다.즉,함수 호출 등급 이 너무 많 으 면 이 이상 이 발생 하여 죽은 재 귀 상황 이 있 는 지 확인 합 니 다.
오늘 메모리 가 넘 치 는 문제 에 부 딪 혔 습 니 다.해결 과정 은 다음 과 같 습 니 다.
Dumping heap to java_pid5304.hprof ...
Heap dump file created [85357895 bytes in 2.095 secs]
4.567917.코드 에서 Map 에 사 용 된 세그먼트 를 조회 하고 분석 하 며 문 제 를 해결한다
문제 over.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
OutOfMemory Error위의 코드는 데이터 목록 때문에 메모리 유출이 발생할 수 있습니다.size () 의 값은 끊임없이 증가합니다. 순환 안에 dataList가 있기 때문입니다.add, 그래서 무한 순환입니다. 다음과 같이 수정합니다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.