ava에서 GC는 JVM에 의해 자동으로 관리되며 개발자는 명시적으로 메모리를 해제할 필요가 없다. Java의 GC는 여러 가지 알고리즘과 튜닝 옵션을 제공하여 다양한 애플리케이션 요구 사항을 충족시킨다.
- 동작 방식 : 단일 쓰레드로 GC 작업을 수행한다.
- 장점 : 구현이 간단하고 단일 쓰레드 애플리케이션에 적합하다.
- 단점 : 멀티코어 시스템에서 성능이 낮다. GC가 실행될 때 애플리케이션이 멈추는(stop-the-world) 시간이 길어질 수 있다.
- 동작 방식: 여러 쓰레드를 사용하여 GC 작업을 병렬로 수행합니다.
- 장점 : 멀티코어 시스템에서 성능이 향상됩니다.
- 단점 : 여전히 stop-the-world 현상이 발생할 수 있습니다.
- 동작 방식: 애플리케이션 쓰레드와 병행하여 GC 작업을 수행합니다.
- 장점 : stop-the-world 시간을 줄입니다.
- 단점 : 메모리 파편화(fragmentation)가 발생할 수 있으며, 복잡도가 높습니다.
- 동작 방식 : 힙을 여러 영역으로 나누어 병렬로 GC를 수행하며, 필요한 영역을 우선적으로 정리합니다.
- 장점 : 예측 가능한 짧은 stop-the-world 시간을 제공합니다.
- 단점 : 설정과 튜닝이 복잡할 수 있습니다.
Java의 Garbage Collection은 메모리 관리의 복잡성을 줄여주며 다양한 GC 알고리즘과 옵션을 제공하여 다양한 애플리케이션 요구 사항을 충족시킬 수 있습니다. 효율적인 GC 튜닝을 통해 Java 애플리케이션의 성능을 최적화할 수 있으며 이를 위해 각 알고리즘의 특성과 동작 방식을 잘 이해하는 것이 중요합니다.
Garbage Collection 은 자동으로 메모리를 관리하지만 특정 애플리케이션의 요구 사항과 실행 환경에 맞게 GC를 튜닝하면 성능을 더 최적화 할 수 있다. 아직은 GC에 대해서 이정도만 이해하고 스프링을 더 배워서 GC 튜닝 방법 까지 공부해봐야겠다.