TIL 11/30

드립이 블로그·2022년 11월 30일
0

TIL

목록 보기
21/80

오늘은 JVM에 대해 공부 하였다.
생각보다 양이 많아서 다 기억 못할 것 같다.
며칠에 걸쳐서 나눠 봐야지

코드가 실행되는 과정

.java 파일 -> 자바컴파일러 -> .class 파일 -> JVM -> OS -> Hardware
이 순서를 거치며 코드가 실행이 되게 된다.

JDK

Java Development Kit
자바 소프트웨어 개발 키트이다.

구성 요소

JRE

JavaC Java Compiler

.java 파일을 .class 파일로 컴파일 해주는 컴파일러이다.
Java는 이 JavaC로 컴파일 된 클래스 파일을 실행해준다.

Javadoc Java Document

jdk와 패키지로 제공되는 도구이다.
Html형식을 가지며 문서 주석을 사용해 Java 클래스를 문서화 한다.
java 소스 코드의 코드 문서를 생성시 도움을 준다.

Jar Java Archive

여러 자바 클래스 파일을 자바 플랫폼에 배포하기 위한 파일 포맷이다.
파일을 압축해 용량이 가벼워지고, 관리가 편해진다.


JRE

Java Runtime Environment
JDK를 구성하는 요소 중 하나이다.
프로그래밍 툴과 배포 기술을 제공한다.

JRE의 구성 요소

JVM

JCL Java Class Library

코드를 작성하며 자주 사용하거나, 유용한 기능들을 모아놓은 클래스의 집합이다.
이를 사용하기 위해 import로 명시를 한다.
import로 명시를 했다면, 해당 클래스에서 지원하는 함수를 사용할 수 있다.


JVM

Java Vurtual Machine
클래스 파일에 존재하는 데이터인 bytecode를 운영 체제에 맞게 해석해준다.
이 해석으로 인하여 속도가 느리다는 단점이 있지만, JIT 컴파일러 (Just In Time Compiler)를 구현하여 단점이 보완되었다.

구성요소

Java Class Loader

컴파일 된 클래스 파일을 JVM에 Load하는 동작을 수행한다.
이로 인해 운영체제 위에서 직접 동작을 하지 않기 때문에, 높은 이식성을 갖게 된다.
클래스의 로딩 시점은
인스턴스 생성 시,
정적 변수 사용 시,
정적 메소드 호출 시에 클래스가 로딩된다.

Excution Engine

실행엔진이라고 한다.
Excution Engine은 메모리에 할당 된 bytecode를 실행하는 역할을 한다.
Excution Engine은 bytecode를 한 줄 마다 읽으며 변환하는 작업을 거치게 된다.

GC

Garbace Collector
Heap 메모리 영역에 생성된 객체 중에 참조되지 않은 객체들을 탐색 후 제거하는 역할을 한다.

Runtime Data Area


Runtime Data Area

JVM이 프로그램을 수행하기 위해 운영체제로부터 할당받는 메모리의 영역을 뜻한다.

구성요소

Method Area

클래스가 사용 될 때, JVM은 해당 클래스 파일을 읽어서 분석한다.
이 때, 인스턴스 변수, 메소드 코드 등을 이 Method Area에 저장한다.
클래스 변수도 이 영역에 생성된다.

Heap

사용자가 관리하는 인스턴스가 생성되는 공간이다.
객체를 동적으로 생성 했을때, 인ㅇ스턴스가 Heap 영역의 메모리에 할당되어 사용된다.
GC의 대상이 되는 영역이다.

Stack

Thread 제어를 위해 사용되는 메모리 영역이다.
단일 Thread 당 Method 가 호출 될 때, 메모리를 차지한다.

PC Register

Thread가 생성 될 때마다 생성되는 공간이다.
JVM은 CPU에 직접 Instruction을 수행하지 않고, Stack에서 별도의 메모리 공간을 취한다.
이를 PC Register라 한다.


오랫만에 이론 공부를 하니 어려운 것 같다.
생각보다 어려운 것도 많고, 세세하게 파고 들면 끝도 없을 정도로 공부할 양이 방대하다고 튜터님께서 말씀해 주셨다.
모든걸 완벽하게는 아니더라도 정말 필요하고, 중요한 것들은 최대한 기억하기 위해 노력해야겠다.

0개의 댓글