GC 의 글

7147 단어 GC
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 를 가지 고 각각 자신의 특징 과 응용 장면 이 있다.
  • serial collector (직렬 GC) 는 언제나 하나의 스 레 드 를 사용 하여 GC 작업 을 수행 합 니 다. 이런 GC 온라인 스 레 드 간 통신 은 큰 비용 이 들 지 않 는 응용 이 상대 적 으로 좋 은 운행 효율 을 가 질 수 있 습 니 다.단일 프로세서 에 가장 적합 한 시스템;다 중 프로세서 시스템 은 이런 GC 에 있어 서 수집 의 효율 을 향상 시 킬 수 없다.JVM 의 기본 적 인 상황 에서 이 GC 를 사용 합 니 다. 이러한 GC 는 이미지 의 별명 인 'stop - the - world' 가 있 습 니 다. JVM 이 이 GC 로 쓰레기 를 수집 할 때 다른 일 을 하려 고 하지 마 세 요.이 인자 -XX:+UseSerialGC 。 의 기본 serial gc 를 사용 하면 절대 다수의 app 에 대처 할 수 있 습 니 다.다음 과 같은 경 우 를 제외 하고 이것 은 큰 메모리 다 중 프로세서 에서 실행 되 는 다 중 스 레 드 의 큰 응용 입 니 다.
  • parallel collector (병렬 GC 또는 throughput collector) 는 minor collections (2 차 GC) 를 병행 적 으로 실행 하여 GC 의 비용 을 크게 줄 일 수 있 습 니 다.다 중 프로세서, 다 중 스 레 드 하드웨어 에서 실행 되 는 중대 형 응용 을 위 한 것 이 탄생 했다.특정한 하드웨어 와 OS 환경 조건 에서 이것 은 기본 옵션 이 고 명시 적 성명 사용 -XX:+UseParallelGC 매개 변수 입 니 다.JDK 1.3.1 에서 시작 되 었 습 니 다.parallel compaction 은 J2SE 5.0 update 6 에 도 입 된 새로운 기능 으로 자바 SE 6 에서 강화 됐다.Major collections (주요 GC) 를 병렬 로 실행 할 수 있 습 니 다.parallel compaction 을 열지 않 으 면 major collections 는 단일 스 레 드 로 실 행 됩 니 다.매개 변수 -XX:+UseParallelOldGC 를 통 해 이 기능 을 명시 적 으로 사용 합 니 다.
  • concurrent collector (동기 GC) 는 대부분의 작업 (GC 와 동시에 응용 도 실행) 을 동시에 실행 하여 GC 로 인 한 중단 시간 을 최대한 짧게 보장 합 니 다.주로 실시 간 요구 가 전체적인 스루풋 요구 보다 중요 한 중대 형 응용 에 응용 된다. 그럼 에 도 불구 하고 중단 시간 을 낮 추 는 기술 은 응용 프로그램의 성능 을 약간 떨 어 뜨 릴 수 있다.매개 변수 사용 가능 -XX:+UseConcMarkSweepGC 。
  • parallel collector 의 주의 점:
    parallel collector 는 JDK 5 부터 서버 쪽 JVM 의 기본 선택 입 니 다. VM 인자 - server 를 추가 해 야 합 니 다.
    parallel collector 는 다음 과 같은 세부 적 인 조정 전략 도 사용 합 니 다.
  • 최대 GC 중단 시간 제한
  • 물동량 제한
  • 발자국 (신 축 량) 설정
  • vm 매개 변수 -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 의 생명 주 기 는 일반적으로 다음 과 같은 몇 단 계 를 포함한다.
  • 응용 을 중단 한 모든 스 레 드 는 도착 할 수 있 는 모든 대상 의 집합 을 표시 한 다음 에 응용 되 는 모든 스 레 드
  • 를 복원 합 니 다.
  • 하나 또는 몇 개의 프로세서 자원 을 사용 하여 도착 할 수 있 는 대상 을 동기 화하 고 응용 스 레 드 를 동시에 실행 합 니 다
  • 프로세서 자원 을 사용 하여 이전 단계 이후 수 정 될 수 있 는 대상 을 동기 화 합 니 다
  • 응용 을 중단 한 모든 스 레 드 는 이전 단계 이후 수 정 될 수 있 는 대상 을 다시 찾 은 다음 에 응용 할 수 있 는 모든 스 레 드
  • 를 복원 합 니 다.
  • 프로세서 자원 을 사용 하여 인용 되 지 않 은 대상 을 동기 화 합 니 다
  • 프로세서 자원 을 사용 하여 메모리 더 미 를 동기 화하 고 다음 GC 수명 주기 에 데 이 터 를 준비 합 니 다
  • concurrent collection 은 전체 수집 과정 에서 적어도 1 ~ 2 개의 프로 세 서 를 차지 할 뿐만 아니 라, 차지 하 는 프로세서 자원 을 자동 으로 포기 하지 않 습 니 다.
    이 기능 은 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

    좋은 웹페이지 즐겨찾기