웹 개발자 기술 면접의 단골 문제 중 하나인 JVM, GC에 대해서 살펴보자.
해당 회사가 JAVA 기반이라면 높은 확률로 물어본다.
경력의 경우는 별로 중요해보이지 않지만
신입 면접에 경우 필자도 JVM GC 설명을 해보세요 하는 질문을 받아봤고
많은 사람들이 받아본 문제 중 하나다.
JVM
자바 버츄얼 머신의 약자로 자바로 만든 프로그램을 읽어들여 실행하는 것이다.
OS와 JAVA 사이의 중간 역할을 하는 것으로
이로 인해 JAVA는 JVM만 실행가능하다면 OS와 상관없이 동작할 수 있다.
JVM은 메모리 관리를 자동으로 해주는데 이것을 Garbage Collection(GC)라고 한다.
(C와 다르게 메모리를 개발자가 관리하지 않아도 된다.)
JVM의 구성 요소
Class Loader
JVM으로 클래스를 가져오고 링크를 통해 배치 시킨다.
Runtime에 동적으로 클래스를 Runtime Data Area로 올린다.
Excute Engine
메모리의 바이트 코드들을 op코드로 변환해 실행한다.
2가지 방식이 존재함
1. Interpreter
명령어를 하나씩 수행(상대적으로 느림)
2. JIT(Just-In time)
전체 바이트코드를 네이티브 코드로 다 변환한뒤 네이티브 코드를 실행
(컴파일 해야하는 시간이 발생하지만 빠름)
GC
가비지 콜렉터를 수행하는 스레드
Runtime Data Area의 HEAP 영역에 참조되지 않는 객체들을 찾아서 메모리를 해제함
언제 일어날지 보장이 되지 않으며, GC 수행시 GC 쓰레드 이외의 모든 쓰레드는 일시정지됨.
Runtime Data Area
이 영역은 JVM의 메모리 영역으로 실행중인 JAVA프로그램의 데이터들을 적재하는 영역이다.
5가지 영역으로로 나눌수 있다.
1.Method 영역
클래스, 인터페이스 정보, static변수, 리턴 타입, 파라미터. Runtime constant pool 등이 저장되는 영역으로
모든 Thread에 공유되au 영역이다.
2.Heap 영역
new 키워드로 생성된 것들의 메모리 영역이며 GC가 주 타겟팅으로 잡는 곳이다.
Heap 영역도 구역이 나눠진다.(이것은 2편에 다룰예정이다.)
3.Stack 영역
메소드 데이터(지역변수, 파라미터, 연산에 사용된 임시값, 리턴값 등)를 저장하기 위한 영역
Thread마다 각각 독립적으로 생성되는 영역이다.
4.PC 레지스터
현재 쓰레드가 실행되는 부분의 주소와 명령을 저장 Thread가 생설 될 때마다 생성되는 영역
쓰레드가 실행되는 부분의 주소와 명령을 저장하고 있다. 이것을 통해 쓰레디를 돌아가며 수행 할 수 있다.
5.Native Method stack
자바가 아닌 언어로 작성된 네이티브 코드를 위한 영역(C/C++이 주로)
참조
https://jeong-pro.tistory.com/148
https://mirinae312.github.io/develop/2018/06/04/jvm_memory.html
'Computer Science > JAVA' 카테고리의 다른 글
JVM, GC 알아보자 3 (1) | 2021.09.14 |
---|---|
JVM, GC 살펴보자 2 (0) | 2021.09.09 |
SOLID 5원칙 (좋은 객체지향 설계란.) (0) | 2021.09.07 |