1주차 : JVM은 무엇이며 자바 코드는 어떻게 실행되는가?
JAVA 프로그램
컴파일 방법
- IDE 사용
- IDE의 문법 검사 그 자체가 컴파일이라고 볼 수 있음
- 잘못된 코드 작성 -> 컴파일 에러
- 커맨드에서 javac 명령어 사용
1. 커맨드 창에서 .java 파일이 있는 디렉터리로 이동
2. javac (.java 파일명)
- 결과로 .class 파일 (바이트코드) 만들어짐
- 커맨드에서 컴파일 할 시 다양한 컴파일 옵션을 사용할 수 있음
바이트코드
고급 언어(자바, 코틀린 등)와 기계어의 중간 언어
- 1 byte 크기의 명령어 -> 최대 255개의 명령어를 쓸 수 있음
- JVM만 있으면 OS에 상관없이 실행할 수 있음 -> OS 독립적
- 어떤 프로그래밍 언어로 작성하든 바이트코드로 컴파일만 할 수 있으면 JVM을 통해 실행 할 수 있음
- WORA (Write Once Run Anywhere)
: 한번 작성해서 바이트코드로 컴파일하여 배포하면 어디서든지 실행할 수 있다.
실행 방법
- IDE 사용 - 빌드, 컴파일, 실행 한번에 할 수 있음
- 커맨드에서 java 명령어 사용
1. 커맨드에서 .class 파일이 있는 디렉터리로 이동
2. java (.class 파일명) -> 자바 프로그램 실행
JVM (Java Virtual Machine)
JVM이란?
바이트코드를 (플랫폼에 맞는 기계어로) 컴파일하여 실행시켜주는 가상 머신
- JVM은 플랫폼에 의존적임
- 플랫폼 : OS + CPU 아키텍처
JVM 구성 요소
- IDE의 문법 검사 그 자체가 컴파일이라고 볼 수 있음
- 잘못된 코드 작성 -> 컴파일 에러
1. 커맨드 창에서 .java 파일이 있는 디렉터리로 이동
2. javac (.java 파일명)
- 결과로 .class 파일 (바이트코드) 만들어짐
고급 언어(자바, 코틀린 등)와 기계어의 중간 언어
- WORA (Write Once Run Anywhere)
: 한번 작성해서 바이트코드로 컴파일하여 배포하면 어디서든지 실행할 수 있다.
1. 커맨드에서 .class 파일이 있는 디렉터리로 이동
2. java (.class 파일명) -> 자바 프로그램 실행
JVM이란?
바이트코드를 (플랫폼에 맞는 기계어로) 컴파일하여 실행시켜주는 가상 머신
- JVM은 플랫폼에 의존적임
- 플랫폼 : OS + CPU 아키텍처
JVM 구성 요소
Class Loader System
런타임 시 바이트코드(.class) 파일을 JVM 내 Runtime Data Areas(memory)에 배치하는 시스템
- 작동 과정
- 로딩
- 클래스 파일을 JVM 메모리에 로드
- 링크
- 검증
- 클래스 파일이 자바 및 JVM 명세에 명시된 대로 작성되었는지 검증
- 준비
- 분석
- 검증
- 초기화
- static 변수를 초기화
- 계층 구조
- BootStrap class loader
- 핵심 자바 API를 로드 (ex. Object Class)
native code
로 구성
* native code : CPU나 OS가 직접 실행할 수 있는 코드
- Extension class loader
- 기본 API를 제외한 확장 클래스들을 로드함
- System class loader
- 애플리케이션의 클래스들을 로드함
Runtime Data Areas (Memory)
자바 프로그램을 실행하기 위해 OS로부터 할당받은 메모리 공간
- 구성
- Stack
- Heap
- Method (Class)
- PC registers
- Native Method Stack
Execution Engine
바이트코드를 명령어 단위로 읽어서 실행하는 기능
Java Native Method Interface(JNI)
C, C++, 어셈블리어로 작성된 Native 키워드를 사용하는 메소드를 사용할 수 있도록 해주는 인터페이스
JIT 컴파일러
런타임 시 반복적으로 사용되는 코드(바이트코드)를 컴파일 해주는 것
- 반복적인 코드를 미리 컴파일하여 캐싱함으로써 실행 속도를 향상시킴
- 인터프리터의 한 줄씩 읽어서 실행하는 느린 속도를 보완
출처: https://aboullaite.me/understanding-jit-compiler-just-in-time-compiler/
JRE vs JDK
JRE
JVM + 자바 라이브러리
JDK
JRE + 개발 도구
- 현재는 구분이 없어짐
Author And Source
이 문제에 관하여(1주차 : JVM은 무엇이며 자바 코드는 어떻게 실행되는가?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@jjb8966/1주차-JVM은-무엇이며-자바-코드는-어떻게-실행되는가
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
JVM + 자바 라이브러리
JRE + 개발 도구
Author And Source
이 문제에 관하여(1주차 : JVM은 무엇이며 자바 코드는 어떻게 실행되는가?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jjb8966/1주차-JVM은-무엇이며-자바-코드는-어떻게-실행되는가저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)