일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- springboot
- 시스템운영
- 레드마인
- spring
- heap메모리
- Gradle
- Git
- Elk
- ElasticSearch
- nodejs
- 트랜잭션
- Java
- sql
- Apach
- slave node
- mybatis
- DB
- npm
- mysql
- 아파치
- orm
- 스프링
- Stash
- Bitbucket
- JVM
- SonarQube
- 엘라스틱서치
- 리눅스
- 마이바티스
- 자바
- Today
- Total
프로그래머호이잇
JVM 본문
JVM(Java Virtual Machine)이란?
자바 가상 머신으로 자바 바이트 코드를 실행할 수 있는 주체임. CPU나 운영체제(플랫폼)의 종류와 무관하게 실행이 가능함.
운영체제 위에서 동작하는 프로세스로 자바 코드를 컴파일해서 얻은 바이트 코드를 해당 운영체제가 이해할 수 있는 기계어로 바꿔 실행시켜주는 역할
JVM의 구성을 살펴보면 크게 4가지(Class Loader, Execution Engine, Garbage Collector, Runtime Data Area)로 나뉨
Class Loader
JAVA 컴파일러를 통해 컴파일된 Class파일을 JVM이 운영체제로부터 할당받은 메모리 영역인 Runtime Data Area 로 적재함
JAVA 컴파일러란? 자바소스를 기계어(Class) 로 변환시켜주는 번역 프로그램
Execution Engine
Class Loader에 의해 메모리에 적재된 클래스(바이트 코드)들을 기계어로 변경해 명령어 단위로 실행함
Garbage Collector
Heap 메모리 영역에 생성된 객체 중 참조 되지 않는 객체를 참색 후 제거하는 역할을 함.
Runtime Data Area
JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역
이 영역은 크게 Method Area, Heap Area, Stack Area, PC Register, Native Method Stack 으로 나뉨
Method Area
클래스 멤버 변수의 이름, 데이터 타입, 접근 제어자 정보같은 필드 정보와 메소드의 이름, 리턴 타입, 파라미터, 메소드 정보, Type정보, Constant Pool, static 변수, final class 변수등이 생성되는 영역
Heap Area
데이터를 저장하기 위해 런타임 시 동적으로 할당하여 사용하는 메모리영역New 연산자를 통해 생성한 객체를 저장함.
메소드 영역에 로드된 클래스만 생성이 가능하고 Garbage Collector가 참조되지 않는 메모리를 확인하고 제거됨
Stack Area
선입후출 구조로 메서드 호출 시 생성되는 스레드의 수행정보를 기록하는 Frame 저장하는 영역
메서드 정보, 지역변수, 매개변수, 연산 중 발생하는 임시 데이터도 함께 저장함
int num = 100; 으로 소스를 작성 시 Stack Area 에 할당됨.
Item item = new Item() 으로 소스 작성 시 Item item은 Stack Area에 생성되고 new 키워드를 통하여 생성된 Item 클래스의 인스턴스는 Heap Area 에 생성됨.
스택 영역에 생성된 item 은 Heap Area에 new 키워드를 통하여 생성된 클래스 인스턴스의 주소값을 참조함.
(스레드마다 생성되고 공유되지 않음)
PC Register
스레드가 생성될 때마다 생성되는 영역으로 Program Counter 즉, 현재 쓰레드가 실행되는 부분의 주소와 명령을 저장하고 있는 영역
Native Method Stack Area
자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역
C/C++ 등의 코드를 수행하기 위한 스택 영역(JNI)
*위 글은 아래 블로그의 글을 참고하여 개인공부 겸 작성한 글입니다.
'java' 카테고리의 다른 글
JAVA Heap Memory, Garbage Collector (0) | 2022.01.03 |
---|---|
Mybatis #과 $ 차이 (0) | 2019.08.28 |
jvm 메모리 관련 내용 (0) | 2019.08.26 |
Mabatis <where> 의미 (0) | 2017.11.10 |
@param 사용이유 (0) | 2017.10.25 |