Post

메모리 분석 heap 메모리 관리

메모리 분석 heap 메모리 관리

당장 알고 있는데로?

  • 가비지 컬렉션이 있고, 여러 종류가 있고, 기본 값이 있다는 것을 안다.

    G1 GC란?

G1 GC는 CMS GC를 대체하기 위해 새롭게 등장하였으며, 대용량의 메모리가 있는 멀티 프로세서 시스템을 위해 제작되었다. 빠른 처리 속도를 지원하면서 STW를 최소화한다. CMS GC보다 효율적으로 동시에 Application과 GC를 진행할 수 있고, 메모리 Compaction 과정까지 지원하고 있다. Java 9 버전부터 기본 GC 방식으로 채택되었다.

왜 이름이 G1일까?

G1은 Garbage First의 약어로 Garbage만 있는 Region을 먼저 회수한다고 해서 붙여진 이름이다. 빈 공간 확보를 더 빨리 한다는 것은 조기 승격이나 급격히 할당률이 늘어나는 것을 방지하여 Old Generation을 비교적 한가하게 만들 수 있다. G1 GC는 기존 힙 구조와 완전히 다른 양상을 띈다. 전통적인 힙 구조는 Young, Old 영역을 명확하게 구분하였지만, G1 GC는 개념적으로 그들이 존재하나 일정 크기의 논리적 단위인 region으로 구분하고 있다.

장점과 단점

  • 장점
    • 별도의 STW 없이도 여유 메모리 공간을 압축하는 기능을 제공한다. 또한, 전체 Old Generation 혹은 Young Generation 통째로 Compaction을 할 필요 없고, 해당 Generation의 일부분 Region에 대해서만 Compaction을 하면 된다.
    • Heap 크기가 클수록 잘 동작한다.
    • CMS gc에 비해 개선된 알고리즘을 사용하고, 처리 속도가 더 빠르다.
    • Garbage로 가득찬 영역을 빠르게 회수하여 빈 공간을 확보하므로 GC 빈도가 줄어든다.
  • 단점
    • 공간 부족 상태를 조심해야 한다. (Minor GC, Major GC 수행하고 나서도 여유 공간이 부족한 경우)
      • 이때는 Full GC가 발생하는데, 이 GC는 Single Thread로 동작한다.
      • Full GC는 heap 전반적으로 GC가 발생하는 것을 뜻한다.
    • 작은 Heap 공간을 가지는 Application에서는 제 성능을 발휘하지 못하고 Full GC가 발생한다.
    • Humonogous 영역은 제대로 최적화되지 않으므로 해당 영역이 많으면 성능이 떨어진다.

요약

  • TODO
  • 아래 글 한번 훑어보긴 했지만, Action Plan 참고해서 내용 정리 해둘것.
  • 레벨 업 하자.

Action Plan

  • 기본적으로 사용되는 가비지 콜렉터 종류를 알고, 현재 회사에서 쓰는것의 장단점을 알것.
  • 지난번에 메모리 이슈로 내렸다 올렸다는 api들에 대해서 메모리 누수 원인을 분석해 볼것.

참고 자료

  • https://www.nextree.io/memory-leak/
  • https://f-lab.kr/insight/java-memory-management
  • https://devocean.sk.com/blog/techBoardDetail.do?ID=165630&boardType=techBlog
  • https://steady-coding.tistory.com/590
This post is licensed under CC BY 4.0 by the author.