2.4 실전:OutOfmory 오류 이상(일부 상황 코드 세그먼트)
/**
* VM Args:-Xms20m-Xmx20m-XX:+HeapDumpOnOutOfMemoryError
*/
public class HeapOOM {
static class OOMObject {
}
public static void main(String[] args) {
List list = new ArrayList<>();
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.663 secs]
메모리 유출 인지 메모리 유출 인지 구분 하 세 요.
4.567917.메모리 누 출:프로그램 이 메모 리 를 신청 한 후에 이미 신청 한 메모리 공간 을 방출 할 수 없다 는 것 을 말한다.한 번 의 메모리 누 출 위 해 는 무시 할 수 있 지만 메모리 누 출 축적 결 과 는 매우 심각 하 다.아무리 메모리 가 많아 도 조만간 빛 을 차지 할 것 이다
2.4.2 가상 컴퓨터 스 택 과 로 컬 방법 스 택 넘 침
가상 컴퓨터 스 택 과 로 컬 방법 스 택 OOM 테스트
/**
* VM Args:-Xss128k *@author zzm
*/
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;
}
}
}
4.567917.스 레 드 를 만 들 면 메모리 가 넘 치 는 이상 이 발생 합 니 다.끊임없이 스 레 드 를 만 드 는 방식 으로 메모리 가 넘 치 는 이상 이 발생 할 수 있 습 니 다
/**
* VM Args:-Xss2M( ) *@author zzm
*/
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) throws Throwable {
JavaVMStackOOM oom = new JavaVMStackOOM();
oom.stackLeakByThread();
}
}
2.4.3 방법 구역 과 운행 시 상 당량 탱크 넘 침
/**
* JDK 1.6 , , -XX:PermSize -XX:MaxPermSize ,
* VM Args:-XX:PermSize=10M-XX:MaxPermSize=10M
*/
public class RuntimeConstantPoolOOM {
public static void main(String[] args) {
// List , Full GC
List list = new ArrayList<>();
//10MB PermSize integer OOM
int i = 0;
while (true) {
list.add(String.valueOf(i++).intern());
}
}
}
2.4.4 이 컴퓨터 의 직접 메모리 가 넘 칩 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.