JVM 메모리 파티션 추가 숙지
1706 단어 Java VM 이해
2. JVM 메모리 파티셔닝 가상 머신 스택(스택 크기/스택 깊이), 프로그램 카운터, 메소드, 스택(세대 구분)
3. 메모리 유출 코드 작성 vm options: - Xms10M - Xmx10M - Xmn5M -verbose: gc - XX: + PrintGCDetails - X: SurvivorRatio = 8 - XX: MetaspaceSize = 8m - XX: MaxMetaspaceSize = 8m - X: + HeapDumpOn OutOffMemory Error
public class TestLeak {
private static final int _1MB = 2*1024*1024;
public static void main(String[] args) {
System.out.println("start");
int i =0;
while (true) {
System.out.println(i++);
ObjectA objectA = new ObjectA();
ObjectB objectB = new ObjectB();
objectA.objectB = objectB;
objectB.objectA = objectA;
}
}
static class ObjectA {
ObjectB objectB;
byte[] allocation1 = new byte[2 * _1MB];
}
static class ObjectB {
ObjectA objectA;
byte[] allocation1 = new byte[2 * _1MB];
}
}
4. 코드 작성 테스트 Metaspace와 영구 세대 넘침 검증 영구 세대는 가상 기기 규범 방법 구역에 대한 실현이다. 더미의 논리적인 부분으로서 메모리 관리 코드 jdk 1.6을 단독으로 작성하는 것을 피하기 위해permspace maxpermspace를 설정하여 영구 세대(또는 방법 구역)의 메모리 크기를 제한해야 한다. jdk 1.7에서 문자열의 상수를 영구 세대(또는 방법 구역)로 옮기기 시작하는데 구체적으로는 더미로 옮기고string을 사용한다.인터넷 () 인증 가능한가요?jdk 1.8에서 영구대를 완전히 제거했나요?Metaspace로 교체하면 Metaspace는 로컬 메모리에서 직접 분배되며, Metaspace Size나 Max Metaspace Size를 통해 크기를 제한해야 한다. 문자열의 상수에 대한 테스트는 jdk 1.6에서, Perm space OOM은 jdk 1.7에서, Heap space OOM은 jdk 1.8에서, Heap space OOM을 잘못 보고해야 한다.jdk 1.8에서 Cglib을 사용하여 대량의 동적 클래스를 생성하고 MetaspaceSize 크기를 제한하며 Metaspace OOM을 잘못 보고할 수 있습니다
5. Eclipse MAT 플러그인을 사용하여 각 스레드와 스레드의 대상 개수, 메모리 사용 상황을 보고 메모리를 많이 사용하는 큰 대상 랭킹을 보며 Memory Leak 분석을 보조한다.