GC 의 글
7147 단어 GC
자바 의 메모리 모델 각 세대 의 기본 배열 은 다음 그림 과 같 습 니 다 (JDK 1.4 적용). * JDK 6 까지):
사진 은 이것 을 보 세 요: http://dl.iteye.com/upload/attachment/148685/089c5f6b-6e67-3782-99d4-cef9ec353694.gif
자바 의 메모리 모델 은
영 (젊 은 세대)
Tenured (종신 대)
Perm (영구 대)
메모리 모델 에 대한 더 많은 글 은 여 기 를 보십시오.
도해 JVM 메모리 에서 신청 대상 및 쓰레기 회수 절차 : http://longdick.iteye.com/blog/468368
도해 JVM 메모리 모델 http://longdick.iteye.com/blog/473866
메모리 더미 에 있 는 GC 는 마 이 너 GC (부차적인 GC) 와 마 이 너 GC (주요 GC) 로 나 눌 수 있 으 며, 부차적인 GC 는 젊 은 세대 가 수집 하 는 GC 로 에덴 구역 이 가득 찼 을 때 dead 의 대상 을 수집 하고 생존 대상 을 옮 기 는 역할 을 한다.주요 GC 는 평생 대 만 시 수집 하 는 GC 로, 주요 GC 는 부차적인 GC 보다 시간 이 더 걸린다.jvm 인자 - verbose: gc 를 사용 하면 매번 GC 의 상세 한 정 보 를 출력 할 수 있 습 니 다.
프로그램 이 실 행 된 후에 다음 과 같은 출력 을 볼 수 있 습 니 다.
[GC 325407K->83000K(776768K), 0.2300771 secs] [GC 325816K->83372K(776768K), 0.2454258 secs] [Full GC 267628K->83769K(776768K), 1.8479984 secs]
마 이 너 GC (부차적인 GC) 와 Major GC (주요 GC) 를 두 번 볼 수 있다.
325407K->83000K 화살표 전후의 숫자 는 수집 전과 수집 후의 메모리 사용량 을 나타 낸다.(776768 K) 괄호 안에 있 는 숫자 는 총 분 배 된 메모리 공간 을 대표 합 니 다. 이 값 은 서 바 이 어 공간 을 포함 하지 않 고 permanent generation (영구 세대) 도 포함 되 지 않 습 니 다.
0.2300771 secs GC 。
실행 중 VM 인자 추가
-XX:+PrintGCDetails 。 Eden Heap GC :
[GC [DefNew: 64575K->959K(64576K), 0.0457646 secs] 196016K->133633K(261184K), 0.0459067 secs]
실행 중 VM 인자 추가
-XX:+PrintGCTimeStamps GC 。
다음 출력 은 프로그램 이 111.042 초 까지 실 행 될 때 발생 하 는 GC 를 보 여 줍 니 다. Eden 지역 에서 발생 하 는 부차적인 GC 와 Tenured 지역 에서 발생 하 는 주요 GC 를 포함 합 니 다.111.042: [GC 111.042: [DefNew: 8128K->8128K(8128K), 0.0000505 secs]111.042: [Tenured: 18154K->2311K(24576K), 0.1290354 secs] 26282K->2311K(32704K), 0.1293306 secs]
GC 성능 의 주요 평가 지 표 는 두 가지 가 있 는데 그것 이 바로 Throughput 와 Pauses 이다.스루풋 (Throughput) 은 GC 를 하지 않 는 시간 과 총 시간의 백분율 로 분 자 는 메모리 공간 을 분배 하 는 시간 을 포함한다.인 터 럽 트 (Pauses) 는 측정 시간 대 GC 로 인 한 애플 리 케 이 션 일시 정지 횟수 다.사용자 에 게 GC 에 대한 수 요 는 종종 다르다.일반적인 웹 애플 리 케 이 션 은 스루풋 에 대한 요구 가 높 지 않 으 며, GC 로 인 한 가끔 중단 도 용인 할 수 있다.그러나 상호작용 이 강 한 실시 간 응용 시스템 에 있어 일상적인 중단 은 나 쁜 사용자 체험 을 가 져 올 것 이다.즉각 성 (Promptness) 과 발자국 (footprint) 도 일부 사용자 들 이 고려 하 는 문제 다.즉시 성 은 대상 이 메모리 에서 방출 되 는 시간 간격 으로 죽 는 것 이다. 이 지 수 는 RMI 를 사용 하 는 분포 식 응용 과 같은 분포 식 응용 을 고려 해 야 할 요소 이다.발자국 은 일종 의 과정의 집합 으로 신축성 을 대표 한다.
HOTSPOT JVM 은 모두 3 가지 서로 다른 GC 를 가지 고 각각 자신의 특징 과 응용 장면 이 있다.
-XX:+UseSerialGC 。
의 기본 serial gc 를 사용 하면 절대 다수의 app 에 대처 할 수 있 습 니 다.다음 과 같은 경 우 를 제외 하고 이것 은 큰 메모리 다 중 프로세서 에서 실행 되 는 다 중 스 레 드 의 큰 응용 입 니 다.-XX:+UseParallelGC
매개 변수 입 니 다.JDK 1.3.1 에서 시작 되 었 습 니 다.parallel compaction 은 J2SE 5.0 update 6 에 도 입 된 새로운 기능 으로 자바 SE 6 에서 강화 됐다.Major collections (주요 GC) 를 병렬 로 실행 할 수 있 습 니 다.parallel compaction 을 열지 않 으 면 major collections 는 단일 스 레 드 로 실 행 됩 니 다.매개 변수 -XX:+UseParallelOldGC
를 통 해 이 기능 을 명시 적 으로 사용 합 니 다.-XX:+UseConcMarkSweepGC 。
parallel collector 는 JDK 5 부터 서버 쪽 JVM 의 기본 선택 입 니 다. VM 인자 - server 를 추가 해 야 합 니 다.
parallel collector 는 다음 과 같은 세부 적 인 조정 전략 도 사용 합 니 다.
-XX:MaxGCPauseMillis=<N>
로 최대 GC 중단 시간 을 제한 할 수 있 으 며 단 위 는 ms 로 GC 에서 발생 하 는 중단 시간 이 지 정 된 시간 을 초과 해 서 는 안 된다 고 규정 한다.기본적으로 이 제한 은 없다.이 매개 변 수 를 사용 하면 heap 공간 과 다른 관련 매개 변 수 는 해당 하 는 조정 을 하여 최대 GC 중단 시간의 요 구 를 만족 시 킬 것 입 니 다.물동량 한정 사용
-XX:GCTimeRatio=<N>
으로 GC 시간의 비율 을 설정 합 니 다. N 의 값 = GC 에 쓰 이 는 시간 / GC 의 시간 이 없 기 때문에 GC 의 시간 이 전체 시간 을 차지 하 는 백분율 공식 = 1 / (1 + <N>)
.예 를 들 면 -XX:GCTimeRatio=19 1/20 GC 。 =99。
발자국 (신 축 량) 은 사실상 힙 더미 메모리 의 조정 이다.최대 Heap 용량 사용 인자 -Xmx<N>
설명.상기 매개 변수 중의 어떤 변경 도 다른 두 개의 변 화 를 일 으 킬 수 있다.세 사람의 우선 순 위 는 위의 순서 와 같다.
GC 에 흑백 을 너무 많이 쓰 면 parallel collector 는 OOM 을 던 집 니 다. 이 임계값 은 98% 입 니 다.
-XX:-UseGCOverheadLimit
을 사용 하여 이 기능 을 닫 을 수도 있 습 니 다.concurrent collector 의 주의 점:
단일 프로세서 에 적용 되 지 않 는 시스템 은 사실상 단일 프로세서 시스템 에서 concurrent collector 를 실행 하 는 효율 이 오히려 떨어진다.단일 프로세서 시스템 에서 만 실행 할 수 있다 면 증분 모드 (incremental mode) 를 켜 는 것 을 기억 하 세 요.
앞의 몇 가지 GC 는 모두 Tenured 구역 이 가득 찬 후에 주요 GC 작업 을 촉발 합 니 다.concurrent collector 는 Tenured 구역 이 넘 치기 전에 주요 GC 를 진행 합 니 다.concurrent collector 가 Tenured 구역 이 만 료 되 기 전에 수집 하지 않 았 거나 수집 을 시작 하지 않 았 다 면 장시간 중단 이 발생 할 수 있 습 니 다.파라미터 - XX: CMSInitiating Occupancy Fraction = < N > 은 주요 GC 를 촉발 하 는 임계값 을 지정 할 수 있 으 며, N (0 - 100) 은 Tenured 구역 의 포화 정도 백분율 을 대표 합 니 다.일단 Tenured 구역 의 포화 정도 가 이 임계값 에 이 르 면 주요 GC 가 발생 한다.
concurrent collection 의 생명 주 기 는 일반적으로 다음 과 같은 몇 단 계 를 포함한다.
이 기능 은 1 ~ 2 개의 프로세서 만 있 는 시스템 을 매우 괴 롭 게 할 것 이다.이 문 제 를 처리 하기 위해 서 는 증분 모드 (incremental mode) 를 빌려 야 합 니 다.
증분 모델 의 핵심 사상 은 전체 GC 수명 주 기 를 일정 기간 의 시간 블록 으로 분해 해 단계적으로 진행 함으로써 중단 되 는 시간 을 줄 이 는 것 이지 만 물동량 감소 에 따 른 것 이 불가피 하 다.
인자 - XX: + CMSIncrementalMode 를 사용 하여 증분 모드 를 엽 니 다.
참고 자료:
http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html
http://java.sun.com/j2se/1.5.0/docs/guide/vm/gc-ergonomics.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java에서 쓰레기 수거기 GC가 처리량에 미치는 영향 테스트메모리 관리 용어표를 보다가 우연히 "Pig in the Python(주: 중국어의 탐욕이 뱀이 코끼리를 삼키지 못하는 것 같다)"이라는 정의를 발견하고 이 글을 쓰게 되었다.표면적으로 보면 이 용어는 GC가 끊임없...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.