JVM : Java Virtual Machine의 약자로, 자바 가상 머신이다.
java와 os 사이에서 중개자 역할을 수행하며,
java가 os에 구애 받지 않고 program을 실행할 수 있도록 도와준다.
java는 OS에 독립적인 특징을 가지고 있는데, 그것이 가능한 이유는 JVM상에서 실행되기 때문이다.
java 소스코드 컴파일 -> 생성된 파일이 해석(Interpret)과 Link없이 바로 JVM에 적재
-> OS로 부터 메모리를 할당, GC(Garbage Collection)를 통해 스스로 메모리 관리
메모리 누수 ==garbage
C언어
포인터 , d2=d1 하면 d2는 안쓰고, 스택이랑 연결끊김 ,저런 메모리 삭제 안하면 터짐
그래서 자바에서 jvm 생김 -> GC(Garbage Collection) 저런 메모리 알아서 치워줌(실시간x)
1. 프로그램이 실행되면 JVM은 OS로부터 이 프로그램이 필요로 하는 메모리를 할당받는다.
JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.2. 자바 컴파일러(javac)가 자바 소스코드(.java)를 읽어들여 자바 바이트코드(.class)로 변환시킨다.3. Class Loader를 통해 class파일들을 JVM으로 로딩한다.4. 로딩된 class파일들은 Execution engine을 통해 해석된다.5. 해석된 바이트코드는 Runtime Data Areas 에 배치되어 실질적인 수행이 이루어지게 된다.이러한 실행과정 속에서 JVM은 필요에 따라 Thread Synchronization과 GC같은 관리작업을 수행한다.
<요약>
- 컴파일된 바이트 코드를 기계가 이해할 수 있는 기계어로 변환
- 스택 기반의 가상머신
- 메모리 관리와 GC를 수행
JVM구조
1. Class Loader
- 자바에서 소스 작성시 a.java 처럼 .java파일이 생성된다.
.java 소스를 자바컴파일러가 컴파일하면 a.class 같은 .class파일이 생성
이렇게 생성된 클래스파일들을 엮어서 jvm이 os로 부터 할당받은 메모리영역인
Runtime Data Area로 적재
2. Execution Engine
Class Loader로 의해 메모리에 적재된 클래스들을 기계어로 변경해
명령어 단위로 실행
3. Garbage Collector
힙메모리영역에 생성된 객체중 참조되지 않는 객체들을 탐색 후 제거
4. Runtime Data Area
- jvm의 메모리 영역으로 자바 어플리케이션을 실행할때 사용되는 데이터 적재
JVM rumtime data area구조
(1) Method area
모든 쓰레드가 공유하는 메모리 영역
메소드 영역은 클래스, 인터페이스, 메소드, 필드, Static 변수 등의 바이트 코드를 보관
2. Heap area
모든 쓰레드가 공유하며, new 키워드로 생성된 객체와 배열이 생성되는 영역 ->할당되었음
메소드 영역에 로드된 클래스만 생성이 가능하고
Garbage Collector가 참조되지 않는 메모리를 확인하고 제거하는 영역
3. Stack area
메서드 호출 시마다 각각의 스택 프레임(그 메서드만을 위한 공간)이 생성 -> 주소값 지정
메서드 안에서 사용되는 값들을 저장하고, 호출된 메서드의 매개변수, 지역변수, 리턴 값 및 연산 시 일어나는 값들을 임시로 저장. 마지막으로, 메서드 수행이 끝나면 프레임별로 삭제합니다.
4. Native method stack
자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역
5. PC Register
쓰레드가 시작될 때 생성되며, 생성될 때마다 생성되는 공간으로 쓰레드마다 하나씩 존재합니다.
쓰레드가 어떤 부분을 무슨 명령으로 실행해야할 지에 대한 기록을 하는 부분으로
현재 수행중인 JVM 명령의 주소를 갖는다.
'WEB JAVA SPRING > etc' 카테고리의 다른 글
Spring 어노테이션 (0) | 2023.08.28 |
---|---|
Spring Security 인증/인가 (0) | 2023.08.28 |
Spring Data JPA(Java Persistence API) (0) | 2023.08.28 |
REST API (0) | 2023.08.28 |
자바 & DB 연결 (2) | 2023.08.24 |