본문 바로가기
JAVA

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

by e-pd 2020. 11. 17.

github.com/whiteship/live-study/issues/1

 

1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. · Issue #1 · whiteship/live-study

목표 자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기. 학습할 것 JVM이란 무엇인가 컴파일 하는 방법 실행하는 방법 바이트코드란 무엇인가 JIT 컴파일러란 무엇이며 어떻게 동작하는지 JV

github.com

JVM이란 무엇인가

Java Virtual Machine(JVM)은 운영체제에 상관없이 자바 프로그램을 실행하기 위한 가상 머신이다.

 

 

컴파일 하는 방법

실행하는 방법

1
2
3
4
5
6
7
8
package hello;
 
public class Main {
 
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}



cs

자바 파일을 생성한다 

javac ./Main.java

 

javac 명령어를 사용하면 class 파일을 얻을 수 있다.

 

 

이름은 .java 파일과 동일하고 .class파일에는 바이트코드가 들어있다.

javac -d 를 주면 클래스 파일을 저장할 경로를 지정할 수 있다.

 

java Main

 java 명령어를 통해 바이트코드를 실행할 수 있다

참고 ) C와 같은 언어에서는 컴파일을 하면 실행파일이 나온다. 실행파일은 기계어이고, 운영체제가 직접실행한다.

운영체제, 디바이스에 종속적이다. 


바이트코드란 무엇인가

운영체제, 디바이스가 이해하는 기계어가 아닌 JVM이 이해하는 명령어

JVM이 실행 중에 최종 플랫폼에 맞는 명령어로 바꿔 실행


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

Just-in-time-compilation(JIT)은 프로그램을 실행하는 시점에 기계어로 변환을 한다.

인터프리터는 반복되는 코드를 네이티브코드로 바꿔, 네이이티브 코드를 사용한다

 

JVM 구성 요소

클래스 로더 

  • class 파일에서 바이트코드를 읽어와 메모리에 저장
  • 초기화과정에서 static의 값 초기화 및 변수 할당
  • 여기서 레퍼런스를 연결하는 과정을 링킹(링크)라고 한다.

 

JVM Memory

  • Method Area는 클래스 정보
  • 힙 영역에는 객체의 정보
  • 스택 영역에는 쓰레드마다 런타임 스택이 생김. 쓰레드 안에 frame이 존재하며 frame 안에는 메소드 상태 정보가 생긴다.

 

Excute Engine

바이트 코드를 실행하는 인터프리터, JIT 컴파일러가 존재

 

Native Method Libraries : 자바가아닌 C, C++로 구성된 라이브러리이고 JNI를 통해 로드할 수 있다.

https://stackoverflow.com/questions/2860642/java-difference-between-library-and-native-library


JDK와 JRE의 차이

Java Runtime Environment(JRE)

자바를 실행시키기 위한 파일을 가지고 있다

Java11 부터 오라클에서 JRE를 제공하지 않는다

 

Java Development Kit (JDK)

자바 소프트웨어를 개발하기 위한 툴을 모아둔 패키지

JRE를 포함한다 

 

 

 

'JAVA' 카테고리의 다른 글

연산자  (0) 2020.11.22
자바 데이터 타입, 변수 그리고 배열  (0) 2020.11.17
Interface default methods  (0) 2020.10.19
Java8 Function  (0) 2020.10.18
Garbage Collection  (0) 2020.09.04