
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에 할당된다. 이렇듯 다음과 같이 동일한 내용을 갖지만 별도..

1. 기존 동시성 프로그래밍의 한계와 새롭게 도입될 구조적 동시성 (Structured Concurrency) [ 비구조적 동시성의 한계 ] ExecutorService를 이용한 동시성 적용 개발을 하다 보면 하나의 작업이 여러 개의 하위 작업(Task)들로 나누어지는 경우가 있다. 일반적인 단일 스레드 애플리케이션에서는 하위 작업들이 순차적으로 실행될 것이다. 하지만 만약 각각의 작업이 서로 독립적이고 하드웨어 리소스가 충분하다면, 이를 동시에 실행하여 전체 작업을 더 빠르게 그리고 더 적은 지연 시간으로 처리할 수 있을 것이다. 예를 들어 User와 Order API를 호출하여 얻어온 결과를 사용하는 코드가 있다고 하자. 이때 각각의 I/O 작업이 자체 스레드에서 동시에 실행된다면 더 빠를 것이므로,..

1. 자바는 Call By Value(Pass By Value) 방식으로만 동작한다 [ 자바 개발자 제임스 고슬링의 얘기 ] 아래의 내용은 자바 언어의 창시자인 제임스 고슬링(James Gosling)이 집필한 “The Java Programming Language”의 일부 내용이다. 어떤 사람들은 객체가 참조로 전달(by reference)된다고 잘못 말한다. 프로그래밍 언어 설계에서 참조 전달(pass by reference)은 인수가 함수에 전달될 때 그 값의 복사본이 아니라 원래 값의 참조를 전달받음을 의미한다. 만약 함수가 전달받은 매개변수를 변경하면 함수를 호출한 코드도 동일한 메모리 슬롯을 사용하므로 값이 변경되어야 한다. 자바는 객체를 참조로 전달하지 않는다(not pass objects ..