Java 언어로 프로그래밍한 파일인 자바 소스 코드를 (.Java)
Java컴파일러가 가상 기계어 파일인 Java클래스 파일로 만든다. (.class)
(소스 코드를 Java바이트 코드로 번역)
이후 Java바이트 코드를 JVM이 읽고 실행
* Java 컴파일러
Java Source파일을 JVM이 해석할 수 있는 Java Byte Code(. class)로 변경한다. 일반적인 윈도우 프로그램의 경우, Compile 이후 Assembly 언어로 구성된 파일이 생성된다.
인텔리제이가 자동으로 컴파일 해줌!
* Java 바이트 코드
JVM이 이해할 수 있는 언어로 변환된 자바 소스 코드
자바 컴파일러 에 의해 변환되는 코드의 명령어 크기가 1바이트라서 자바 바이트 코드라고 한다.
자바 바이트 코드의 확장자는. class
자바 가상 머신(JVM)만 설치되어 있으면, 어떤 운영체제에서라도 실행 가능
JVM 구조( Java Virtual Machine )
Java 클래스 파일을 로드하고 바이트 코드를 해석하며, 메모리 등의 자원을 할당하고 관리하며 정보를 처리하는 작업을 하는 프로그램
Java 프로그램은 중간 단계 언어로 컴파일하여 JVM만 각 OS만 설치되어 있다면 HW 기종에 상관없이 단 한 번만 컴파일하면 된다. 이를 '플랫폼에 독립적'이라고 함.
C프로그램은 바로 기계어로 컴파일하므로 HW 기종에 맞게 컴파일되어야 한다. 이를 '플랫폼에 종속적'이라고 함.
* Class Loader
JVM내로. class파일들을 Load 한다. Loading 된 클래스들을 Runtime Data Area에 배치된다. 일반적인 윈도우 프로그램의 경우 Load 과정은 OS가 주도한다.
* Execution Engine
Loading 된 클래스의 Bytecode를 해석한다. 이 과정에서 ByteCode가 BinaryCode로 변경된다. 일반적인 윈도우 프로그램의 경우 Assembier가 Assembly언어로 쓰인 코드 파일을 BinaryCode로 변경한다.
* Runtime Data Area
JVM이 프로세스로써 수행되기 위해 OS로부터 할당받는 메모리 영역.
저장 목적에 따라 다음과 같이 5개로 나눌 수 있다.
Method Area
모든 Thread에게 공유
클래스 정보, 변수 정보, Method정보, static변수 정보, 상수 정보 등이 저장되는 영역
클래스 영역 또는 스태틱 영역이라고도 함
Heap Area
모든 Thread에게 공유
new 명령어로 생성된 인스턴스와 객체가 저장되는 구역, 공간이 부족해지면 Garbage Collection이 실행.
Stack Area
각 스레드마다 하나씩 생성
Method안에서 사용되는 값들(매개변수, 지역변수, 리턴 값 등)이 저장되는 구역
메서드가 호출될 때 LIFO로 하나씩 생성되고, 메서드 실행이 완료되면 LIFO로 하나씩 지워진다.
PC Register
각 스레드마다 하나씩 생성
CPU의 Register와 역할이 비슷
현재 수행 중인 JVM명령의 주소 값이 저장
Native Method Stack
각 스레드마다 하나씩 생성
다른 언어(C/C++ 등)의 메서드 호출을 위해 할당되는 구역 언어에 맞게 Stack이 형성되는 구역
JNI(Java Native Interface)라는 표준 규약을 제공
JDK ( Java Development ToolKits )
안에 Java Development ToolKits 과 JRE ( Java Runtime Environment ) 있음.
JRE ( Java Runtime Environment )
자바에서 제공되는 기본 라이브러리들이 포함
'개발일지 > 일간회고 (TIL)' 카테고리의 다른 글
Java 테스트 코드 (0) | 2022.12.04 |
---|---|
자바(Java) Interface, Stream, Optinal (0) | 2022.12.01 |
발표도 끝! / TIL (22-09-14) (0) | 2022.11.29 |
프로젝트 끝 / TIL (22-11-28) (0) | 2022.11.28 |
회원가입, 예약내역 조회를 맡다 / TIL (22-11-25) (0) | 2022.11.25 |