[정리] 기능별 개념 정리/JVM(4)
-
GC
GC 자바에서는 메모리를 GC 알고리즘을 통해서 관리한다. 따라서 개발자가 메모리 처리 로직을 만들 필요도 없고 만들어서도 안된다. GC 는 런타임 데이터 영역중 Heap 영역이 대상이 된다. GC 가 제대로 동작하지 않으면 메모리가 가득차서 JVM Hang 이 걸리거나 메모리를 추가할당 받게된다. 메모리를 계속 추가 할당 받다가 넘치게되면 OutOfMemory 로 JVM 이 다운될 수 도 있다. GC 가 발생하거나 객체가 이동할 때마다 어플리케이션에 병목이 발생하고 성능에 영향을 준다. JVM 에서는 이를 관리하기 위해 스레드 로컬 할당 버퍼라는 것을 이용한다. 이는 스레드 별로 메모리 버퍼를 사용하여 다른 스레드에 영향을 주지 않는 메모리 할당 작업을 가능하게한다. GC 의 목표 메모리 할당 사용중인..
2020.04.25 -
JVM 의 실행, 종료, 클래스 로더, 아키텍쳐
JVM 실행 절차 Java 실행 옵션을 파싱한다. 힙크기를 할당한다. JIT 컴파일러 타입을 지정한다. 환경변수를 지정한다. (CLASSPATH, LD_LIBRARY_PATH) Main 클래스를 확인한다. HotSpot VM 을 생성한다. JNI_CreateJavaVM 가 HotSpot VM을 생성된다. JNI_CreateJavaVM 는 동시 호출이 불가능하다. JNI_CreateJavaVM 가 non_primordial 스레드에서 HotSpot VM을 생성한다. JNI 호환성을 점검한다. GC 준비를 한다. 각종 초기화를 한다. OS 모듈을 초기화한다. (Pid, 랜덤 시드) 커맨드 라인 변수를 파싱한다. 표준 자바 시스템 속성을 초기화된다. 동기화, 메모리같은 모듈이 초기화된다. libjava 같은 ..
2020.04.23 -
JIT 컴파일러
HotSpot VM 자바를 만든 Sun 에서는 자바의 성능 개선을 하던 도중 JIT 컴파일러를 개발한다. 그리고 이 이름을 HotSpot 이라고 짓는다. JIT 컴파일러는 아래에서 설명하겠지만, JVM 환경에서는 javac 가 컴파일한 바이트 코드를 읽고 실행하는 인터프리터가 존재한다. 이 때 인터프리터가 자주 수행되는 영역이 있다 하면 이를 hot code 영역이라고 부른다. JIT 컴파일러는 hot code 영역을 효율적으로 다루기 위해 만들어진 기능이다. 이렇게 HotSpot(JIT 컴파일러)이 탑재된 VM 은 자바 3 부터 기본 VM 으로 사용되어 왔다. HotSpot VM 에는 주요 3가지 컴포넌트가 존재한다. JIT 컴파일러 VM 런타임 메모리 관리자 번외) HotSpot VM 에는 OSR 컴..
2020.04.22 -
Garbage collection 요약
Stop the world : GC를 수행하는 동안 모든 thread 가 멈춘다. Reachability : 루트 객체 목록에서 특정 객체까지 도달할 수 있는가. Mark and sweep : 도달 가능한 객체에 마킹을 하고 아닌 객체는 지운다. 메모리 해지를 제대로 해주지 않았을 때 Garbage collection 의 동작 https://www.youtube.com/watch?v=r_JAjpy42ug 메모리를 해지를 제대로 해줄 때 Garbase collection 의 동작 https://www.youtube.com/watch?v=kKBRy6wlz2c
2020.03.17