1. JVM 이란?
- Java Virtual Machine, 자바 가상 머신
- 다른 프로그램을 실행하는 것을 목적으로 하는 프로그램
- 자바 프로그램이 어느 기기, 어떤 운영체제 상에서도 실행될 수 있게 하는 것
- 자바 애플리케이션을 클래스 로더를 통해 읽어 들어 자바 API와 함께 실행하는 것
- 메모리 관리를 해주는 장점이 있다 (메모리 관리, Garbage Collection)
기술적 정의 : JVM은 코드르 실행하고 해당 코드에 대해 런타임 환경을 제공하는 소프트웨어 프로그램에 대한 사양
일반적 정의 : JVM은 자바 프로그램을 실행하는 방법. JVM 설정을 구성한 다음 설정 사항에 따라 실행 중인 프로그램 리소스를 관리
2. JVM을 알아야 하는 이유
- 메모리 구조를 알고, 메모리를 효율적으로 사용해야 하기 때문
3. JVM에서의 메모리 관리
가장 일반적인 상호작용은 힙(Heap)과 스택(Stack)의 메모리 사용을 확인하는 것
가장 흔한 교정작업은 JVM의 메모리 설정 값들을 조율하는 것
4. JVM 구성 요소
- 메서드 영역 : 프로그램 실행 중 어떤 클래스가 사용될 때, 해당 클래스의 클래스 파일을 읽고 분석하여 클래스에 대한 모든 정보와 static 변수가 저장됨
- 힙 : 객체가 생성되는 공간으로, 프로그램 실행 중 생성되는 인스턴스들이 모두 여기에 저장
- 스택 : 메서드의 작업에 필요한 메모리 공간을 제공. 메서드가 호출되면 호출된 메서드를 위한 메모리가 할당되며, 메서드가 작업을 수행하는 동안의 지역변수들과 연산의 중간결과 등을 저장하는 데 사용. 작업이 끝나면 메모리 공간은 반환되어 지워진다.
5. JVM의 동작 과정
- 프로그램이 실행되면 JVM은 OS로부터 메모리를 할당받는다.
- 자바 컴파일러가 자바 소스코드를 읽어 들어 자바 바이트코드(. class)로 변환시킨다.
- Class Loader를 통해 class파일들을 JVM으로 로딩한다.
- 로딩된 class파일들은 Execution engine을 통해 해석된다.
- 해석된 바이트코드는 Runtime Data Area에 배치되어 실질적인 수행이 이루어지게 된다.
- 위의 실행 과정 속에서 JVM은 필요에 따라 Thread Synchronization, GC 같은 관리 작업을 수행한다.
6. JIT 컴파일러
- JIT는 Just-In-Time의 약자로 말 그대로 그 순간 컴파일러라는 뜻 , 실행 시간에 바이트코드를 네이티브 코드로 변환해서 성능을 높여준다.
- Java에서 컴파일을 하면 Bytecode로 변환이 되는데, 이는 기계가 바로 읽을 수 있는 형태가 아니다.
이 바이트코드를 실제 실행될 때 다시 한번 기계가 읽을 수 있는 형태(native code)로 interpreter를 통해 해석이 되어야 하는데
두 번의 과정을 밟는 이유는 java의 최대 장점 중 하나인 machine-independent 특성 때문.
(platfore independent라 도고 하는데 어떤 기계에서든 돌릴 수 있는 특성)
7. JDK와 JRE의 차이
- JRE: Java Runtime Environment의 약자로 자바 프로그램을 실행시켜주는 환경을 구성해주는 도구로 즉, 개발할 필요는 없는데 실행시켜줘야 하는 경우에 쓰인다.
라이브러리, JVM, 애플릿을 돌리기 위해 필요한 컴포넌트 등으로 구성됨
- JDK: Java Development Kit의 약자로 말 그대로 자바 개발 시 필요한 툴킷을 제공하는 도구 모음이다.
JRE + 컴파일러, 디버거 등 개발에 필요한 도구가 추가됨
'Java' 카테고리의 다른 글
[JAVA 기초] 자바 데이터 타입, 변수 그리고 배열 (0) | 2021.06.15 |
---|---|
[JAVA] 메모리 관리 (스택, 힙) (0) | 2021.03.04 |
[Java] URL To Base64, URL을 Base64로 변환 (0) | 2020.12.23 |