목표 String이 Heap 메모리 상에서 어떻게 저장되는지 확인한다. 개요 JVM에서 변수를 저장하게 선언하면 해당 변수는 Heap Area에 저장된다(그림1 참조). String도 Heap Area에 저장되는 것은 마찬가지인데 String은 많이 쓰이는 변수인 만큼 조금 특이한 방식으로 저장된다. *이것에 익숙하지 않다면 먼저 JVM의 메모리 사용 방식을 보고 오자 String은 우리가 가장 많이 쓰는 클래스 중 하나이다. String을 효율적으로 사용하기 위해 JVM상에서 String을 다른 객체들과 차별되게 저장되도록 해놓았는데, 그것이 바로 Heap Area 상의 String Constant Pool이다. 예를 들어 다음과 같은 코드가 실행된다고 해보자 val stringA1 = "A" val ..
JVM
목표 JVM 프로세스와 멀티 스레드 환경에 대해 이해한다. 공유되는 자원과 공유되지 않는 자원의 차이와 공유되는 자원의 접근 시 주의할점에 대해 이해한다. 개요 앞서 프로세스란 자원을 할당받아 실행되는 프로그램이라고 말했다. 즉, JVM은 하나의 프로세스이다. 하나의 프로세스는 여러 작업 단위를 가질 수 있는데 이 작업 단위를 바로 스레드라고 한다. JVM에서는 Main Thread라 불리는 쓰레드가 있고, 우리가 main() 메서드를 사용해 불리는 것이 바로 Main Thread이다. Main Thread가 종료되면 나머지 Thread 들도 자동으로 종료가 된다. 즉, JVM에서 Main Thread가 살아있는 것은 필수적이다. 하지만, 여러 Thread로 동시에 연산을 할 수 있음에도 Main Thr..
목표 각 Memory Area가 어떤 역할을 하는지 이해한다. JVM의 메모리 구조 JVM은 Runtime에 Data를 올려놓는 공간인 Runtime Data Area를 가지고 있다. 이 공간은 총 5가지로 나뉘는데, 뒤의 PC Register과 Native Method Stack 영역은 Low Level의 Operation을 하기 위한 메모리 공간 이므로 이 장에서는 앞의 세가지 'Method Area(Static Area)', 'Heap Area', 'Stack Area'만 다룬다. Method Area(Static Area) - 정적 영역 Heap Area - 힙 영역 Stack Area - 스택 영역 Method Area(Static Area) 개요 Method Area는 우리가 보통 정적(Sta..