티스토리 뷰
[JVM이란?]
- JVM은 Java Virtural Machine의 약자로, 자바 가상 머신이라고 부른다.
- 자바와 운영체제 사이에서 중개자 역할을 수행하며, 자바가 운영체제에 구애 받지 않고 프로그램을 실행할 수 있도록 해준다.
- 가비지 컬렉터(GC)를 사용한 메모리 관리도 자동으로 수행한다.
- JVM 은 스택 기반의 가상 머신이다.
[JVM을 왜 알아야 할까?]
메모리 효율성을 위해 메모리 구조를 아는 것이 중요하다. 동일한 기능의 프로그램이더라도 메모리 관리에 따라 성능이 좌우되기 때문이다. 메모리 관리가 되지 않은 경우 속도저하 현상이나 튕김 현상 등이 일어날 수 있다.
[JAVA 프로그램 실행 단계]
JVM은 운영체제 위에서 동작하는 프로세스로 자바 코드(.java)를 컴파일 해서 얻은 바이트 코드(.class)를 해당 운영체제가 이해할 수 있는 기계어로 바꿔 실행 시켜주는 역할을 한다. 만약, 자바 소스 파일은 리눅스에서 만들었고 윈도우에서 이 파일을 실행하고 싶다면, 윈도우용 JVM 을 설치하면 된다. JVM은 운영체제에 종속적이다.
[JVM 메모리 구조]
JVM의 구조는 크게 4가지(Class Loader, Execution Engine, Garbage Collector, Runtime Data Area)로 나뉜다.
(1) Class Loader
자바에서 소스를 작성하면 Person.java 처럼 .java 파일이 생성된다. .java 소스 파일을 자바 컴파일러가 컴파일 하면 Person.class 같은 .class 파일(바이트 코드)이 생성된다. Class Loader은 생성된 .class 파일들을 엮어서 JVM이 운영체제로 부터 할당받은 메모리 영역인 Runtime Data Area로 적재하는 역할을 한다.(자바 애플리케이션이 실행중 일 때 이런 작업이 수행된다.)
(2) Execution Engine
Class Loader에 의해 메모리에 적재된 클래스(바이트 코드)들을 기계어로 변경해 명령어 단위로 실행하는 역할을 한다.
명령어를 하나하나 실행하는 인터프리터(Interpreter)방식이 있고 JIT(Just-In-Time) 컴파일러를 이용하는 방식이 있다.
JIT 컴파일러는 적절한 시간에 전체 바이트 코드를 네이티브 코드로 변경해서 Execution Engine이 네이티브로 컴파일된 코드를 실행하는 것으로 성능을 높이는 방식이다.
(3) Garbage Collector
Garbage Collector(GC)는 힙 메모리 영역에 생성된 객체들 중에서 참조되지 않은 객체들을 탐색 후 제거하는 역할을 한다. GC가 역할을 하는 시간은 정확하게 언제인지를 알 수 없다. 즉, 참조가 없어지자 마자 해제되는 것을 보장하지는 않는다.
(4) Runtime Data Area
JVM 의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역이다.
이 영역은 크게 Method Area, Heap Area, Stack Area, PC Register, Native Method Stack로 나눌 수 있다.
1. Method Area(메소드 영역)
모든 쓰레드가 공유하는 메모리 영역. 메소드 영역은 클래스, 인터페이스, 메소드, 필드, Static 변수 등의 바이트 코드를 보관한다.
2. Heap Area(힙 영역)
모든 쓰레드가 공유 하며, new 키워드로 생성된 객체와 배열이 생성되는 영역이다. 또한, 메소드 영역에 로드된 클래스만 생성이 가능하고, Garbage Collector가 참조되지 않은 메모리를 확인하고 제거하는 영역이다.
3. Stack Area(스택 영역)
스택에는 메서드가 호출 될 때마다 스택 프레임 이라는 데이터 영역이 생성된다. 이 스택 프레임에는 매개변수나 지역변수, 리턴 값 및 연산 시 일어나는 값들을 임시로 저장할 수 있는 공간이 할당된다. 이 후 메서드의 수행이 끝나게 되면 메모리가 반환된다.
4. PC Register
PC Register은 쓰레드(하나의 프로그램 내에서 실행되는 메서드)가 생성될 때마다 생성되는 공간이며, 현재 수행 중인 JVM의 명령어 주소를 가지고 있다.
5. Native Method Stack
Native Method란 자바 외의 다른 언어(C, C++)에서 제공되는 메서드를 의미한다. 이 영역은 Native Method의 변수를 저장하는 공간이다.
[Reference]
https://velog.io/@kyukim/1-yylklo8g
'Study > Java' 카테고리의 다른 글
[스터디 4주차] 선택문/반복문 (0) | 2022.01.02 |
---|---|
[스터디 3주차] 연산자 (0) | 2021.12.19 |
[스터디 2주차] 데이터 타입(Primitive type, Reference type) (0) | 2021.12.12 |
[스터디 1주차] Garbage Collection(GC) (0) | 2021.12.12 |
[스터디 1주차] 컴파일 하는 방법 (0) | 2021.12.12 |
- Total
- Today
- Yesterday
- 데이터베이스
- 이진탐색
- https
- 프로세스 주소공간
- CS
- 완전탐색
- Greedy sort
- 리스트함축
- 알고리즘
- 코드업 기초
- 프로그래머스강의
- 정렬
- 리스트2
- 운영체제
- 자료구조와알고리즘 23강
- 스터디
- 리스트 복사
- 보험
- 연결리스트활용
- CS 스터디
- 이차 리스트
- 자바
- 파이썬
- It
- 네트워크
- SW
- CS.
- 리스트
- 자료구조
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |