gunkim / blog-comments

0 stars 0 forks source link

learn/java-performance-fundamental/chapter02/ #1

Open utterances-bot opened 2 weeks ago

utterances-bot commented 2 weeks ago

02.Runtime Data Areas · Gun.Kim

https://gunkim.github.io/learn/java-performance-fundamental/chapter02/

gunkim commented 2 weeks ago

본문의 내용은 JDK 7이 출시되기 이전의 내용을 다루고 있기 때문에 세부적인 내용은 현재 JDK 21까지 발전함에 따라 다른 내용이 어느정도 존재한다.


JDK 7 이후부터 JDK 21까지 자바의 메모리 관리에서 여러 중요한 변화가 있었다. 먼저, JDK 8에서는 기존의 PermGen을 대체하여 Metaspace가 도입되었다. Metaspace는 동적으로 크기가 조정되는 메모리 영역으로, PermGen이 자주 일으키던 메모리 부족 문제를 해결하고 OutOfMemoryError 발생 가능성을 줄여준다.

또한, Garbage Collector(GC) 측면에서도 많은 개선이 이루어졌다. JDK 9부터는 G1 GC가 기본으로 설정되었으며, JDK 12와 15에서 각각 Shenandoah GC와 ZGC가 추가되었다. 특히 JDK 21에서는 ZGC에 세대 구분 기능이 도입되어, 젊은 객체와 오래된 객체를 구분하여 더 효율적으로 메모리를 관리할 수 있게 되었다.

더불어, JDK 8에서는 String Deduplication 기능이 추가되었다. 이 기능은 힙 메모리에서 중복된 문자열 객체를 제거하여 메모리 사용량을 줄이는 데 기여한다. 또한, 64비트 JVM에서는 Compressed Class Pointers가 도입되어 클래스 포인터의 크기를 줄여 메모리 효율성을 높였다.

참고 자료