[ JVM, JRE, JDK]
- JVM : 자바 가상머신(Java Virtual Machine)
- 바이너리 코드를 읽고, 검증, 실행한다. 자바 소스코드로부터 만들어지는 자바 바이너리 파일(.class)을 실행가능
- JRE : 자바 실행환경(Java Runtime Environment)
- 자바 프로그램을 동작할 때 필요한 라이브러리 파일과 기타 파일 포함.
- JDK : 자바 개발도구(Java Development Kit)
- JRE + 개발을 위해 필요한 툴 javac, java 포함
[자바 메모리 구조]
이미지 추가 예정
eden - s0 - s1 - tenured - direct memory
- 에덴에서 생성(Object 생성 시)
- 에덴영역이 가득차면 minor gc 발생
- 계속 사용되는 object(=reachable object)들은 s0으로 이동.
- s0에 있는 reachable object들은 s1으로 이동
- s1이 가득차면 s1의 reachable objectsms old generation으로 복사
JVM이 시작되면 JVM은 운영체제에서 할당받은 메모리 영역을 다음과 같이 세부영역으로 구분해서 사용한다.
- 메소드 영역
- 코드에서 사용되는 클래스 파일들을 클래스 로더로 읽어 클래스 별로 런타임 상수풀, 필드 데이터, 메소드 데이터, 메소드 코드, 생성자 코드로 분류해서 저장한다.
- JVM이 시작할때 생성되고 모든 스레드가 공유하는 영역이다.
- 힙 영역
- 객체와 배열이 생성되는 영역이다. 힙 영역에 생성된 객체와 배열은 JVM 스택 영역의 변수나 다른 객체들의 필드에서 참조한다.
- 참조하는 변수나 필드가 없을 경우 GC의 대상이 된다.
- JVM 스택 영역
- 각 스레드마다 하나씩 존재하며 스레드가 시작될 때 할당된다.
- 자바 프로그램에서 추가적으로 스레드를 생성하지 않으면 MAIN 스레드만 존재하므로 JVM 스택도 하나이다.
- 메소드를 호출할 때 프레임을 PUSH
- 메소드가 종료되면 프레임을 POP
- 예외 발생 시 printStackTrace 메소드로 보여주는 내역들이 Stack Trace의 각 라인은 하나의 프레임을 표현한다. 프레임 내부에는 로컬 변수 스택이 존재하는데 기본 타입 변수와 참조 타입 변수가 추가되거나 제거된다.
- 각 스레드마다 하나씩 존재하며 스레드가 시작될 때 할당된다.
[Garbage Collection]
- MinorGC : young generation에서 발생하는 GC
- MajorGC : old generation에서 발생하는 GC
- FullGC : Heap영역 전체를 clear하는 GC
[visualVM]
VisualVM은 JVM을 실시간으로 모니터링 할 수 있는 GUI툴이다. jdk 하위의 bin에 실행 파일이 존재한다. 다양한 플러그인을 추가해서 원하는 모니터링 기능을 사용할 수 있다.
Reference
https://post.naver.com/viewer/postView.nhn?volumeNo=23726161&memberNo=36733075
'Dev > Java' 카테고리의 다른 글
[java] CSV 파싱하기 (0) | 2019.12.13 |
---|---|
[java] Logback 과 Maven (0) | 2019.10.04 |
[java] HttpClient (1) | 2019.09.26 |
[java] on-heap 과 off-heap (0) | 2019.09.20 |
[java] 자바 프레임워크 (0) | 2019.03.18 |