일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- coding test
- docker
- 코딩 테스트
- 라우팅프로토콜
- Container
- Linux
- 코딩테스트
- 스노트 룰
- Router
- programmers
- 리눅스
- Cosmos
- OSI7계층
- TDD
- 스노트
- Routing
- osi7layer
- database
- 라우팅
- 트레바리
- MySQL
- Python
- 컨테이너
- 도커
- db
- 라우터
- Snort Rule
- 프로그래머스
- 데이터베이스
- snort
- Today
- Total
Simple is IT, 누구나 보고 누구나 깨닫는 IT
JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. 본문
JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가.
- JVM 이란
- 자바 코드 컴파일
- 자바 코드 실행
- 바이트코드란
- JIT 컴파일러란 무엇이며, 어떻게 동작하는가
- JVM 구성 요소
- JDK 와 JRE 의 차이
JVM 이란
JVM(Java Virtual Machine, 자바 가상 머신) 은 OS 위에서 동작하며, 컴퓨터가 Java Program 을 실행할 수 있도록 도와준다 .
이는 특정 OS 의 영향을 받지 않으면서 Java Program 을 실행할 수 있도록 하기 위함이다.
- OS 위에서 Java Program 을 실행할 수 있도록 도와준다.
- 이는 특정 OS 또는 하드웨어에 구애받지 않고, 코드를 동작시킬 수 있다는 것을 뜻한다.
- Byte code 를 실행한다.
JVM 에 대한 흥미로운 배경
JAVA 는 썬 마이크로시스템즈의 제임스 고슬링이라는 사람과 다른 연구원들이 개발한 프로그래밍 언어다.
처음에는 가전제품 내에 탑재해 동작하는 프로그램을 위해 개발했다. (현재는 어플리케이션 개발에 많이 사용하지만 ㅎㅎ)
이유는 유닉스 기반의 배경을 갖고 있던 당시 주로 사용하던 C/C++ 언어의 특성 상 여러 하드웨어를 커버하기에 같은 기능의 소스를
각 하드웨어에 맞게 작성해야하는 번거로움이 있었기 때문에 어떤 하드웨어건 상관없이 돌아가는 언어를 만들고자 했다.
자바 코드 컴파일
jdk bin 디렉토리 하위에 위치한 javac 프로그램으로 Java code(.java) 형태의 파일을 실행한다.
이 과정에서 컴파일러가 Java code(.java) 를 JVM 이 인식할 수 있는 형태의 Byte code(.class) 로 변환한다.
# javac [java-file]
자바 코드 실행
jdk bin 디렉토리 하위에 위치한 java 프로그램으로 Byte code(.class) 형태의 파일을 실행한다.
# java [class-file]
바이트코드란
- JVM 이 이해할 수 있는 형태로 변환한 자바 코드를 의미한다.
- Compiler 에 의해 변환되는 코드의 명령어 크기가 1 byte 라서 바이트코드라 불리운다.
- 확장자명은 .class 이다.
- JVM 이 설치되어 있다면, 어떤 OS 에서도 해당 .class 파일을 실행할 수 있다.
JIT 컴파일러란 무엇이며, 어떻게 동작하는가
Just-In-Time compilation 또는 Dynamic translation 은 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법이다.
기존에 우리가 알고 있던 인터프리트 방식과 컴파일 방식을 혼합한 방식으로 생각할 수 있다. 실행 시점에 인터프리트 방식으로 기계어 코드를 생성하며, 해당 코드를 캐싱하고 같은 함수가 여러 번 불릴 때 매번 기계어 코드를 생성하는 것을 방지한다.
- 프로그램이 실행 중인 런타임에 기계어로 변환해 주는 컴파일러다.
- dynamic translation 이라고도 불리는데, 프로그램의 실행 속도 향상을 위해 개발되었다고 한다.
*Interpret 방식 : 실행 중 프로그램 코드를 읽어가며 해당 기능에 대응하는 기계어 코드를 실행한다.
*Compile 방식 : 실행 전에 프로그램 코드를 기계어로 번역한다.
JVM 구성 요소
Interpreter
Java compiler 에 의해 변환된 Byte code 를 읽고 해석하는 역할을 한다.
Class loader
동적으로 클래스를 로딩해준다.
자바는 동적으로 클래스를 읽어오고, 프로그램이 실행 중인 런타임에서 모든 코드가 JVM 과 연결된다.
이때, 변환된 클래스를 읽어들여 Runtime Data Area 에 적재한다.
JIT(Just-In-Time) Compiler
- 위 'JIT 컴파일러란 무엇이며, 어떻게 동작하는가' 확인
Garbage collector
JVM 에서 더는 사용하지 않는 메모리를 자동으로 회수해 주는 역할을 한다.
개발자가 메모리 관리를 따로 안 해도 돼서 개발에만 집중할 수 있도록 도와준다.
JDK 와 JRE 의 차이
JRE(Java Runtime Environment)
컴파일된 자바 프로그램을 실행할 수 있는 자바 환경
- JVM 이 자바 프로그램을 동작시킬 때 필요한 파일을 갖고 있다. (라이브러리 등)
- 자바 프로그램 실행을 위해선 JRE 가 필요하다.
- 프로그래밍 도구는 없기에 프로그래밍을 위해선 JDK 가 필요하다.
JDK(Java Development Kit)
자바 프로그래밍 시 필요한 도구
- JDK 를 설치하면 JRE 도 함께 설치된다.
- 자바 개발을 위한 프로그램(javac, java)이 포함된다.
요약
- JDK = JRE + @
- JRE : Read only, JDK : Read / Write
궁금증이 해소되지 않은 부분
- Runtime Data Area 는 무엇인가?
- Runtime Data Area 는 어떻게 데이터를 적재하는가?
- JIT 는 무엇인가?
- JIT 가 Byte code 를 Native code 로 변환하는 과정은 어떻게 진행되는가?
'Simple is IT > Programming' 카테고리의 다른 글
ERROR: Cannot find symbol method "Getter" (0) | 2021.11.24 |
---|---|
Rest API Architecture(작성 중) (0) | 2021.11.07 |
값 객체 패턴(value object pattern) - 미완성 (0) | 2021.08.26 |
Compile, Interpret | 컴파일과 인터프릿은 어떤 차이일까? (0) | 2020.09.02 |
[Github] 파이썬을 파이썬답게 작성하는 코드를 만들자! (0) | 2020.08.31 |