Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

보근은 참고 있다

1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. 본문

Language/자바 정리 할래

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

보근 2020. 11. 10. 01:34

 

 

 

 

 

 

 

  • JVM이란 무엇인가
  • 컴파일 하는 방법
  • 실행하는 방법
  • 바이트코드란 무엇인가
  • JIT 컴파일러란 무엇이며 어떻게 동작하는지
  • JVM 구성 요소
  • JDK와 JRE의 차이

 

 

 

 

 

 

 

 

 

 먼저 자바 코드가 실행되는 과정은,

 

  1. 자바로 작성한 모든 코드들은 .java를 확장자로 하는 기본 텍스트 파일에 쓰여진다.
  2. 이 코드들은 javac 컴파일러에 의해 .class 파일로 컴파일 된다.
  3. .class 파일에 쓰여진 기계어들은 프로세서의 명령어가 아닌, jvm의 기계어인 바이트코드이다.
  4. 그 바이트코드를 jvm이 해석해 프로그램이 실행된다.

 

 

 

 

 

 

 

 

JVM이란 무엇인가

 

 JVM(Java Virtual Machine)이란, 자바를 실행하기 위한 가상 머신이다. 자바 애플리케이션은 모두 이 jvm을 통해 실행이 되기 때문에 자바 애플리케이션이 실행되려면 반드시 jvm이 필요하다.

 

  • 자바 애플리케이션은 jvm 위에서 동작하기 때문에 jvm에 종속적이나, os와 하드웨어에 종속적이지 않다. 그렇기 때문에, 서로 다른 os나 하드웨어 환경에서도 프로그램의 변경없이 실행이 가능하다.
  • 자바 애플리케이션은 일반 애플리케이션과 비교해 jvm을 한 번 더 거치고 또, jvm이 프로그램 실행시에 인터프리터로 바이트코드를 한 줄씩 실행하기 때문에 속도가 느리다는 단점이 있다. (JIT 컴파일러로 속도의 갭을 줄인다.)
  • jvm은 내부의 GC(Garbage Collector)로 사용되지 않는 메모리를 정리해 메모리 관리를 해준다.

 

 

 

 

 

 

컴파일, 실행하는 방법

 

 

 

1. 먼저 소스 코드를 작성한다. (.java)

 

 

 

2. javac 컴파일러를 사용해 바이트코드로 컴파일한다. (.class)

 

javac로 소스파일 컴파일
Hello.class 파일이 생김
Hello.class 파일

 

3. java 명령어로 프로그램을 실행한다.

 

실행된 결과

 

 

 

 

 

 

 

 

 

바이트코드란

 

 프로세서가 이해하는 언어를 기계어라고 한다면, 바이트코드란 가상 머신이 이해하는 언어이다. 소스 파일을 컴파일하면 나오는 것이 바이트코드이다.

 

 

 

 

 

 

 

 

JIT 컴파일러란

 

 JIT(Just In Time) 컴파일이란, 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법이다. jvm에서는 프로그램 실행 시점에 바이트코드를 한 줄씩 실행하는 과정에서 실행한 코드들을 캐싱하여, 중복되는 코드들을 중복 생성하는 것을 방지한다.

 

 

 

 

 

 

JVM의 구성 요소

 

 jvm의 구성 요소는 크게 세 군데로 나눌 수 있다. 클래스 로더, 메모리 영역, 실행 엔진이다.

 

 

 자바는 동적 로드를 하기 때문에, 프로그램 실행 시점에 필요한 클래스를 처음 참조할 때마다 클래스를 로드하고 링크한다. 그럴 때 바이트코드를 읽어 클래스를 로더해 오는 것이 클래스 로더이다. 물론 static은 컴파일 시점에 (인스턴스가 생성되기 전에) 다 읽어서 메모리에 올려둔다.

 

 메모리 영역은 프로그램이 실행되면서 jvm이 운영체제로부터 할당받은 메모리 공간이다. 스택 영역, PC, 네이티브 메소드 스택, 힙 영역, 메소드 영역이 있는데, 이 중 스택, PC, 네이티브 메소드 스택은 쓰레드마다 하나씩 생성된다. 그 외의 메모리 영역은 모든 쓰레드가 공유한다.

 

 실행 엔진은 바이트코드를 읽고 실행하는 역할을 한다. 실행 엔진은 인터프리터와 JIT 컴파일러가 있다. 먼저 인터프리터는 바이트코드를 한 줄씩 읽고 실행해준다. JIT 컴파일러는 인터프리터가 실행한 코드를 캐싱하여 중복된 코드가 나올 때, 중복 번역을 방지해서 속도를 보안해준다.

 

 

 

 

 

 

 

JDK와 JRE의 차이

 

 먼저 JRE(Java Runtime Environment)는 말 그대로 자바 애플리케이션을 실행할 수 있도록 해주는 환경이다. 당연히 jvm이 포함되어 있으며, 개발 관련된 도구는 없다.

 

 JDK(Java Development Kit)는 역시 말 그대로 자바 애플리케이션을 개발할 수 있도록 해주는 도구이다.

 

 

 

 

 

 

 

 

 

 

'Language > 자바 정리 할래' 카테고리의 다른 글

6주차 과제: 상속  (0) 2020.12.21
5주차 과제: 클래스  (0) 2020.12.19
4주차 과제: 제어문  (0) 2020.12.12
3주차 과제: 연산자  (0) 2020.11.24
2주차 과제: 자바 데이터 타입, 변수 그리고 배열  (0) 2020.11.18
Comments