반응형
공부 시간 : 2021/03/25 22:30 ~ 25:25
3주차. JVM구조에 대해서 설명, 자바 버전에 따라 어떻게 바뀌는가?
jvm의 탄생배경
- c, c++ 와 같은 언어들은 타겟 플렛폼(운영체제 + cpu아키텍쳐)에 종속적으로 작동함. ex) 리눅스에서 컴파일하면 윈도우에서 실행불가능
- 자바 컴파일러에 의해 변환된 java 바이트코드(.class)는 타겟플렛폼에 의존하지 않고 JVM 위에서 작동된다.
- JVM은 타겟플렛폼에 의존함. (window용 JVM, mac용 JVM...)
jvm 구조
1. class loader :
- 자바는 어플리케이션 시작시 한번에 로드되지 않고, 필요할때 마다 로드된다. (lazy loading)
- 런타임시에 클래스를 동적으로 jvm에 로드하는 역할을 한다.
- 여러가지 클래스로더가 있으며 차례대로 로딩되며 작동된다.
- 부트스트랩 클래스로더(Bootstrap classloader)
- jvm 시작시 가장 먼저 실행되는 클래스로더이다.
- 최소한의 자바 클래스(java.lang.Object, Class, Classloader)만 로드한다.
- 확장 클래스로더를 로드함.
- 확장 클래스로더(Extension classloader)
- ${JAVA_HOME}/lib/ext, java.ext.dirs 시스템 프로퍼티에 적힌 라이브러리 로드
- 애플리케이션 클래스로더를 로드함.
- 애플리케이션 클래스로더(Application classloader)
- classpath 환경 변수, -classpath 또는 -cp 커맨드 라인 옵션에 나열된 라이브러리 파일을 로드
- 이외에도 커스텀 클래스로더를 만들어서 사용 할 수 있다.
2. 메모리 영역
- Heap 메모리
- 객체의 인스턴스, 동적 할당된 데이터 저장
- Garbage Collection이 일어나는 공간
- java 1.8 이전과 이후로 Heap 영역의 구조가 변경됨.
- 1.8 이전에는 perm영역 이 있었으나 (1.8이후 perm -> Heap + MetaSpace로 바뀜)
- 1.8 이후 static은 heap또는 MetaSpace에 저장
- Thread Stack
- 쓰레드마다 하나씩 배정되는 영역
- 메소드 결과, return 값, 지역변수 저장
- MetaSpace
- 클래스 메타데이터, 메서드 메타데이터, static 변수
- Code Cache
- 자주 접근하는 코드블럭을 매번 컴파일 하지 않도록 컴파일된 기계어 캐싱되는 영역
- Runtime Engine이 사용하는 영역
- Shared Library
- 공유될 라이브러리가 기계어로 변환되어 저장되는 영역
3. Runtime Engine
- Interpreter : 바이트코드를 읽어 기계어로 변환하여 실행
- (JIT) Just-In-Time Compiler : Code Cache 메모리에 캐싱
- Garbage Collection : 참조되지 않은 개체 정리
4. JNI(Java Native Interface)
- Native Method Library를 실행하는데 필요한 인터페이스
5. Native Method Library
- Execution Engine을 실행할때 필요한 라이브러리(C, C++) 모음.
참고한 사이트
반응형
'컴퓨터 > JAVA' 카테고리의 다른 글
자바 고급 스터디 5. generic type erasure(제네릭 타입 소거) (1) | 2021.04.07 |
---|---|
자바 고급 스터디 4. 자바 컴파일 되는 과정 (0) | 2021.04.04 |
자바 고급 스터디 2. wrapper class, primitive type(기본형), 일급 콜랙션 (0) | 2021.03.15 |
자바 고급 스터디 1. 스트림, 람다 (stream, lamda) (0) | 2021.03.09 |
자바 고급 스터디 주제 정리 (0) | 2021.03.09 |