[JAVA] JVM 구조 및 메모리 영역 - Class, Heap, Stack Area

AI 개발자 웅이·2022년 7월 13일
2

Java

목록 보기
5/11

JVM(Java virtual machine)은 자바 가상 머신으로 자바 바이트 코드를 해석하는 역할을 한다. JVM만 있다면 플랫폼에 영향을 받지 않으므로 Window, Linux 등 다양한 환경에서 사용이 가능하다.

아래 세 가지 실행 단계를 거쳐 자바 소스코드가 OS에서 실행된다.

  1. 자바 소스 코드인 .java 파일을 자바 컴파일러가 자바 바이트 코드인 .class로 변환한다.
  2. .class 코드를 JVM의 class loader로 보낸다.
  3. JVM 런타임 데이터 영역 내 메모리에서 class loader를 받아 파일이 실행된다.

JVM 런타임 데이터 영역에는 클래스(class) 영역, 힙(heap) 영역, 스택(stack) 영역이 있다. 이 세가지 메모리 영역의 주요 특징과 사용 방식에 대해 알아보자.

클래스 영역(Class Area)

Static, Method 영역이라고도 불리며, 클래스 정보, static 변수, 변수 정보(데이터타입, 접근제어자), 메소드 정보(메소드명, 리턴타입, 파라미터, 접근제어자), final class, constant pool 등이 저장되는 메모리 영역이다. JVM이 동작해서 클래스가 로딩될 때 생성되며, JVM이 종료될 때까지 유지된다. 또한 런타임 중에 변경할 수 없는 특징을 가지고 있고 고정된 공간을 차지하고 있다. 해당 메모리를 잘 사용하는 경우(Singleton 패턴) 메모리 사용에서 이점을 볼 수 있으나, static 변수와 같이 공유되는 자원의 경우 잘못 사용하면 멀티 쓰레드 환경에서 치명적인 버그를 불러올 수 있다.

힙 영역(Heap Area)

힙 영역에는 new 키워드로 생성된 객체(인스턴스)의 데이터와 참조 자료형(class, interface, enum, Array 등)이 저장된다. 클래스 영역에 로드된 클래스로만 객체 생성이 가능하며 garbage collector의 주요 대상이 된다. 인스턴스가 생성될 때 힙에 생성되며, 가비지 컬렉터가 메모리를 수거할 때 소멸한다.

스택 영역(Stack Area)

스택 영영에는 int, boolean 등 기본 자료형과 지역 변수, 파라미터, 리턴값 등 연산에 임시로 사용되는 정보들이 저장된다. 또한, 객체의 참조 주소값도 스택 영역에 저장된다. 메소드 호출 시 개별적으로 스택이 생성되며, 종료 시 소멸한다.

profile
저는 AI 개발자 '웅'입니다. AI 연구 및 개발 관련 잡다한 내용을 다룹니다 :)

0개의 댓글