Java 21 JVM & GC Improvements #RoadTo21
위 유튜브 영상을 기반으로 정리한 내용이다.
Java 21의 JVM 및 GC 개선 사항
Java 21은 JVM과 가비지 컬렉션 성능을 크게 향상시키는 중요한 업데이트를 포함하고 있다.
1. JVM 성능 최적화의 변화
Java 17에서 21로 넘어가면서 다양한 성능 최적화가 이루어졌다. 이 최적화는 메모리 관리와 스레드 작업뿐만 아니라, 스택과 힙 간의 전환 속도를 개선하여 Java 애플리케이션의 전반적인 효율을 높였다. 여기서 중요한 세 가지 성능 지표는 다음과 같다.
- 처리량(Throughtput): 단위 시간당 처리할 수 있는 작업의 양
- 지연 시간(Latency): 작업 요청과 응답 간의 지연 시간
- 메모리 사용량(Memory Footprint): 애플리케이션이 사용하는 총 메모리 크기
특히, Java 21에서는 높은 처리량을 유지하면서 메모리 사용량을 줄이기 위한 노력이 돋보인다.
2. 성능 향상을 위한 GC 개선 사항
Java 21에서는 GC 성능을 대폭 향상시키는 다양한 기술이 도입되었다. 특히, 문자열 중복 제거(String Deduplication) 기능이 ZGC, 병렬 및 시리얼 GC까지 확장되었다.
2.1 문자열 중복 제거 기능
Java 힙 메모리의 약 25%는 문자열로 차지되고, 그중 절반 정도는 중복된 문자열이다. GC는 이러한 중복 문자열을 탐지하고, 하나의 메모리 주소로 재할당하여 메모리 효율을 높인다. 이제 ZGC와 병렬, 시리얼 GC에서도 이 기능을 사용할 수 있어 메모리 압박이 큰 애플리케이션에서도 큰 이점을 얻을 수 있다.
2.2 G1 GC의 개선
G1 GC는 Java 9 이후 기본 GC로 설정된 만큼, 지속적인 최적화가 이루어졌다. Java 21에서 G1 GC는 다음과 같은 주요 변경 사항을 도입했다.
- 영역 크기 증가: GC 영역 크기가 최대 512MB로 확대되어, 큰 객체가 많은 애플리케이션에서도 메모리 조각화를 줄일 수 있게 되었다.
- 비트맵 최적화: 마크 비트맵을 단일 비트맵으로 통합해 약 1.5%의 힙 공간을 절약한다.
- 동시 정제 개선: 동시 정제 기능이 개선되어 처리량이 증가한다.
이로 인해 G1 GC의 조정이 일부 간소화되었으며, 특정 JVM 인자들이 더 이상 필요하지 않게 되어 최적화 설정이 보다 단순해졌다.
3. ZGC의 세대별 가비지 컬렉션 도입
Java 21의 가장 큰 변화 중 하나는 ZGC의 세대별 가비지 컬렉션(Generational Garbage Collection) 기능이다. 기존의 ZGC는 힙 메모리의 각 객체를 단일 풀에 관리했지만, 이제 Young과 Old 세대로 구분하여 더욱 효율적인 메모리 관리를 지원한다. 이는 특히 장기간 유지되어야 하는 객체와 단기간 사용 후 삭제되는 객체를 효과적으로 분리하는데 유리하다.
세대별 GC의 원리
세대별 GC는 다음과 같은 원리로 작동한다.
- Young Generation: 단기간 동안 사용되는 객체가 저장되며, 빠르게 수집된다.
- Old Generation: Young Generation에서 살아남은 객체는 Olg Generation으로 승격(Promotion)되어, 장기간 동안 메모리에 유지된다.
이를 통해 Young Generation에서 주로 발생하는 GC 작업을 빠르게 처리하고, Old Generation에서 발생하는 메모리 사용을 최소화할 수 있다.
ZGC의 장점과 고려 사항
ZGC는 고성능과 낮은 지연 시간을 목표로 설계되었다. 최대 16TB 힙을 지원하며, 서브 밀리초 수준의 정지 시간을 유지한다. ZGC는 세대별 GC로의 전환 덕분에 장기적으로 메모리와 CPU 자원을 효율적으로 관리할 수 있어, 캐싱이 많은 시스템 또는 고성능 서버 환경에서 탁월한 성능을 발휘한다.
4. 성능 개선을 위한 기타 Java 21 기능
Java 21에서는 암호화 알고리즘의 최적화도 이루어졌다. 특히 Poly1305와 같은 알고리즘에서 CPU 아키텍처에 따라 두 자릿수에서 세 자릿수의 성능 향상이 있었다. 이와 같은 변경 사항은 보안이 중요한 애플리케이션에서 암호화 및 복호화 성능을 크게 향상시킬 수 있다.
또한, `ObjectInputStream`, `ObjectOuputStream` 등의 주요 클래스가 개선되어 직렬화 성능이 향상되었다. 이는 대용량 데이터 처리가 필요한 애플리케이션에서 중요한 최적화이다.
5. 최적화를 위한 조언과 주의사항
Java 21의 새로운 GC 기능과 성능 개선을 활용하기 위해 다음과 같은 최적화 조언을 고려할 수 있다.
- GC 로깅 활성화: 새로운 GC 설정으로 전환할 때, GC 로그를 활성화하여 성능 모니터링을 권장한다.
- Java Flight Recorder(JFR) 사용: JFR을 통해 메모리 및 CPU 사용량을 프로파일링하여 최적화에 필요한 데이터를 수집할 수 있다.
- JVM 인자 점검: 이전 버전의 JVM 인자를 검토하여 필요하지 않은 인자는 제거하고, 새로운 최적화 인자를 반영한다.
결론
Java 21의 JVM과 GC 개선은 높은 성능과 효율을 제공하여, 특히 대규모 애플리케이션과 고성능 서버 환경에서 큰 이점을 제공한다. 새로운 세대별 ZGC와 최적화된 G1 GC를 활용하여 Java 애플리케이션의 성능을 극대화할 수 있으며, 이와 같은 업데이트는 코드 수정 없이도 업그레이드만으로 구현할 수 있다. Java 21로의 전환은 성능 개선과 유지 관리 비용 절감을 위한 효과적인 선택이 될 것이다.
'Programming' 카테고리의 다른 글
| Will AI replace programmers? | Cursor Team and Lex Fridman 정리 (4) | 2024.11.06 |
|---|---|
| Java 21 new feature: Virtual Threads #RoadTo21 정리 (7) | 2024.11.06 |
| Reactive, Reactor, Webflux와 Coroutine (0) | 2024.09.29 |
| Cookies And Sessions (1) | 2024.07.24 |
| 도커로 MySQL Master Slave Replication 만들기 (0) | 2024.06.03 |