JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가

Created:

자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기.

JVM이란 무엇인가

개발자들이 작성한 Java 프로그램이나 Web 애플리케이션 Server(WAS) 등을 구별하지 않고 Java 프로그램의 범주에 들어가는 모든 것들을 실행시키는 기본 데몬을 JVM이라고 한다.

컴파일 하는 방법

콘솔에서 javac명령어를 사용한다. 컴파일이 완료되면 *.class 파일이 생성된다.

Main.java

public class Main {

    public static void main(String[] args) {
        System.out.println("HelloWorld");
    }

}

콘솔에서 컴파일

  • javac 명령어를 사용한다.
> javac Main.java
> ls
> Main.class Main.java

콘솔에서 실행

  • java 명령어를 사용한다.
> ls
> Main.class Main.java
> java Main
> HelloWorld // 결과 출력

바이트코드란 무엇인가

java파일을 컴파일하면 .class 파일이 생성되는데 이 파일이 바이트코드로 되어있다. JVM에서 바이트 코드를 읽어들여 메모리에 로드하고 기계어로 번역한다.

JIT 컴파일러란 무엇이며 어떻게 동작하는지

JIT는 Just In Time의 약어로 실행 시점에서 인터프리터 방식으로 기계어 코드를 생성하고 그 코드를 캐싱하여 같은 함수가 여러번 불릴때 캐시된 코드를 재사용한다.

JVM 구성 요소

Class Loader: JVM내로 .class파일들을 읽어들여 로딩 시킨다.

Execution Engine: 로딩된 Class파일들을 해석한다.

Runtime Data Area: 해석된 프로그램이 배치되는 영역으로 프로그램을 수행하기 위해 OS에서 할당 받은 메모리 공간이다. 내부적으로 아래처럼 나뉜다.

  • Method Area: 클래스, 변수, 메서드, static변수, 상수 정보등이 저장되는 영역으로 모든 쓰레드가 공유한다.
  • Heap Area: new 명령어로 생성된 인스턴스와 객체가 저장되는 구역으로 가비지컬렉션은 이 영역에서 일어나며, 모든 쓰레드가 공유한다.
  • Stack Area: 메소드내에서 사용되는 값들이 저장되는 구역으로 각 쓰레드별로 하나씩 생성된다.
  • PC Register: 현재 수행중인 JVM 명령의 주소값이 저장되며 각 쓰레드별로 하나씩 생성된다.
  • Native Method Stack: 다른언어의 메서드 호출을 위해 할당되는 영역이다.

JDK와 JRE의 차이

JDK: JVM, 라이브러리 API, 컴파일러등의 개발도구가 포함된다.

JRE: JVM과 라이브러리 API만 포함한다.

자바 프로그램을 개발하고자 하면 JDK를 설치하고 개발된 자바 프로그램을 실행만 할 것이라면 JRE를 설치하면 된다.

Comments