본문 바로가기

프로그래밍 언어 노트/JAVA | Kotlin

JVM GC와 Reference

자바공부할때 다른 내용이야 어디서나 나오지만

JVM / GC / Weak Reference Soft Reference ... 같은 내용은 공부하기도 공부해야하는 지도 잘 모르기때문에

나중을 위해서라도 검색하기 쉽게 간단한 키워드라도 남겨두기 위해 블로깅

 

갓갓 Naver D2 를 많이 참고

JVM

JVM 은 Class Loader / Execution Engine / GC / Runtime Data Area 로 나뉜다.

Class Loader : 클래스 파일을 데이터 에어리아에 적재

Execution Engine : 메모리에 적재된 클래스를 기계어로 번역해 명령어단위로 실행

Garbage Collector : 뭐 다들 아시는 그거, Heap 에서 참조되지 않는 객체를 탐색, 제거, GC 하면 다른 쓰레드가 정지됨

Runtime Data Area: JVM 상의 메모리 영역이다. 6가지 영역으로 나뉘는데 그중에서 GC 가 수행되는것은 힙 영역

힙영역은 Eden survivor1 survivor2 | old permanent(-> 8인가... 부터 메타스페이스로 바뀜)

             <----young (New)--->

으로 나뉜다.

 

https://d2.naver.com/helloworld/1230

 

 

GC

자바의 GC는 대충 말하자면 지워질놈은 빨리 지워지고 안지워질놈은 잘안지워진다... 컨셉을 가지고

Minor GC: young 영역에서 일어남

Major GC: Old 에서 일어남

 

JVM 은 파라미터로써 GC 수행 방식을 정할수 있다.

5개 정도있는데 하나하나 어떻게 동작하는지는 정확히는 모르겠음.. 직렬, 병렬, G1(테이블 방식?) 등등..

https://d2.naver.com/helloworld/1329

 

Reference

Java는 포인터 가 없고 메모리를 직접관리 못하지만

개발자에게 어느정도의 컨트롤를 할수있게 해준다 그게 reference를 정해주는것이고

Strong ref : 걍 New하면 Strong, GC안된다.

Soft ref: Out of Memory 에 가까워 질수록 GC

Weak ref: GC 시수거

Phantom ref: GC 시 수거...는 맞는데 자바의 finalize 를 대체한다.. 설명하기 좀 어렵다. ReferenceQueue 가 필수..

https://d2.naver.com/helloworld/329631

 

728x90