개발 공부
자바 기본 reachable and unreachable object 본문
java 프로그램이 실행되면 Main이라는 쓰레드를 생성한다. 프로그램 그 자체로 새로은 쓰레드를 생성할 수 있다. 각각의 쓰레드는 메서드들을 실행하고 그 중 가장 처음이 main() 메서드가 되는 것이다. java Runtime은 각각 실행되는 쓰레드에 stack memory를 생성한다. 각각의 stack frame은 객체를 참조하는 arguments나 local variables를 포함한다. 객체는 java의 "new" 연산자를 통해 생성되며 실행되는 시점(run time_lazily)에 heap메모리에 할당된다.
Garbage collection은 프로그램에서 더 이상 참조하지 않는 객체들을 자동으로 정리하는 프로세스이다. Garbage collectors는 어떤 방법을 통해 root nodes에서부터 참조표를 추적한다. (Garbage collectors somehow keeps track of the graph of references starting with the root nodes.) reachable과 unreachable objects에 대해 알아보자.
garbage collector란
garbage collector는 프로그램에서 더 이상 사용되지 않는 객체를 분별해낸다. 이러한 unreachable objects를 구별해내면 'finalizer'를 실행하여 혹시나 어딘가에서 사용되는지 확인한 후 heap 메모리에서 정리한다. 언제 사용되지 않는 객체가 생겨 garbage collect가 일어날지 예상할 수는 없기 때문에 object finalizers가 언제 실행될지도 모르는 노릇이다. 이 때문에 java 프로그램은 의존적 요소(dependent resources)를 정리하는데 finalizer block에 의존하면 안된다.
root node의 reachable 객체는 특별한 표식을 가지고 표식이 없는 객체는 garbage collected 된다.
All the objects reachable from the root node are marked in some way, the unmarked objects are then garbage collected. The unmarked objects without finalizers may be freed immediately unless referred to by an unmarked finalizable object. All objects referred to by a finalizable object must remain on the heap until after the object has been finalized.
Root Set of References
Garbage detection is accomplished by defining a set of roots that are always accessible to the program. An object is reachable if there exists a path of reference from the roots by which the executing program can access the object. All the objects reachable from the roots are considered live. Any objects referred to by a live object are also considered live. Objects known to be unreachable are eligible for garbage collection. If any of the unreachable objects have finalizers, they must be finalized before they are freed.
http://www.javarticles.com/2016/09/java-garbage-collector-reachable-and-unreachable-objects.html
'웹개발 (자바, 스프링, React) > 자바 개념' 카테고리의 다른 글
자바EE, Spring (0) | 2020.06.18 |
---|---|
애플릿, NPAPI (플러그인, 넷스케이프, 모질라) (0) | 2020.06.18 |
java servlet filter (0) | 2018.09.12 |
자바 연습문제 1번. JVM - Heap Memory (0) | 2018.06.21 |
자바의 정석 1,2 챕터 연습문제 (0) | 2018.06.21 |