
1. Async-Profiler 소개 및 사용 방법[ Async-Profiler란? ]async-profiler는 오픈소스 프로젝트로, Safepoint bias 문제를 겪지 않는 자바 전용 저오버헤드(low-overhead) 샘플링 프로파일러이다. Safepoint란 GC 작업을 진행하면서 사용되지 않는 객체들을 식별하는데, 이때 애플리케이션이 안전한 지점으로 이동하여 GC를 진행할 수 있는 지점을 safepoint라고 한다. 그리고 Safepoint bias 문제란 간단히 요약하면 샘플링 프로파일러에 의한 분석 샘플이 특정 위치로 편향되는 문제를 의미한다. 기존의 많은 자바 샘플링 프로파일러들은 Safepoint bias 문제에 의해 정확한 분석을 해주지 못했기 때문에 상당히 아쉬운 부분이 많이 있었..

1. 코틀린에서 move instance method 리팩토링 기능 활성화하기 [ move instance method 리팩토링 기능 소개 ] 예를 들어 신용카드를 발급하는 유스케이스가 있고, 신용카드 발급을 위해서는 기본적으로 사용자가 20세 이상의 성인이여야 한다고 하자. 해당 코드는 자바로 다음과 같이 구현할 수 있다. @Getter @Builder @NoArgsConstructor @AllArgsConstructor public class User { private int age; } @Service @RequiredArgsConstructor class IssueCreditCardUseCase { public void issue(User user) { if (isAdult(user)) { .....

1. 스레드 로컬(ThreadLocal)과 상속 가능한 스레드 로컬( InheritableThreadLocal)에 대하여 [ 스레드 로컬(ThreadLocal)이란? ] 자바는 오랜 기간 동안 동시성 처리를 위해 스레드를 사용해왔다. 대표적으로 스프링 프레임워크는 멀티 스레드 모델을 사용하고 있으며, 1개의 요청을 1개의 스레드가 처리하는 thread-per-request 방식으로 동작하고 있다. 자바는 각각의 스레드 별로 필요한 정보를 저장할 수 있는 스레드 로컬(Thread Local)이라는 기술을 제공하고 있다. 각각의 스레드는 살아있는 한 ThreadLocal에 접근할 수 있는 암묵적인 참조를 갖는 것이다. 이러한 스레드 로컬은 다음과 같이 활용할 수 있다. 스레드 내에서 공유할 값을 저장하고 어..
1. Nested Class(중첩 클래스)에 대한 자바 스펙 문서 정리 [ Nested Class(중첩 클래스)에 대하여 ] 자바에서는 한 클래스 내에서 다른 클래스를 정의할 수 있는데, 이를 nested 클래스라고 한다. nested 클래스는 다시 static 클래스와 non-static 클래스로 나눌 수 있다. static: static nested class라고 부름 non-static: inner class라고 부름 class OuterClass { // inner class 라고 부름 class InnerClass { ... } // static nested class 라고 부름 static class StaticNestedClass { ... } } nested 클래스는 해당 클래스를 둘러싸는..

아래의 내용은 DZone의 포스팅을 바탕으로 참고하여 정리한 내용입니다. 1. 중복 문자열 제거를 통한 메모리 절약을 위한 -XX:+UseStringDeduplication GC 옵션 [ 중복 문자열의 개념과 예시 ]중복 문자열이란?자바의 literal string은 heap에 별도의 공간으로 존재하는 String Constant Pool에 저장되고, 같은 literal string은 String Constant Pool에 저장된 같은 문자열을 참조한다. 따라서 str == str2 는 true이다. 하지만 new String(”hello”) 로 생성된 객체는 String Constant Pool에 저장되지 않으며, 일반 객체로서 heap에 할당된다. 이렇듯 다음과 같이 동일한 내용을 갖지만 별도..