자바 스터디 할래 1주차 과제 JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가.

2020. 12. 20. 20:18Java

[목표]
-> 자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기.

[학습할 것]
1) JVM이란 무엇인가
-> JVM(Java Virtual Machine=자바 가상머신)이다. JVM은 자바 프로그램을 실행시키는 있어서 런타임 환경을 제공해주는 꼭 필요한 프로그램이다. 
2) 컴파일 하는 방법

-> JAVA를 컴파일하는 방법은 아래와 같이 명령어로 실행한다.  
 javac <program name> 

Java프로그램을 작성하였다. 

자바 소스

java 소스 파일이 들어있다.

 

아래와 같이 javac Test.java 명령어를 실행해서 컴파일을 실행한다. 컴파일을 하면 Test.class에 바이트코드로 작성된 클래스파일이 생긴다. 

3) 실행하는 방법

-> 자바를 실행하는 방법은 아래 명령어와 같다. 

java <arguments> <program name> 

자바를 실행하니 결과를 볼수 있다!! 


4) 바이트코드란 무엇인가 ?
-> 바이트 코드란 JVM이 이해할수 있는 자바 소스코드입니다. 자바 컴파일러에 의해서 변환됩니다. 

5) JIT 컴파일러란 무엇이며 어떻게 동작하는지
->JIT 컴파일러는 인터프리터 방식으로 실행하다가 적절한 시점에 바이트코드 전체를 컴파일하여 네이티브 코드로 변경하고 이후에는 더이상 인터프리팅하지 않고 네이티브 코드로 직접 실행하는 방식이다. 
(참고 : asfirstalways.tistory.com/158

[실행 엔진]
실행 엔진은 클래스 로더가 JVM 내의 런타임 데이터 영역에 배치한 바이트코드를 실행하는 역할을 한다. 자바 바이트코드는 완벽한 기계어가 아니라 실행 엔진에 의해 기계어로 변경되는데 그 방법은 두 가지가 있다.

  • 인터프리터 : 바이트코드 명령어를 하나씩 읽어 해석하고 실행한다. 하나씩 해석하고 실행하기 때문에 바이트코드 하나하나의 해석은 빠르나 결과의 실행은 느리다는 단점이 있다. 바이트코드라는 언어는 기본적으로 인터프리터 방식으로 동작한다. (한 줄씩 해석한다는 식의 표현을 하곤 하는데 자바의 실행 엔진은 바이트코드를 명령어 단위로 읽어서 실행하기 때문에 이 표현은 이 포스팅엔 적절치 않다고 생각한다)

JIT(Just In Time) 컴파일러 : 인터프리터 방식의 단점을 보완하기 위해 도입된 것이다. 인터프리터 방식으로 실행하다가 적절한(?) 시점에 바이트코드 전체를 컴파일하여 네이티브 코드로 변경하여 캐시에 저장한 후 직접 실행하는 방식이다.

출처: https://odol87.tistory.com/5 [IT 인생]

6) JVM 구성 요소(참조 : odol87.tistory.com/5 )

1) 클래스 로더
클래스 로더가 바이트코드를 런타임 데이터 영역에 로드하고, 실행 엔진이 바이트 코드를 실행하는 구조이다. 

2) 런타임 데이터 영역


런타임 데이터 영역은 운영체제 위에서 실행되면서 할당받는 메모리 영역이다. 

 


7) JDK와 JRE의 차이
(참조 :
www.itworld.co.kr/news/110817 
www.itworld.co.kr/news/110768  )

 

JDK(Java Development Kit) 
-> 자바 애플레케이션을 구축하기 위한 핵심 플랫폼 구성요소다. 이 중심에는 자바 컴파일러( Compiler)가 있다. 
JDK는 자바 가상 머신(Java Virtual Machine, JVM), 그리고 자바 런타임 환경(Java Runtime Environment, JRE)과 함께 자바 프로그래밍에 사용되는 3대 핵심 기술 패키지 가운데 하나다. 

JRE(Java Runtime Environment)
-> 런타임 환경이란
소프트웨어 프로그램을 실행하기 위해서는 실행할 환경이 필요하다. 런타임 환경은 프로그램 실행을 위해 클래스 파일을 로드하고 메모리 및 기타 시스템 리소스에 대한 액세스를 확보한다. 과거에는 대부분의 소프트웨어가 운영체제를 런타임 환경으로 사용했다.

프로그램은 해당 프로그램이 위치한 컴퓨터 내에서 실행됐지만 리소스 액세스는 운영체제 설정에 의존했다. 여기서 리소스란 메모리, 프로그램 파일, 종속성 등이다. 자바 런타임 환경은 적어도 자바 프로그램에 있어서는 이런 틀을 완전히 바꿔 놓았다.


JDK와 JRE의 차이점  
-> JDK가 자바 기반 소프트웨어를 개발하기 위한 도구들로 이뤄진 반면, JRE는 자바 코드를 실행하기 위한 도구들로 구성된 패키지라는 점이다.