반응형
Java의 가비지 컬렉터(Garbage Collector, 이하 GC)는 메모리 관리를 자동화하여 개발자가 메모리 누수와 메모리 관리에 대한 걱정을 줄이는 역할을 합니다. GC는 더 이상 사용되지 않는 객체를 식별하고 해제하여 메모리를 회수합니다. Java의 GC는 다양한 알고리즘과 방식으로 동작할 수 있으며, 주요 구성 요소 및 작동 방식에 대해 설명하겠습니다.
💡객체 생성
- Java 프로그램에서 객체가 생성되면 메모리 힙(heap) 영역에 저장됩니다. 이 힙 영역은 Java 프로그램의 모든 객체 인스턴스를 저장하는 곳입니다.
💡 객체 참조
- 객체는 변수나 다른 객체에 의해 참조됩니다. 객체가 더 이상 참조되지 않을 때 GC가 필요해집니다.
💡 Reachability(도달 가능성)
- GC는 도달 가능한(reachable) 객체를 식별하고, 그렇지 않은 객체를 가비지로 표시합니다. 도달 가능한 객체는 어떠한 경로를 통해도 프로그램에서 접근할 수 있는 객체를 말합니다.
💡 GC 알고리즘
- Java의 GC는 다양한 알고리즘을 사용하여 가비지 수집을 수행합니다. 일반적으로 사용되는 알고리즘에는 다음이 있습니다
- Serial GC: 단일 스레드로 동작하며 작은 애플리케이션에 적합합니다.
- Parallel GC: 다중 스레드를 활용하여 가비지 수집을 병렬로 수행합니다. 대규모 애플리케이션에 적합합니다.
- Concurrent Mark-Sweep (CMS) GC: 프로그램 실행과 병행하면서 가비지 수집을 수행합니다. 일시 중지 시간을 최소화하는 데 중점을 둡니다.
- G1 (Garbage-First) GC: 힙 영역을 여러 영역으로 분할하고 목표를 가지고 최적화된 가비지 수집을 수행합니다.
💡 GC 동작 단계
- GC는 크게 세 가지 단계로 동작합니다.
- Mark(표시): 도달 가능한 객체를 식별하고 표시합니다.
- Sweep(청소): 가비지로 표시된 객체를 메모리에서 제거합니다.
- Compact(압축): 객체를 메모리 상에서 조각난 공간을 정리하고 메모리 힙을 최적화합니다. 이 단계는 모든 GC 알고리즘에서 수행되지는 않습니다.
💡 GC 튜닝
- Java 애플리케이션은 다양한 요구 사항과 환경에서 실행되므로 GC 동작을 튜닝하는 것이 중요합니다. 이를 통해 애플리케이션 성능을 최적화할 수 있습니다.
💡 GC 종류
- Java에서는 다양한 GC 구성 및 옵션이 제공됩니다. 이를 사용하여 애플리케이션의 요구 사항에 맞게 GC를 설정할 수 있습니다.
💡 Weak Reference(약한 참조)
- GC는 약한 참조(Weak Reference)를 사용하여 객체가 도달 가능한지 여부를 판단합니다. 약한 참조는 참조 계수를 증가시키지 않으며 객체의 수명을 제어하는 데 도움이 됩니다.
Java의 GC는 Java Virtual Machine(JVM)의 일부로 동작하며, 개발자는 일반적으로 직접 GC를 제어할 필요가 없습니다. 그러나 대규모 및 특수한 애플리케이션에서는 GC 동작을 이해하고 튜닝하는 것이 성능 최적화에 중요합니다.
반응형
'프로그래밍 > Java' 카테고리의 다른 글
[Java] System.out.println 메소드는 현업에서 쓰지말라는 이유 (0) | 2023.10.18 |
---|---|
[Java] 제네릭이란 무엇인가, 왜 사용할까 (0) | 2023.10.17 |
[Java] 리플렉션(Reflection)과 자바 다이나믹 프록시(Java Dynamic Proxy) (0) | 2023.10.15 |
[Java] new String()과 ""(리터럴 방식)의 차이 (0) | 2023.10.14 |
[Java] HashMap vs HashTable vs ConcurrentHashMap의 차이 (2) | 2023.10.13 |