반응형
- 해당 내용은 백기선 님의 자바 온라인 스터디 공부 및 제출 목적
-> https://github.com/whiteship/live-study/issues/1
목표
- 자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기.
학습할 것
- JVM이란 무엇인가
- 컴파일 하는 방법
- 실행하는 방법
- 바이트코드란 무엇인가
- JIT 컴파일러란 무엇이며 어떻게 동작하는지
- JVM 구성 요소
- JDK와 JRE의 차이
1. JVM이란 무엇인가
- 자바 가상 머신(Java Virtual Machine, JVM)은 자바 바이트코드를 실행할 수 있는 주체.
- Java 소스 코드는 javac 컴파일러로 거쳐 바이트코드로 변환되며, 이 바이트코드는 JRE에 들어있는 java classloader에 의해 JVM으로 적재되며, JVM은 적재된 바이트코드를 JIT 컴파일 방식으로 실행.
- JVM은 OS 독립적으로, JVM이 실행 가능한 환경이라면 어디서든 JAVA 프로그램을 실행시킬 수 있음.
2. 컴파일 하는 방법
- 컴파일(Compile)이란 어떤 언어의 코드를 다른 언어(컴퓨터가 이해할 수 있는)로 바꿔주는 과정.
- 컴파일을 하는 소프트웨어를 컴파일러(Compiler)라고 함.
- Java 컴파일을 하기 위해서는 Java JDK가 설치되어 있어야 함.
- 명령어 javac test.java
3. 실행하는 방법
- 컴파일을 진행하면 test.class 라는 이름의 파일이 생성됨.
- 이 파일(*.class)이 컴파일된 파일이며, java 실행 파일이라 할 수 있음.
- 이 파일로만 실행할 수 있는 것이 아니고, 컴파일된 파일을 실행시켜주는 프로그램을 이용해야 하는데, 이 작업을 하는 프로그램을 런처(launcher)라고 함.
- 명령어 java test
- 런처는 내부적으로 자바 가상 머신에서 작성한 코드가 동작하도록 하며, 프로그래밍한 이 프로그램은 최종적으로 JVM에서 동작하게 됨.
4. 바이트코드란 무엇인가
- 바이트코드(Bytecode)는 특정 하드웨어가 아닌 가상 컴퓨터에서 돌아가는 실행 프로그램을 위한 이진 표현법.
- 가상머신은 이 바이트코드를 각각의 하드웨어 아키텍처에 맞는 기계어로 다시 컴파일.
- Java Compiler에 의해 변환된 코드의 명령어 크기가 1바이트라서 자바 바이트 코드라고 불리며, 이러한 자바 바이트 코드의 확장자는 .class 이다.
5. JIT 컴파일러란 무엇이며 어떻게 동작하는가
- 정의
- 프로그램이 실행 중인 런타임에 실제 기계어로 변환해 주는 컴파일러.
- 동적 번역이라고도 불리며, 이 기법은 Java 프로그램의 실행 속도를 향상시키기 위해 개발. - - JIT 컴파일러는 Java 컴파일러가 생성한 자바 바이트 코드를 런타임에 바로 기계어로 변환하는대 사용.동작
- 동작- 실행 시점에는 인터프리트 방식으로 기계어 코드를 생성 하면서 그 코드를 캐싱.- 같은 함수가 여러번 실행 될 때 매번 기계어 코드를 생성하지 않고 바로 실행.
- - 사전에 정의된 임계치에서 시작하여 호출될 때마다 감소시키며 자주 사용되는 함수를 찾는다.
- - JIT 컴파일러는 인터프리트 방식과 정적 컴파일 방식을 혼합한 방식으로 동작.
6. JVM 구성 요소
- JVM은 다음과 같이 구성- 클래스 로더(class loader)- 가비지 컬렉터(Garbage Collector)
- - JIT 컴파일러(Just-In-Time compiler)
- - 자바 인터프리터(interpreter)
- 자바 인터프리터
- Java Compiler에 의해 변환된 자바 바이트 코드를 읽고 해석하는 역할. - 클래스 로더
- Java 는 동적으로 클래스를 읽으며, 프로그램이 실행 중인 런타임에서야 모든 코드가 JVM과 연결.
- 이러한 동적으로 클래스를 로딩해주는 역할. - JIT 컴파일러
- 프로그램이 실행 중인 런타임에 실제 기계어로 변환해 주는 컴파일러.
- 동적 번역이라고도 불리며, 이 기법은 Java 프로그램의 실행 속도를 향상시키기 위해 개발.
- JIT 컴파일러는 Java 컴파일러가 생성한 자바 바이트 코드를 런타임에 바로 기계어로 변환하는대 사용. - 가비지 컬렉터
- JVM은 GC(가비지 컬렉터, Garbage Collector)를 이용하여 더이상 사용하지 않는 메모리를 자동으로 회수.
- 이 기능을 통해 개발자는 따로 메모리를 관리하지 않아도 됨.
7. JDK와 JRE의 차이
- JRE
- JRE(자바 런타임 환경, Java Runtime Environment)은 Java Program을 실행시켜주는 환경을 구성해주는 도구.
- 자바 프로그램을 실행하는 데 필요한 모든 패키지. 하지만 새 프로그램은 개발할 수 없다.
- 일반인을 위한 자바 버전. - JDK
- JDK(자바 개발 도구, Java Development Kit)은 Java Program 개발에 필요한 툴킷을 제공하는 도구.
- 개발하며 실행을 해야 하기 때문에, JDK 안에 JRE가 포함.
- 개발자를 위한 자바 버전. - JVM = 클래스 로더 시스템 + 런타임 데이터 영역 + 실행 엔진
- JRE = JVM + Java 패키지 클래스 (util, math, lang, awt, etc...) + 런타임 라이브러리
- JDK = JRE + 개발 / 디버깅 툴
참고
- www.opentutorials.org/module/2495/13968
반응형
'Study > Java(Online-Study)' 카테고리의 다른 글
6주차 과제: 상속 (0) | 2021.07.17 |
---|---|
5주차 과제: 클래스 - 이론(1) (0) | 2021.06.27 |
4주차 과제: 제어문 - 이론(1) (0) | 2021.06.20 |
3주차 과제 : 연산자 (0) | 2021.06.19 |
2주차 과제 : 자바 데이터 타입, 변수 그리고 배열 (0) | 2020.11.20 |