[컴][자바] G1 Garbage Collector 2/2

  1. 쿠…sal: [컴][자바] java 의 G1 collector
  2. 쿠…sal: [컴][java] G1 Garbage Collector 2/2

G1 Garbage Collector 2/2

G1 heap 구조

하나의 memory area 를 여러 size의 region 들로 나눠서 사용하게 된다. heap 이 대략적으로 2000개정도의 region 으로 나눠진다. 가장 작은 사이즈는 1Mb 에서 가장큰 것은 32Mb 정도 된다.

그림처럼, 각 region 들은 Eden, Survivor, Old Generation space 중 하나로 사용된다. 여기서 Enden과 Survivor 는 young generation 이다. 추가로 Humongous region 이라는 4번째 region type 이 있다. (한국말로 하면 ’거대영역’정도일려나.)

옛날 garbage collector 들처럼 region 들이 연속적일 필요는 없다. (예를 들어, CMS 의 경우를 보면, eden, survivor 등 각 영역은 1개의 연속된 공간으로 이뤄졌다. 참고)

frome ref. 1
  • live objct들(사용중인 object들)은 한 region 에서 다른 region 으로 evcuated 된다.(즉, copy 또는 move 된다.)
  • region 들은 다른 application thread 들을 멈추는 것 없이 병렬로 collected 되도록 디자인 됐다.

G1 에서 Young GC

young generation garbabe collection 들, 즉 young GCs

  • 이때 STW(Stop The World) 멈춤이 있다. 즉, 모든 application thread 들은 이 operation 을 위해서 멈추게 된다.
  • young GC 는 여러 thread들을 사용해서 병렬로 수행된다.
  • live object들은 새로운 survivor region 들로 copy 되거나 old generation region 들로 copy 된다.
    • live object들은 1개 이상의 survivor region 들로 evacuated 된다. 몇몇 aging threshold 에 도달한 object들은 old generation region 들로 가게 된다.
  • Eden size 와 survivor size 는 다음 young GC를 위해 계산된다.
  • Accounting information은 size를 계산하는데 도움을 주기 위해 저장된다.
    • ’pause time 목표’같은 값들이 고려되어진다.
  • young generation memory 는 여러 region 들로 구성된다. 이 region 들은 연속된 공간에 있지 않다. 이것은 필요할 때 size를 조정하는 것을 쉽게 해준다.
  • 이 방법은 region 들을 필요할 때 region 의 size를 조정하기 매우 쉽게 해준다. 필요할 때 더 크게, 또는 더 작게 만들게 해준다.

G1 으로 Young GC 가 끝나면:

  • live object들은 survivor region 들이나 old generation region 들로 evacuated 된 상태다.
  • 아래 그림에서 최근에 old generation region 으로 움직인 것은 어두운파란색이고, 최근에 survivor region 으로 간 object들은 녹색이다.

G1 으로 Old Generation Collection

CMS collector 처럼, G1 collector 는 ’낮은 pause 시간을 갖는 old generation object를 위한 collector’로 디자인 됐다.

old generation 에 대한 G1 collection phase들은 다음과 같다.

  1. initial Mark(Stop the World Event)
  2. Root Region Scanning
  3. Concurrent Marking
  4. Remark(Stop the World Event)
  5. Cleanup(Stop the World Event and Concurrent)

상세 내용:

  1. Inintial Marking

    • Stop the World Event : 이것도 ’Stop the World Event’이다.
    • live object에 대한 initial marking 은 young generation garbage collection 때 같이 수행된다. log에 이것들은 GC pause (young)(inital-mark)로 기록된다.
  2. concurrent marking phase

    • 전체 heap 에서 live object들을 찾는다.
    • 이것은 application 이 실해되는 중에 일어난다.
    • 이 phase는 young generation garbage collection 들에 의해 interrupted 될 수 있다.
    • liveness 를 결정하는 accounting information 이 계산된다.
    • liveness informatin 은 application 이 실행되는 중에 계산된다.
    • liveness information 은, evaucation pause 동안에, 어떤 region 들이 환원(reclaim) 되는 것이 제일 좋은지 구별한다.
    • CMS 같은 sweeping phase 가 없다.
  3. Remark Phase

    • heap 에 있는 live object 의 marking 을 완료한다.
    • 완전하게 비어있는 region 들은 환원된다.(reclaimed)
    • Snapshot-at-the-Begging(SATB) 알고리즘을 사용한다. 이것은 CMS 에서 사용되던 것보다 더 빠르다.
    • 모든 region 에 대한 liveness 를 계산한다.
  4. Copying/Cleanup Phase

    • live object들과 완전히 빈 region에 대한 accounting을 수행한다.(Stop the world)
    • Remembered Sets 를 정리한다.(Stop the world)
    • 빈 region들을 초기화하고 그것들을 free list에 반환한다.
    • young generation 과 old generation 은 동시에 환원된다.
    • old generation region 들은 그들의 liveness 에 기반해서 선택된다.
      • G1 은 가장 낮은 liveness 를 가진 region들을 선택한다.
      • 이 region 들은 가장 빠르게 collect 된다.
    • 그리고 나서 이 region들은 young GC 가 수행되는 시간에 같이 실행돼서 collected 된다.
    • 이것은 log에 [GC pause (mixed)] 라고 표시된다.

선택된 region 들은 collected되고, 어두운파랑색 region 과 어두녹색 region 으로 compacted된 상태다.

댓글 없음:

댓글 쓰기