티스토리 뷰

JAVA

Garbage Collection 이란?

소농배 2020. 5. 6. 20:31

 

JVM 성능과 관련된 JVM Component 는 아래 세가지 이다.
 - Heap
 - JIT Compiler
 - Garbage Collector

 

대부분의 성능 튜닝은 Heap 의 사이즈를 조절하는 것과 가장 적저한 Garbage Collector 를 선택 하는것이다.
JIT Compiler 또한 성능에 큰 영향이 있지만 새로운 버전의 JVM 에서만 드물게 튜닝이 필요하다.

자바 튜닝에는 2가지 주요 목표가 있다. 대응성 & 처리량

 

대응성

 대응성이란 응용프로그램 또는 시스템이 얼마나 빨리 요청받은 데이터를 응답하느냐에 대한 것이다.
긴 "Pause Time" 을 갖는 응용프로그램은 높은 대응성을 가지고 있다고 할 수 없다.
초점은 빠른 시간내에 응용 프로그램이 반응하는것이다.

 

처리량

 처리량은 응용프로그램이 정해진 시간에 처리할 수 있는 일을 최대화 하는 것이다. 처리량은 아래와 같은 예제로 측정할 수 있다.
 - 주어진 시간동안 완료할 수 있는 트랜잭션 수
 - 1시간 동안 완료할 수 있는 배치 Job 의 수
 - 1시간 동안 데이터베이스가 처리할 수 이는 쿼리 수

 

 긴 "Pause Time" 은 처리량 관점에서는 용납할 수 있다. 빠른 대응 보다는 주어진 시간에 얼마나 많은 처리를 할 수 있는지에 중점을 둔다.

 

Automatic Garbage Collection

 Automatic Garbage Collection 이란 Heap Memory 에 어떤 객체들이 사용중인지 사용이지 않은지 구별한 후에 사용하지 않는 객체를 제거하는 과정이다. 사용중인 객체란, 프로그램이 객체를 여전히 참조하고 있는 것이다. 사용되지 않는 객체란, 프로그램이 어느곳에서도 더 이상 참조하지 않는 것이다.

 C 언어와 같은 언어는 메모리 할당과 해제는 수동으로 처리 해야만 한다. 하지만 자바의 메모리 헤제는 Garbage Collector 에 의해서 다루어 진다.

 

Step 1: Marking

 GC 의 첫번째 단계는 Marking 이다. Garbage Collector 가 메모리의 어떤 부분이 사용중이고 사용중이지 않은지 구분하는 단계이다.

참조되고 있는 객체는 파란색. 참조되고 있지 않은 객체는 주황색이다. Marking 단계에서 모든 객체는 이 결정을 위해서 스캔된다. 만약에 시스템 내의 모든 객체를 스캔해야 한다면 시간 소모가 클것이다.

 

Step 2:Normal Deletion

Normal deletion 단계는 참조되고 있지 않은 객체를 제거하고 포인터를 빈 공간으로 둔다.

Memory Allocator 는 새로운 객체가 할당될 수 있는 빈 공간 블락의 참조를 가지고 있는다.

 

Step 2a : Deletion with Compaction

 성능 개선을 위하여, 참조되지 않는 객체를 지울 뿐만 아니라 참조가 되고 있는 객체들을 압축할 수 있다. 참조되고 있는 객체를 옮김으로서 새로운 메모리 할당을 더 빠르고 쉽게 할 수 있다.

Generational Garbage Collection

 JVM 안에 있는 모든 객체를 Mark 하고 압축하는 것은 비효율적이다. 점점 더 많은 객체가 할당되고 객체 리스트가 점점 더 커질수록 Garbage Collection 에 소비되는 시간은 점점 커진다. 그러나 경험적인 분석에 의하면 대부분의 객체는 할당 된 후에 곧 제거된다.

위 그림에서 볼 수 있듯이, 시간이 지날 수록 매우 적은 객체만 남아있다. 사실 대부분의 객체는 그래프의 왼쪽부분에서 볼 수 있듯이 매우 짧은 시간만 사용된다.

 

 

출처 : https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

'JAVA' 카테고리의 다른 글

Java Garbage Collector 의 종류  (0) 2020.05.06
JVM Generation 과 GC 과정  (0) 2020.05.06
Error 와 Exception  (0) 2020.05.02
Abstract vs Interface  (0) 2020.04.30
JAVA 접근 제어자 - access level modifier  (0) 2020.04.30
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함