java gc 맛보기

greenTea·2023년 8월 5일
0

java gc

자바에서는 Garbage Collector라는 것이 존재합니다.
gc를 통해 자동으로 불필요한 메모리를 해제해줌으로써 편하게 코드를 작성할 수 있습니다.

만약 gc의 내용을 자세하게 알고 싶다면 아래와 같은 과정을 거치면 됩니다.

1. 먼저 자바를 환경변수에 등록해줍니다.

이 과정은 자바가 설치되어 있다면 굳이 할 필요는 없습니다.
(자신이 받은 java의 bin의 위치를 path 환경변수에 등록해주시면 됩니다.)

2. 자바 프로그램을 실행합니다.

저는 아래와 같이 스프링 프로젝트를 만든 후 실행시켰습니다.

10초마다 해당 객체를 생성해서 리스트에 넣는 로직입니다.

3. jstat 명령어를 사용해줍니다.

jstat -gcutil -t 8080 1000 0

jstatJavaJVM 통계 모니터링 도구입니다. 이 도구는 Java 프로세스의 성능 데이터를 수집하는데 사용됩니다.

명령어 jstat -gcutil -t 8080 1000 0를 이해하기 위해서는, 각각의 컴포넌트가 무엇을 의미하는지 알아야 합니다.

  • jstat: Java Virtual Machine(JVM)의 통계 정보를 보여주는 명령어
  • gcutil: 가비지 컬렉션 통계를 보여주는 옵션. 각 가비지 컬렉션 통계의 사용량을 백분율로 표시합니다.
  • t: 출력에 타임스탬프를 포함하는 옵션.
  • 8844: 이 숫자는 모니터링 대상이 되는 Java 프로세스의 PID(process ID)입니다. 이 숫자는 예시이며, 실제 사용하려면 원하는 Java 프로세스의 PID로 변경해야 합니다.
  • 1000: 데이터를 수집하는 간격을 밀리초 단위로 설정. 여기서는 1초마다 데이터를 수집하도록 설정되어 있습니다.
  • 0: 몇 번 수집할 것인지를 지정. 0은 무한히 수집하라는 의미입니다.

위의 명령어를 사용하면 아래와 같은 결과가 나오게 됩니다.
PID의 경우 작업 관리자의 세부사항을 통해 확인 하실 수 있습니다.

현재 Eden을 보시면 값이 계속 증가하는 것을 보실 수 있습니다.
현재 제 프로젝트는 객체를 생성한 후에 리스트에 넣어주고 있는 상황이므로 위와 같은 결과가 나온 것입니다. 그 외에는 변화가 없는데 객체 생성이 너무 적다 보니 major gc, minor gc가 아직 동작을 하지 않은 것으로 보입니다.

jstat을 통해 파악할 수도 있지만 다른 모니터링 툴을 통해서도 이를 확인할 수 있습니다.

더 나아가기

java 버전이 업되면서 다양한 gc 알고리즘이 추가되었습니다. 아래는 그 예이며 사용방법은 괄호 안 명령어를 사용하시면 됩니다.(gc튜닝전에 먼저 코드 부분에서 리팩토링 과정을 거치고 나서 최후의 수단으로 사용하시는 것을 추천드립니다.)

  • Serial GC (-XX:+UseSerialGC): 이 GC는 클라이언트 스타일의 애플리케이션에 적합하며, 특히 힙 크기가 작고 코어 수가 적은 시스템에서 잘 작동합니다. 그러나 major gc의 경우 시스템이 멈추는 상황이 발생할 수 있습니다.

  • Parallel GC (-XX:+UseParallelGC and -XX:+UseParallelOldGC): Parallel GC는 throughput 중심의 애플리케이션에 적합합니다. 이 GC는 멀티 코어 하드웨어에서 잘 작동하며, GC 중에는 애플리케이션 스레드가 일시 중단됩니다. 전자의 경우 young 부분에서만 멀티스레드로 동작한다면 후자는 old부분까지 포함해서 작동합니다.

  • Concurrent Mark Sweep (CMS) GC (-XX:+UseConcMarkSweepGC): CMS는 짧은 GC 중지 시간이 필요한 애플리케이션에 적합합니다. CMS는 애플리케이션의 실행을 최소한으로 방해하면서 메모리를 회수합니다.

  • G1 GC (-XX:+UseG1GC): G1 GC는 큰 힙 크기를 가진 시스템에 적합하며, GC 중지 시간을 짧게 유지하려고 합니다.

🥳티스토리 Inpa 이 분 블로그에 정말 좋은 자료가 많으니 한번 가보시면 좋을 것 같습니다.

[참고 자료]

Garbage Collection 모니터링 방법
티스토리 Inpa- 가비지-컬렉션GC-동작-원리-알고리즘

profile
greenTea입니다.

0개의 댓글