2025/10/10 4

JDK LTS 와 각각의 내용에 대해 간략히 알아보자(JDK8, JDK11, JDK17, JDK21, JDK25)

일단 Java 에서 LTS 는 현재까지JDK8JDK11JDK17JDK21JDK25가 있다.우리는 기본적으로 JDK21 을 쓰고 있는데, 그래서 이걸 써서 뭐가 좋아졌어? 하면 뭔가 피상적인 대답밖에 할 수 없었어서… 무엇이 좋아졌는지를 조금 더 상세히 보려 한다.JDK8아마 책에서 modern java 라고 하면 얘를 많이 대상으로 했을 것이다.이전 java 랑은 차원이 다르게 많이 바뀌기도 했고 자바를 쓸 일이 있으면 최소한 이거는 써야 한다는 생각이 든다.JDK8의 특징특징은 다음과 같다.Lambda ExpressionStream APIOptionalLocalDate이미 워낙 유명해서 딱히 뭐 설명할만한 특성은 없다.한가지 재미있는 부분은 람다'식' 과 스트림'API' 라는 이름인데 저게 다른 이름으..

이론 정리/java 2025.10.10

간략한 Shenandoah GC 방식 설명

ZGC처럼 STW이 유발하는 지연 시간을 줄이는 것이 목표개념포워딩 포인터, 배리어 두개를 통해 동시 압축을 구현했다.포워딩 포인터(Forwarding Pointer)모든 객체는 헤더에 1word 크기의 포워딩 포인터를 위한 추가 공간을 가진다. (평상시는 자기 자신을 지칭)1word 는 보통 해당 시스템의 레지스터 크기나 메모리 주소의 크기와 같다.32비트에서는 32비트64비트에서는 64비트객체의 주소가 변경되면 기존 주소에 있는 객체의 헤더에 변경된 주소 데이터를 남긴다(포워딩 포인터에 변경)읽기/쓰기 배리어이름 그대로 읽기/쓰기 양쪽에 모두 적용되는 배리어애플리케이션 스레드가 힙에 있는 객체에 접근하려 할 때마다 배리어 코드 실행배리어가 객체 헤더를 확인해서 포워딩 포인터가 설정되어 있는지 확인하고..

이론 정리/java 2025.10.10

간략한 ZGC 방식 설명

힙 크기가 무관하게 일시정지 시간을 1ms 미만으로 보장하는 것이 목표참고로 얘는 64비트 이상의 컴퓨터에서만 활용 가능하다(컬러드 포인터의 동작 방식과 연관이 있음)개념컬러드 포인터, 로드 베리어라는 것이 핵심이다.컬러드 포인터(Colored Pointer)64비트 운영체제에서 메모리 주소는 64비트를 다 사용하지 않는데(64비트는 진짜 개커서 실제로 컴퓨터는 48/52비트를 사용하도록 설계되어 있기 때문) 그래서 나머지 비트는 잉여 공간이 된다.이렇게 남은 잉여 공간 활용 가능GC 관련 메타데이터(객체가 마킹되었는지, 재배치 되었는지 등)을 저장헤더가 아닌 포인터 자체에 정보를 저장하기 때문에 객체에 접근하는 시점에 상태를 알 수 있다로드 배리어GC에서 객체 이동을 하면 파편화가 발생할 수 있어(주소..

이론 정리/java 2025.10.10

간략한 G1GC 방식 설명

여기서 '1' 은 one 이 아니라 first 라고 생각하면 된다.즉, garbage 를 먼저 처리하는 방식이다.개념이전의 serial, parallel GC 에서는 Young 영역과 old 영역을 물리적으로 나누어 두었는데, 이거는 다른 식으로 생각한다.전체 Heap 을 여러 개의 'Region' 으로 나눈다. (보통은 heap 영역의 크기에 맞춰서 2048개의 region 을 만들도록 각 region 의 크기를 결정한다.)각각의 region 은 동적으로 Eden, Survivor, Old 역할을 부여받는다.보통 때에는 Free 상태로 있다가 필요할 때 할당된다.참고로 GC가 끝나면 다시 Free 상태로 돌아감Region 의 크기의 50% 를 초과하는 객체는 'Humongous' 라는 Region 에 ..

이론 정리/java 2025.10.10