github.com/whiteship/live-study/issues/1
JVM이란 무엇인가
Java Virtual Machine(JVM)은 운영체제에 상관없이 자바 프로그램을 실행하기 위한 가상 머신이다.
컴파일 하는 방법
실행하는 방법
1
2
3
4
5
6
7
8
|
package hello;
public class Main {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
|
cs |
자바 파일을 생성한다
javac ./Main.java
javac 명령어를 사용하면 class 파일을 얻을 수 있다.
이름은 .java 파일과 동일하고 .class파일에는 바이트코드가 들어있다.
javac -d 를 주면 클래스 파일을 저장할 경로를 지정할 수 있다.
java Main
java 명령어를 통해 바이트코드를 실행할 수 있다
참고 ) C와 같은 언어에서는 컴파일을 하면 실행파일이 나온다. 실행파일은 기계어이고, 운영체제가 직접실행한다.
운영체제, 디바이스에 종속적이다.
바이트코드란 무엇인가
운영체제, 디바이스가 이해하는 기계어가 아닌 JVM이 이해하는 명령어
JVM이 실행 중에 최종 플랫폼에 맞는 명령어로 바꿔 실행
JIT 컴파일러란 무엇이며 어떻게 동작하는지
Just-in-time-compilation(JIT)은 프로그램을 실행하는 시점에 기계어로 변환을 한다.
인터프리터는 반복되는 코드를 네이티브코드로 바꿔, 네이이티브 코드를 사용한다
JVM 구성 요소
클래스 로더
- class 파일에서 바이트코드를 읽어와 메모리에 저장
- 초기화과정에서 static의 값 초기화 및 변수 할당
- 여기서 레퍼런스를 연결하는 과정을 링킹(링크)라고 한다.
JVM Memory
- Method Area는 클래스 정보
- 힙 영역에는 객체의 정보
- 스택 영역에는 쓰레드마다 런타임 스택이 생김. 쓰레드 안에 frame이 존재하며 frame 안에는 메소드 상태 정보가 생긴다.
Excute Engine
바이트 코드를 실행하는 인터프리터, JIT 컴파일러가 존재
Native Method Libraries : 자바가아닌 C, C++로 구성된 라이브러리이고 JNI를 통해 로드할 수 있다.
https://stackoverflow.com/questions/2860642/java-difference-between-library-and-native-library
JDK와 JRE의 차이
Java Runtime Environment(JRE)
자바를 실행시키기 위한 파일을 가지고 있다
Java11 부터 오라클에서 JRE를 제공하지 않는다
Java Development Kit (JDK)
자바 소프트웨어를 개발하기 위한 툴을 모아둔 패키지
JRE를 포함한다
'JAVA' 카테고리의 다른 글
연산자 (0) | 2020.11.22 |
---|---|
자바 데이터 타입, 변수 그리고 배열 (0) | 2020.11.17 |
Interface default methods (0) | 2020.10.19 |
Java8 Function (0) | 2020.10.18 |
Garbage Collection (0) | 2020.09.04 |