본문 바로가기
💊 Java & Kotlin & Spring/- Java & kotlin

[Java 심화] JRE와 JVM은 어떻게 Java 코드를 실행시킬까?

by Wonit 2019. 12. 21.

학습 목표

 

우리가 자바를 배우는 동안 실습에만 중심을 뒀었지 컴퓨터 내부적으로 JRE는 어떻게 돌아가고 JVM은 어디서 실행되며, JDK는 왜 쓰이는지에 대해서 학습할 비중이 매우 적었다. 이제 제대로 한 번 알아 보고, 프로그램이 어떻게 메모리에 적재되며 어떤 데이터가 어떤 메모리에 올라갈 지를 학습해 보는게 폭표이다.

 

JRE와 JVM이란 뭘까?

 

JVM (Java Virtual Machine) 과 JRE (Java Runtime Environment) 추가적으로 JDK (Java Development kit) 까지. 해당 의미를 정확히는 몰라도 Java 개발자라면 한 번쯤 들어봤을 것이다.

 

이는 각각

  • JVM : 자바 소프트웨어 개발 도구
  • JRE : 자바용 OS
  • JDK : 가상 PC

 

을 의미한다고 알고 있는데 이는 다 플랫폼 독립적인 자바의 특성에서 부터 시작된다는 것일 모두가 알 고 있을 것이다.

 

이 JVM과 JRE에 대한 뜻은 알게 됐으나 정확한 사용법을 알고 싶지만 한 가지 더 알아야 하므로 잠시만 기다리자.

 

메모리 구조

JRE와 JVM이 사용되는 방법에 대해서 이해하려면 첫 번째로 먼저 메모리의 구조에 대해서 알아야 한다.

 

메모리 구조에는 크게 2가지의 구조가 존재한다.

  1. 코드 실행 영역

  2. 데이터 영역

이렇게 두 가지에서 데이터 영역은 또 3가지로 세분화 되는데

  1. 스태틱 영역
  2. 스택 영역
  3. 힙 영역

그렇다면 아마 다음과 같은 구조를 갖게 될 것이다.

이렇게 세분화된 세 영역에서 각자 하는 일을 부여한다면

  1. 스태틱 영역 : 클래스의 활동 영역
  2. 스택 영역 : 메서드의 활동 영역
  3. 힙 영역 : 변수 및 임시 변수들의 활동 영역

 

그렇다면 JRE와 JVM은 어떻게 쓰일까?

예를 들어 우리가 이러한 Java 코드를 수행한다고 해보자.

 

public class Post01 {
    public static void main(String[] args) {
        System.out.println("안녕하세용~~");
    }
}

그렇다면 다음과 같은 과정이 일어날 것이다.

 

JRE가 프로그램 내에 main() 메서드가 존재하는지 확인한다.

우리의 JRE 가 나타나서 프로그램 내부에 있는 main()메서드의 존재를 찾을 것이고, 만약에 main()메서드의 존재가 확인된다면 JVM을 부른다.

 

JVM이 전처리 과정을 거친다.

JVM이 가장 먼저 불러들어 와서 하는 일은 전처리라는 과정인데 그 과정에 대해서 자세히 알아보자.

 

JVM은 전처리 과정을 통해서 import된 클래스나 package를 메모리에 올려놓는데, Static 영역에 추가시킨다.

 

지금 위의 소스코드에서는 System.out.println()을 사용하기 위해서 Java.lang 클래스가 import 되었다. 그럼 전처리 과정에 의해 다음과 같이 될 것이다.

 

그리고 나서 추가적인 import가 존재하는지 확인하지만 추가적인 import는 존재하지 않기 때문에 넘어간다.

 

추가적으로 전처리 과정에서 import된 클래스를 static 영역에 배치할 뿐 아니라 프로그램 내에 존재하는 모든 클래스를 static에 배치시킨다

 

메서드를 stack 영역에 배치 시킨다.

전처리 과정을 거치고 나서 바로 사용할 수 있는 것이 아니다.


아까 봤던 그림처럼 static 영역은 클래스의 활동 영역이라고 했고 우리가 실행하고 싶은 코드인 System.out.println()메서드라는 것을 잊지 말아야 한다. 그리고 메서드의 활동 영역은 Stack 영역이므로 이를 Stack 프레임을 만드는 것 까지를 거쳐야 한다.

이로써 우리는 System.out.println("안녕하세요")라는 코드가 수행되는 것이다.


이와 같이 메모리 구조의 쓰임과 함께 알아보니 정말 유익한 시간이지 않았나요? 다음 시간에는 메모리 구조에 heap 영역에 대해서 말 해볼게요!!

댓글0