본문 바로가기

전체 글

(10)
[Java] JVM의 이해(3) - Garbage Collection GC, Garbage Collection JVM은 운영체제로부터 메모리를 활동받아 동작한다. 그렇다면 JVM은 메모리를 어떻게 관리할까? C 언어를 배웠을 때를 생각하면 변수에 메모리를 동적할당(malloc)하고 해제(free)하는 과정들이 있었지만 자바에서는 그렇지 않았다. 제네릭을 이용해 변수를 선언했을 때 동적으로 크기가 변화하기도 했다. 프로그램이 끝날 때 까지 할당된 메모리가 해제되지 않는다면 분명히 저장 가능한 메모리는 바닥날 것이고 OOME(Out Of Memory Error)가 발생하고 만다. 실제로도 자바가 발전하면서 애플리케이션 지연(Suspend) 현상이 두드러짐에 따라 GC가 개발되었다. GC는 필요하지 않은 메모리를 해제하여 사용할 수 있는 메모리를 확보해나간다. 필요한 메모리 영..
[Java] JVM의 이해(2) - 주요 메모리와 static 지난번 포스트에서 JVM의 구조에 대해 살펴봤다. 이번에는 JVM이 메모리를 어떻게 관리하는지 들여다보려고 한다. Runtime Data Area 중 주요 부분을 자세히 살펴보자. Method Area 클래스 정보를 처음 메모리 공간에 올릴 때 초기화되는 대상을 저장하기 위한 메모리 공간 Runtime Constant Pool 영역을 통해 상수 자료형을 저장하여 참조하고 중복을 방지한다. Heap Area 자바로 구성된 객체 및 JRE 클래스가 탑재되는 영역 String Pool, 실제 데이터를 가진 인스턴스, 배열 등 저장 JVM Stack Area 메소드 안에서 사용되는 값, 메소드의 매개변수, 지역변수, 리턴값 및 연산 시 일어나는 값 저장 PC Register 현재 수행중인 JVM 명령의 주소를 ..
[Java] 자바 가상 머신 이해(1) - JVM 구조 자바 개발자라면 모를 수 없는 키워드, JVM. 대학 졸업할 때까지 “JVM 은 자바로 작성한 클래스를 기계어로 번역해주는 역할을 한다” 정도로 이해하고 있었다. 하지만 기술 면접을 찾아보면 JVM에 대해 물어보는 경우가 많다. 학교 생활에 충실했느냐를 판단하고자 물어보는 줄 알고 적당히 알고 넘어가려고 하다가 성능과도 연결되는 것을 알게 되었다. jvm 메모리 영역의 구분과 각 영역의 역할에 대한 이해는 자바 성능 최적화에 중요하다. 이에 차근차근 공부한 내용을 정리해보고자 한다 개요 자바 가상 머신(Java Virtual Machine), JVM이 등장하기 이전 모든 컴퓨터 프로그램은 특정 운영체제에 맞게 작성되었다. 또한 프로그램 메모리는 소프트웨어 개발자가 관리했다. 이런 기존의 틀을 깨부수고 등..