[Java]JVM의 역할과 메모리 구조

김의진·2021년 12월 23일
0

자바의 JVM과 메모리 구조를 익혀두어 추후 안정적인 메모리 관리를 안정적으로 할 수 있는 개발을 진행하자.

1. JVM(Java Virtual Machine)이란?

JVM은 Java Virtual Machine, 자바 가상 머신의 약자를 따서 부르는 용어이다. 자바의 큰 특징중 하나가 OS에 종속적이지 않다는 점인데 JVM은 이런 자바의 특징을 실현시켜준다. 보통의 프로그램은 OS위에서 동작하지만 자바로 만들어진 프로그램은 JVM위에서 동작하게 된다. 즉 JVM은 JAVA와 OS 사이세어 중개자 역할을 수행하며 JAVA가 플랫폼 독립적으로 동작되도록 해준다. 더불어 JVM은 메모리관리, Garbage Collection을 수행한다.
JVM의 메모리 관리를 효율적으로 처리 함으로써 동일한 기능을 가진 프로그램이라고 더 좋은 성능을 낼 수 있다고 생각한다.

이미지 출처 - https://helloworld-88.tistory.com/16

2. JAVA 프로그램의 실행 과정

  • 프로그램이 실행되면 JVM은 OS로부터 이 프로그램이 필요로 하는 메모리를 할당받는다.
  • Java 언어로 프로그래밍된 파일을 Java 컴파일러가 가상 기계어 파일인 Java 클래스 파일로 만든다.

이미지 출처 - https://helloworld-88.tistory.com/16

여기서 바이트 코드란 JVM이 이해할 수 있는 언어로 변환된 자바 소스 코드를 의미한다. 해당 코드의 확장자는 .class 이며 JVM이 설치된 운영체제 어디서든 실행이 가능하다.

Java Compiler에 의해서 자바 바이트 코드로 변환된 파일은 즉 소스 코드를 Java 바이트 코드로 번역한다. 이후 번역된 Java 바이트 코드를 Execution Engine을 통해서 해석되며 해석된 바이트 코드는 Class Loader에 의해서 JVM 내에 Load 된다. 이 때 Load 되는 위치는 Runtime Data Area로 이 공간은 JVM이 프로세스를 수행하기 위해 OS로 부터 할당받은 메모리 영역이다.

해당 영역은 다시 5가지 영역으로 나뉘어 진다.

  1. Method Area ( = Class Area = Static Area )
    프로세스 내 모든 스레드에 공유된다. 클래스 정보, 변수정보, Method정보, Static변수정보, 상수정보 등이 저장되는 영역이다.
  2. Heap Area
    프로세스 내 모든 스레드에 공유된다. New 명령어로 생성된 인스턴스, 객체가 저장되는 구역으로 Garbage Collection의 대상이 되는 공간이다.
  3. Stack Area
    각 스레드마다 하나씩 생성, Method안에서 사용되는 값들(매개변수, 지역변수, 리턴값 등)이 저장되는 구역
    해당 영역은 LIFO(Last In First Out)의 구조를 가지고 있다.
  4. PC Register
    각 스레드마다 하나씩 생성, CPU의 Register와 역할이 비슷하며 현재 수행 중인 JVM 명령의 주솟값이 저장된다.
  5. Native Method Stack
    JAVA가 아닌 다른 언어로 작성된 코드를 위한 공간이다.
profile
3년차 Spring, Java 주니어 백엔드 개발자입니다.

0개의 댓글

관련 채용 정보