728x90

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

Todo.

  1. JVM이란 무엇인가?
  2. 컴파일 하는 방법.
  3. 실행하는 방법.
  4. 바이트 코드란 무엇인가?
  5. JIT 컴파일러란 무엇이며 어떻게 동작하는지?
  6. JVM 구성요소
  7. JDK와 JRE의 차이

1-1 JVM이란 무엇인가?

-> JVM은 Java Virtual Machine의 줄임말로 자바 가상 머신을 의미하며 다양한 OS에 있어서 관계없이 java 코드를 실행할 수 있도록 하는 것이며 GC(Garbage Collection)등의 기능을 제공하는 것이다.

 

1-2 컴파일 하는 방법

컴파일 이란? .java 파일을 .class파일로 변환하는 과정을 의미한다.

기본적으로 cmd에서 "javac" 명령어를 통해 사용한다. 여기서 여러 옵션이 있으니 찾아보면 좋을 듯하다.

1-3 실행하는 방법.

실행하는 방법은 "java" 명령어를 사용하여 class 파일을 실행시킨다.

1-4 바이트 코드란 무엇인가

프로그램을 실행하기 위해서 JVM이 이해할 수 있는 형태로 번역을 해서 전해줘야 한다. 일반적으로 java 파일은 단지 확장자가 java인 Text파일 이므로 자바 컴파일러로 변화되는 코드의 명령어 크기가 1바이트라서 바이트코드라고 한다고 함.

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

JIT : Just In Time 컴파일러로 바이트 코드를 기계어로 번역하는 것을 의미한다. 기본적으로 인터프리터 방식은 바이트코드를 한 줄씩 읽으면서 코드를 실행시키기에 동일한 메소드를 중복 실행 시키는 비효율이 있기에 JIT는 런타임시 바이트 코드를 네이티브 기계어로 한번에 컴파일 후에 캐싱을 통해 사용한다.

1-6 JVM 구성요소

JVM 구조

JVM의 구조

  • Class Loader(클래스 로더)
    • JVM내로 클래스를 로드하고 링크를 통해 배치한다. 실행시 동적으로 클래스를 로드하며 사용하지 않는 클래스는 메모리에서 제거함.
  • Execution Engine(실행 엔진)
    • 클래스 로더에서 분석된 클래스 파일의 데이터를 저장하고 실행 도중에 필요한 데이터를 저장하고 실행 도중에 필요한 데이터를 실행
    • Interpreter, JIT Compiler, Garbage Collector 등이 있음.
  • Runtime Data Area
    • 5가지 영역으로 나뉜다
      1. Method 영역 : 모든 클래스 레벨의 데이터는 이곳에 저장된다. JVM은 오직 하나의 메서드 영역만 가지고 자원을 공유한다.
      2. Heap 영역 : 모든 objects들과 인스턴스 변수, 배열은 이곳에 저장된다. 이 또한 하나의 힙 영역만 가지고 있음.
      3. Stack 영역 : 모든 스레드에 대하여 저장이 되고 메서드가 종료되면 공간에서 삭제된다.
      4. PC 레지스터
      5. Native Method 스택

1-7 JDK와 JRE의 차이

JDK : Java Development Kit

JRE : Java Runtime Environment

의 차이로 JRE는 JVM과 클래스 라이브러리와 같이 실행환경을 의미하고,  JDK는 JRE와 함께 개발에 필요한 SW를 모아둔 것이다.

 

#Reference

1. adnjavainterview.blogspot.com/2017/04/java-vertual-machinejvm-architecture-in.html

2. https://azderica.github.io/00-java-jvm/

3. gblee1987.tistory.com/173

4. blog.naver.com/hsm622/222138523668

728x90

+ Recent posts