목표
자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기.
학습할 것
- JVM이란 무엇인가
- 컴파일 하는 방법
- 실행하는 방법
- 바이트코드란 무엇인가
- JIT 컴파일러란 무엇이며 어떻게 동작하는지
- JVM 구성 요소
- JDK와 JRE의 차이
JVM이란 무엇인가
JVM이란 JAVA Virtual Machine, 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다.
JVM 역할은 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 것이다.
그리고 JAVA와 OS사이에서 중개자 역할을 수행하여 JAVA가 OS에 구애받지 않고 재사용을 가능하게 해준다.
JVM 구성
Class Loader
- Runtime 시점에 class를 로딩하게 해주며 클래스의 인스턴스를 생성하면 클래스 로더를 통해 메모리에 로드한다.
- jar파일 내 저장된 클래스들을 JVM위에 탑재하고 사용하지 않는 클래스들은 메모리에서 삭제한다.
Runtime Data Areas
- JVM이 프로그램을 수행하기 위해 OS로 부터 별도로 할당받은 메로리 공간
- PC Register : CPU가 Instruction을 수행하는 동안 필요한 정보를 저장
- JVM Stack : Thread가 시작될 때 생성되며 Method와 Method 정보 저장
- Native Method Stack : Java 이외의 언어로 작성된 native 코드를 위한 Stack
- Method Area : 모든 쓰레드가 공유하는 메모리 영역(클래스, 인터페이스, 메소드, 필드 static 변수등의 바이트 코드 등을 보관)
- Heap : 런타임시 동적으로 할당하여 사용하는 영역 class를 통해 instance를 생성하면 Heap에 저장됨
Execution Engine
- Load된 Class의 ByteCode를 실행하는 Runtime Module
- Class Loader를 통해 JVM 내의 Runtime Data Areas에 배치된 바이트 코드는 Execution Engine에 의해 실행된다.
Garbage Collector
- 자바는 메모리 관리를 사용자가 아닌 JVM이 알아서 해준다.
- GC(Garbage Collector)는 더이상 참조되지 않는 메모리를 정리해준다.
컴파일 하는 방법, 실행하는 방법
컴파일 한다는 것은 .java 파일을 .class 파일로 만드는 것을 의미한다.
JDK (Java Development Kit) 자바 개발 도구를 설치하면 bin 폴더 안에 javac라는 java compiler가 포함되어 있다.
이 명령을 사용해서 .class 파일을 만든다.
cmd 창에서 해당 java 파일이 있는 곳으로 이동 후 javac 파일.java 명령을 실행하면 파일.class 파일이 생성된다.
다음으로 java 파일 명령을 실행시키면 class 파일이 실행된다.
.class 파일을 자바 바이트 코드라고 부른다. 자바 바이트 코드는 클래스 로더에 의해서 JVM 내로 로드 되고, 실행 엔진에 의해 기계어로 해석되어 메모리 상(Runtime Data Area)에 배치된다.
바이트코드란 무엇인가
자바 문법으로 작성한 .java 파일은 사람이 이해할 수 있는 언어로 작성했기 때문에 컴퓨터는 이해할 수 없다.
그렇기 때문에 번역을 통해 컴퓨터가 이해할 수 있는 형태로 만들어 줘야한다.
컴퓨터가 이해할 수 있는 형태로 번역하는 것은 JVM이 담당한다.
그럼 우리는 JVM이 이해할 수 있는 형태로 번역을 해서 전해줘야한다.
이때 이 JVM이 이해할 수 있는 형태가 바이트코드이다.
위에서 보았듯이 javac 파일.java 명령어를 이용해서 .class 파일을 생성하는데 이때 이 .class 파일이 바이트 코드이다.
JIT 컴파일러란 무엇이며 어떻게 동작하는가
JIT 컴파일러는 Just In Time 컴파일러로 바이트코드를 기계어로 번역하여 실행하는 것을 뜻한다.
실행엔진에는 Interpreter와 JIT(Just-In-Time) Compiler가 있다. Interpreter는 바이트 코드를 할줄씩 읽기 때문에 느린 단점이 있다. 이러한 단점을 보완하기 위해서 JIT Compiler가 나왔다. 인터프리터 방식으로 실행하다가 적절한 시점에 바이트 코드 전체를 컴파일 하고 더이상 인터프리팅 하지 않고 해당 코드를 직접 실행하는 것이다. JIT Compiler에 의해 해석된 코드는 캐시에 보관하기 때문에 한 번 컴파일 된 후에는 빠르게 수행하는 장점이 있다.
하지만 인터프리팅 방식보다는 훨씬 오래 걸리므로 한번만 실행하면 되는 코드는 인터프리팅하는것이 유리하다.
JDK 와 JRE의 차이
자바 세가지 에디션
- Java SE(Standard Edition) Java vm과 표준 api 등을 정리한 가장 표준적인 버전이다. PC나 서버 등에서 동작하는 애플리케이션을 개발 및 실행하는 경우에 사용한다.
- Java EE(Enterprise Edition) 웹 서비스나 서버 간 통신, 메일 송신 등 서버 애플리케이션에 필요한 기능이 많이 포함되어 있다.
- Java ME(Micro Edition) 가전제품과 휴대전화 등의 임베디드 시스템용의 애플리케이션을 개발하기 위한 에디션이다. Java SE에 비해 사용할 수 있는 기능이 한정되어 있지만 필요한 리소스(CPU나 메모리 등)가 적게 들어 임베디드 시스템 등에서도 잘 동작한다. 또한 자바는 실행 환경 (JRE) 및 개발 환경 (JDK)의 두가지로 나누어져 있다.
JDK(Java Development Kit) : 자바 개발자 도구
- 자바 애플리케이션의 개발 환경이다. 실행 환경뿐만 아니라 소스 파일의 컴파일러 및 디버거 등 자바 애플리케이션을 개발하기 위한 도구가 포함되어 있다.
JRE(Java Runtime Environment) : 자바 실행 환경
- 자바 애플리케이션의 실행 환경이다. 이미 컴파일된 자바 애플리케이션의 모듈(JAR 파일과 클래스 파일 등)을 이용하여 실행할 수 있다.
JAR 파일 - 자바 프로젝트 압축 파일
정리하자면 자바 언어로 프로그램을 개발하기 위해서는 JDK가 필요하고 자바 언어로 작성된 프로그램을 실행하기 위해서는 JRE가 필요하다. JDK에는 JRE가 포함되어 있다.
출저
- blog.naver.com/hsm622/222138523668
- jeongjin984.github.io/posts/JVM/
- github.com/league3236/startJava/blob/master/live_study/week1.md
- asfirstalways.tistory.com/158
'JAVA > Study' 카테고리의 다른 글
백기선님 자바 스터디 11주차 - Enum (0) | 2021.01.31 |
---|---|
백기선님 자바 스터디 9주차 (0) | 2021.01.18 |
백기선님 자바 스터디 8주차 - Interface (0) | 2021.01.10 |
백기선님 자바 스터디 7주차 (0) | 2020.12.27 |
백기선님 자바 스터디 6주차 (0) | 2020.12.26 |