본문 바로가기

java25

Generational ZGC in Java 21 개요Java 21은 2023 년 9월에 Generational ZGC의 도입과 함께 공개되었다. Highly scalable, low-latency GC 였던 ZGC는 https://openjdk.org/jeps/439를 통해 generational GC로 업데이트 되었다. 이 업데이트에서는 young / old 객체에 대하여 별도의 세대를 도입하여 메모리 관리를 최적화 하는것에 중점을 두었다. What is ZGC?ZGC는 최대 16TB 크기의 힙을 지원하면서도 밀리초 미만의 일시 정지 시간을 유지하며 높은 확장성을 갖도록 설계되었다. ZGC는 애플리케이션이 실행되는 동안 새로운 객체를 할당하고, 도달할 수 없는 객체를(unreachable object) 스캔하고, 힙을 압축하는 등의 작업을 수행하는데.. 2024. 7. 2.
Spring - Modulith - Working with Applicaton Events 개요Spring Modulith는 Spring Boot 애플리케이션에서 논리 모듈을 구련하는 개발자를 지원한다. 모듈을 문서화하고, 모듈에 대한 통합 테스트를 실행하고, 모듈 간 상호 작용을 관찰하고, 모듈 간의 느슨한 결합으로(loosely coupled) 상호 작용을 구현할 수 있도록 한다. 이전글 참고 (https://blog.igooo.org/118) Working with Application EventsSpring Modulith로 구현된 모듈 사이에는 모듈에서 공개된 기능만(public method) 호출하여 사용할 수도 있지만 각 모듈은 서로 가능한 분리된 상태로 모듈 간 연동은 이벤트 게시 및 소비로 연동하여야 한다. 모노리스로 구현된 애플리케이션에서는 아래와 같은 코드를 볼 수 있다. .. 2024. 6. 21.
[Spring Framework 6.2] Support for fallback beans 개요Spring Framework 6.2에 추라될 기능 중 @Fallback에 대하여 알아본다. AS-ISSpring 컨테이너에 동일한 유형의 Bean이 여러개가 있고, autowited에 사용할 Bean을 경정하는 경우 @Primary 어노테이션 추가가 필요하다.interface UserRepository { String findNameById(String id);}class MysqlUserRepository implements UserRepository { @Override public String findNameById(String id) { return "mysql " + id; }}class MongoUserRepository implements UserRepository { @Overrid.. 2024. 6. 15.
[Spring Framework 6.2] Bean Background Initialization 개요Spring Framework 6.2에 추가될 기능 중 Bean Background Initialization에 대해 알아본다. Quick StartSpring Framework 6.2 Dependency 설정아직 Spring Framework 6.2가 정식 릴리즈 되지 않아서 Snapshot 버전으로 설정한다.plugins { id 'java' id 'org.springframework.boot' version '3.3.1-SNAPSHOT' id 'io.spring.dependency-management' version '1.1.5'}java { toolchain { languageVersion = JavaLanguageVersion.of(21) }}repositories { mavenCentra.. 2024. 6. 13.
[Spring] Spring Framework CDS(Class Data Sharing) (Project Leyden) https://spring.io/blog/2023/10/16/runtime-efficiency-with-spring에 대한 후속 조치로 Project Leyden 최적화를 위해 많이 사용되지 않는 JDK의 CDS(lass Data Sharing) 기능에 대한 지원이 Spring Framework 6.1에 제공되어 CDS에 대하여 알아본다. GraalVM, Proejct CRaC를 사용하면 Spring Boot 애플리케이션을 수십 밀리초에 시작할 수 있다. 하지만 왜 CDs에 관심을 가져야 하는지 알아보자.GraalVM 및 Proejct CRaC보다 제약 조건과 부작용이 적고, OpenJDK에서 즉시 사용 가능한 기술이다.대부분의 사람들은 CDS를 사용하지 않지만 상대적으로 적은 작업으로 합리적인 시작 시.. 2024. 6. 6.
Java Virtual Threads 사용 시 synchronized 주의 개요Virtual thread를 synchronized 구문과 함께 사용 시 주의 해야한다. Java 21 + tomcat + HttpComponents  조합으로 Virtural Therad를 활성화하여 사용하면 요청이 많은 경우 서버가 blocking되는 이슈가 발생할 수 있다.https://openjdk.org/jeps/444There are two scenarios in which a virtual thread cannot be unmounted during blocking operations because it is pinned to its carrier:When it executes code inside a synchronized block or method, orWhen it executes.. 2024. 6. 4.