OS에 종속받지 않고 CPU가 Java를 인식, 실행할 수 있게 하는 가상 컴퓨터이다. JVM 덕분에 OS에 상관없이 어디서든 JAVA 애플리케이션을 실행할 수 있게 된다.
- Java 소스코드, 즉 원시코드(*.java)는 CPU가 인식을 하지 못하므로 기계어로 컴파일을 해줘야한다.
- Java파일이 실행되면 JVM이 인식할 수 있는 Java bytecode(*.class)로 변환된다. Java compiler 가 .java 파일을 .class 라는 Java bytecode로 변환한다.
- JVM이 OS가 bytecode를 이해할 수 있도록 해석해준다.
- 가비지컬렉션을 통해 자동적인 메모리 관리를 해줍니다.
- 가비지 컬렉션은 영어로 Garbeage Collection으로 줄여서 GC라고도 부릅니다. 가비지 컬렉션은 자바의 메모리 관리 방법 중의 하나로 JVM의 Heap 영역에서 동적으로 할당했던 메모리 영역 중 필요 없게 된 메모리 영역을 주기적으로 삭제하는 프로세스를 말합니다
출처: https://dev-coco.tistory.com/153 [슬기로운 개발생활:티스토리]
- Source Code (.java) 파일을 Java Compiler를 통해서 Byte Code(.Class)파일로 변환한다.
- Byte Code로 변환된 파일을 JVM의 Class Loader 로 보낸다.
- Class Loader는 말 그대로 Class 파일을 불러와서 메모리에 저장하는 역할을 한다.
- Execution Engine 은 Class Loader에 저장된 Byte Code를 명령어 단위로 분류하여 하나씩 실행하게 하는 엔진이다.
- Garbage Collector 는 사용하지 않거나 필요없는 객체들을 메모리에서 소멸시키는 역할을 한다.
- Runtime Data Area (Memory Area) 는 JVM이 프로그램을 수행하기위해 운영체제로부터 할당받은 메모리 공간이다.
Memory 구조
1) Method Area
- 모든 쓰레드가 공유하는 메모리 영역입니다.
- 메소드 영역은 클래스, 인터페이스, 메소드, 필드, Static 변수 등의 바이트 코드를 보관합니다.
- 모든 스레드에서 정보가 공유된다.
2) Heap
- 모든 스레드에서 정보가 공유된다.
- new 연산자로 생성된 객체, Array와 같은 동적으로 생성된 데이터가 저장되는 공간
- Garbage Collector가 참조되지 않는 메모리를 확인하고 제거하는 영역입니다.
- Reference Type 의 데이터가 저장되는 공간
3) Stack
- 지역변수, 메소드의 매개변수, 리턴 값 같이 잠시 사용되고 필요가 없어지는 데이터가 저장되는 공간
- Last In First Out, 나중에 들어온 데이터가 먼저 나간다
- 참조타임 변수는 힙 영역이나 메소드 영역의 객체 주소를 가진다.
- 스레드마다 하나씩 존재한다.
4) PC Register
- 스레드가 생성되면서 생기는 공간
- 현재 스레드가 실행되는 부분의 주소와 명령을 저장하고 있는 영역입니다.
5) Native Method Stack
- Java 가 아닌 다른 언어 (C, C++) 로 구성된 메소드를 실행이 필요할 때 사용되는 공간
'안드로이드 자바 코틀린 기초 지식 > 자바 기초지식' 카테고리의 다른 글
자바의 특징과 장단점, 객체지향 언어란??, 클래스와 객체 (0) | 2022.11.30 |
---|---|
객체 지향의 4대 특성(JAVA) (0) | 2022.11.28 |
추상클래스, 인터페이스 (0) | 2022.08.04 |
제어자와 접근 제어자 (0) | 2022.08.03 |
자바 메모리 구조 (Stack, Heap, Static) (0) | 2022.08.02 |