백기선 선생님과 함께하는 JAVA스터디 1주차
학습할 것
JVM이란 무엇인가
컴파일 하는 방법
실행하는 방법
바이트코드란 무엇인가
JIT 컴파일러란 무엇이며 어떻게 동작하는지
JVM 구성요소
JDK와 JRE의 차이
백기선 선생님과 함께 하는 JAVA 스터디-Youtube
JVM이란 무엇인가
- 우선 자바가 다른 언어와 확실히 구분되는 특징은 한 번 작성하면 어디서든 실행된다는 것이다. 한 번 만든 애플리케이션들은 어떤OS에서도 동일하게 동작한다는 의미이다. 다른 언어들의 경우에는 각각 OS의 특징에 맞도록 다시 개발을 해야하는 불편함이 있었다. 그래서 이런 문제점들을 해결하기 위해서 나온게 JVM이라는 일종의 가상 서버이다.
- JVM이 OS와 프로그램 자체의 매개체 역할을 하면서 애플리케이션은 JVM 위에서 동작하도록 설계되었다.
- JVM에서는 가비지 컬렉터(GC)라는 일종의 메모리 관리 프로세스가 동작한다. GC는 보통 자동으로 동작하기 때문에 크게 신경 쓸 필요는 없다.
컴파일 하는 방법
- 컴파일이란 사람이 이해하는 언어를 컴퓨터가 이해할 수 있는 기계어로 바꾸는 것을 의미한다.
- 개발할 파일 확장자는 '.java'이고 이 파일이 자바 컴파일러를 거치면서 컴파일이 되면 '.class'파일이 생성이 된다. 이렇게 컴파일 과정을 거쳐서 생성된 클래스 파일은 JVM에서 실행 가능한 것이다.
- CLI >
javac *.java
실행하는 방법
- 자바 컴파일러를 통해서 .java파일을 .class파일로 변환한다.
- 클래스 로더를 통해서 .class 파일을 가져온다.
- 바이트 코드를 검증하고 검증이 끝난 바이트 코드를 binary code로 변환시킨다.
- Runtime 실행된다.
바이트 코드란 무엇인가
- 바이트 코드란, 쉽게 말하면 JVM이 이해할 수 있는 언어로 변환된 코드이다. 자바 컴파일러에 의해서 변환된 코드 명령어 크기가 1바이트라서 바이트 코드라고 불리고 있다.
- 이러한 바이트 코드의 확장자가 위에서 말했듯 .class이다.
JIT 컴파일러란 무엇이며 어떻게 동작하는가
- JIT란, Just In Time을 뜻한다.
- JAVA는 인터프리터 방식의 컴파일을 사용하는데 여기서 자바 컴파일러는 JAVA파일을 ByteCode로 변환하고 다시 기계어로 변환을 해야한다는 문제가 있다.
- 그래서 생겨난 것이 JIT 컴파일러이다.
- JIT는 실행하는 시점에 자주 사용하는 코드를 기계어로 변환을 해두었다가, 이미 변환된 기계어 코드를 재사용하는 방식이다.
- 초반에는 메모리를 차지하는 등 작업을 해야하기 때문에 시간이 조금 오래 걸릴 수는 있지만, 그 이후로는 빠른 속도향상을 볼 수 있다.
JVM 구성요소

JDK와 JRE의 차이
- 먼저 JRE는 자바 애플리케이션을 실행하기 위한 최소의 환경을 뜻한다. 즉 JRE에는 JVM과 기본 API들로 구성되어 있다.
- JDK는 JRE에서 제공하는 실행 환경 뿐만 아니라 자바 개발에 필요한 여러 가지 명령어가 포함된다.
