
1. 스템의 성능과 volatile 키워드를 통한 메모리 가시성에 대한 이해(Memory Visiblilty)[ 시스템의 성능에 대한 이해, 성능은 어디에서 오는가? ]무어의 법칙(Moore's law)과 컴퓨터 구조(Computer Architecture)무어의 법칙(Moore's law)은 인텔의 창업자 중 한명인 고든 무어(Gorden Moore)가 명명한 것으로, 경제적으로 생산 가능한 칩 위의 트랜지스터 수는 대략 2년마다 거의 2배로 증가함을 뜻한다.무어의 법칙이 성능이 아닌 트랜지스터 수를 기준으로 한다는 것은, 소프트웨어 엔지니어가 하드웨어 엔지니어로부터 얻어낼 수 있는 성능이 2배가 아님을 의미한다.성능에는 여러 가지 복합작인 요소가 작용하는데, 그럼에도 불구하고 성능에 가장 결정적인 요..

1. 올바른 자바/코틀린(Java/Kotlin) 애플리케이션 JVM 메모리 설정 가이드 [ 최소/최대 힙의 크기 ]개발한 애플리케이션을 배포할 때면 여러 가지 설정 및 옵션들을 제공해주어야 하는데, 대표적인 값이 바로 메모리 할당에 대한 부분이다. 자바에서 모든 객체는 힙 영역에 할당되며, 핵심은 힙 메모리의 크기이다. 힙 메모리의 크기를 너무 작게 잡으면 객체를 힙 메모리에 할당할 공간이 부족하여 OutOfMemoryError로 인해 애플리케이션이 비정상적으로 종료되거나 잦은 GC 발생으로 인해 애플리케이션 오버헤드가 증가하여 성능에 문제를 줄 수 있다. 반대로 힙 메모리를 지나치게 크게 잡으면 애프리케이션이 시작할 때 힙 초기화 시간이 길어져 시작 속도가 저하되거나 GC를 수행하는 시간이 길어져 응답..
1. 자바 9에 개선 및 최적화된 String 내부 구조 (JEP254: Compact Strings)[ 자바 8까지의 String 클래스의 문제점 ]자바 8까지는 내부적으로 char형 배열을 사용하여 문자열을 다루고 있었다.public final class String implements java.io.Serializable, Comparable, CharSequence { private final char value[]; private int hash; // ...} 하지만 이러한 방식은 메모리 비효율적인 문제가 있었다. 왜냐하면 자바의 Char 타입과 String 타입은 유니코드를 통해 전 세계적으로 일관되게 텍스트 데이터를 표현하고자 그 당시에 주목받던 UTF-1..
1. 값 객체(Value Object)와 불변성(Immutablity)[ 값 객체(Value Object) 와 참조 객체(reference object) ]프로그래밍을 하다 보면, 사물을 복합적으로 표현하는 것이 유용한 때가 있다. 예를 들어, 좌표는 x 값과 y값으로 표현될 수 있고, 금액은 숫자와 통화로 구성될 수 있다.class Point( val x: Int, val y: Int,) 이때 두 객체가 동일한지를 판단해야 하는 경우가 있는데, 예를 들어 두 Point 객체가 모두 (2, 3)이라는 좌표를 나타낸다면, 이를 동일하게 취급하는 것이 합리적일 수 있다.val p1 = Point(2, 3);val p2 = Point(2, 3);check(p1 == p2) 이렇듯 속성 값에 의해..

1. 자바 스레드의 여러 가지 상태들[ 여러 종류의 스레드 상태들(Thread State) ]자바 공식 문서(자바 23 기준)에 따르면 다음과 같은 자바 스레드 상태가 존재한다.NEW스레드가 생성되었으나 아직 시작되지 않은 상태아직 OS 스레드는 아직 존재하지 않으며, Thread.start()를 호출해야 OS가 실제로 스레드를 생성하도록 신호를 보냄RUNNABLE스레드가 실행 가능하여 운영 체제의 자원(예: 프로세서)을 기다리고 있거나 JVM 내에서 실행중인 상태운영체제의 스케줄러가 각 스레드에 CPU 시간을 할당하여 실행하므로, Runnable 상태의 스레드는 스케줄러의 실행 대기열에 포함되어 있다가 차례로 CPU에서 실행됨BLOCKED스레드가 모니터 락(동기화 락)을 기다리며 블록된 상태이 상태의 ..