JDK 27 정리: Compact Object Headers와 G1이 기본값이 됐다
JDK 27 JEP 9개 중 정식은 넷. G1과 Compact Object Headers가 기본값이 됐습니다. 25.0.4와 실측 비교.
Java·Spring 백엔드부터 인프라·DevOps까지, 실제 환경에서 검증한 개발 기록과 문제 해결 과정을 정리합니다.
JDK 27 JEP 9개 중 정식은 넷. G1과 Compact Object Headers가 기본값이 됐습니다. 25.0.4와 실측 비교.
자바 프로젝트에 코틀린 파일을 넣었더니 앱이 아예 뜨지 않았습니다. 플러그인을 넣고 빼 가며 무엇이 어떻게 깨지는지 확인한 기록입니다.
엔티티를 data class로 바꿨더니 Set이 자기 안에 든 객체를 못 찾았습니다. 무엇이 생성되는지 디컴파일해서 원인을 찾았습니다.
널 안전 언어라는 코틀린에서 NPE를 만났습니다. 디컴파일해 보니 원인은 자바에서 받은 값이었고, 타입 한 줄로 예외 메시지가 달라졌습니다.
데드락 로그를 직접 만들어 줄 단위로 해부합니다. 갭 락과 삽입 의도 락이 왜 서로 다른 값을 넣는데도 충돌하는지까지.
@ManyToOne은 fetch join으로 끝납니다. 컬렉션은 다릅니다. 페이징·두 개 이상·카티션 곱에서 막히는 걸 쿼리 수로 측정했습니다.
Spring AI 2.0.1로 MCP 서버를 만들어 직접 붙여봤습니다. @McpTool 하나면 끝나는데, 그 전에 Jackson 3 때문에 Spring Boot 4로 올려야 했습니다.
아키텍처 규칙을 테스트로 만드는 라이브러리입니다. 바이트코드를 읽는 방식이 정말 더 정밀한지 궁금해서 직접 돌려봤더니, 소스에 있는 import를 못 보는 경우가 있었습니다.
JDK 24의 JEP 491로 synchronized pinning이 사라졌습니다. 지금 검색되는 가상 스레드 조언 절반이 낡았고, 진짜 병목은 커넥션 풀로 옮겨갔습니다.
Java 25 LTS의 JEP 18개 중 지금 바로 쓸 수 있는 것과 아직 프리뷰인 것을 구분했습니다. Scoped Values는 정식, 구조적 동시성은 아직 5번째 프리뷰입니다.