ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바 - Garbage Collector
    개발 2023. 2. 24. 16:00

    JVM은 Garbage Collector (GC) 를 이용해서 Heap 메모리를 주기적으로 청소한다. GC는 사용하지 않는 객체를 확인하고 삭제해 메모리 공간을 확보하는 역할을 한다

     

    객체가 GC의 대상이 되는 경우는 크게 두가지다.

    • 객체를 참조하는 레퍼런스가 null로 세팅되는 경우
    • 객체를 참조하는 레퍼런스의 범위가 종료되는 경우 (예로 함수 블럭 내에서 실행을 모두 완료하는 경우나 등등)

     

    간단한 예제를 살펴보자. stack 메모리상에 있는 지역변수가 없어지면 그에 상응하는 객체는 더이상 쓸모가 없으므로 GC의 대상이 된다고 본다. 물론 다른 곳에서 참조하고 있다면 GC의 대상이 아니다.

     

    class House() {}
    class Person {}
    
    fun main() {
        val house = House()
        printPerson()
    }
    
    fun printPerson() {
        val person = Person()
    }
    

     

    위 코틀린 코드에서 printPerson호출이 끝나는 시점의 메모리는 아래그림처럼 표현할 수 있다.

     

     

    printPerson()이 실행되는 동안에 stack 영역에 있던 person 변수는 Heap에 있는 Person Object를 바라보고 있었을 것이다. 그런데 실행이 종료되면서 Stack에서 Pop하게 되고, Heap 영역에 있는 Person Object는 아무도 사용하지 않게 된다. GC에서는 이 변수가 더이상 필요가 없는 것으로 파악하고 제거하고 메모리를 확보한다.

     

    객체 유효성을 검증하는 알고리즘으로 Mark and Sweep 알고리즘이 가장 유명하다.

    '개발' 카테고리의 다른 글

    Java - Thread start, run  (0) 2023.02.28
    Java - synchronized, wait, notify  (0) 2023.02.28
    JAVA - 직렬화, 역직렬화  (0) 2023.02.24
    Flask SQLAlchemy vs SQLAlchemy  (0) 2023.02.14
    Python - namedtuple  (0) 2023.02.14

    댓글

Designed by Tistory.