Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- spring
- 시큐리티
- 네트워크
- JPA
- 스프링 부트 쇼핑몰 프로젝트 with JPA
- 스프링
- Java
- 플러터
- CS
- 자바스크립트
- CS지식
- 프로그래머스
- 자바
- baekjoon
- 파이썬
- 스프링부트
- javascript
- 자료구조
- 데이터
- DB
- backjoon
- python
- Spring Security
- postgresql
- Flutter
- Oracle
- 데이터베이스
- springboot
- 리눅스
- 백준
Archives
- Today
- Total
Jin's Dev Story
[JAVA] JVM 본문
JVM(Java Virtual Machine)
- 자바 가상 머신
- 운영체제에 종속적이다.
- 자바와 운영체제 사이에서 중개자 역할을 수행하며, 자바가 운영체제에 구애받지 않고 프로그램을 실행할 수 있도록 도와줌
- 가비지 컬렉터를 사용한 메모리 관리도 자동으로 수행하며, 다른 하드웨어와 다르게 레지스터 기반이 아닌 스택 기반으로 동작
자바 프로그램의 실행 단계
- 자바 컴파일러에 의해 자바 소스 파일은 바이트 코드로 변환됨
- 바이트 코드를 JVM에서 읽어 들인 다음에, 복잡한 과정을 거쳐 어떤 운영체제 간에 프로그램을 실행할 수 있도록 만드는 것
⇒ 만약, 자바 소스 파일은 리눅스에서 만들었고 윈도우에서 이 파일을 실행하고 싶다면, 윈도우용 JVM을 설치만 하면 됨
JVM 메모리 구조
- 자바 프로그램의 실행 단계
- Garbage Collector, Execution Engine, Class Loader, Runtime Data Area로, 4가지로 나뉨
- 자바 소스 파일은 자바 컴파일러에 의해서 바이트 코드 형태인 클래스 파일이 됨
- 그리고 클래스 파일은 클래스 로더가 읽으며 JVM이 수행됨
(1) Class Loader
- JVM 내로 클래스 파일을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈
- 런타임 시에 동적으로 클래스를 로드함
(2) Execution Engine
- 클래스 로더를 통해 JVM 내의 Runtime Data Area에 배치된 바이트 코드들을 명령어 단위로 읽어서 실행
(3) Garbage Collector
- 힙 메모리 영역에 생성된 객체들 중에서 참조되지 않은 객체들을 탐색 후 제거하는 역할을 함
(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
- 쓰레드가 시작될 때 생성되며, 생성될 때마다 생성되는 공간으로 쓰레드마다 하나씩 존재
- 쓰레드가 어떤 부분을 무슨 명령으로 실해해야할 지에 대한 기록을 하는 부분으로 현재 수행중인 JVM 명령의 주소를 가짐
(5) Native method stack
- 자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역
'Programming Language > JAVA' 카테고리의 다른 글
[JAVA] 지역 변수 & 전역 변수 & static(정적) 변수 (0) | 2023.08.15 |
---|---|
[JAVA] 인터페이스(interface) (0) | 2023.08.12 |
[JAVA] 가비지 컬렉션(Garbage Collection) (0) | 2023.08.01 |
[JAVA] Stream(스트림) (0) | 2023.07.19 |
[JAVA] 람다식 (0) | 2023.07.19 |