ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 객체의 생명주기
    프로그래밍언어론 2023. 3. 27. 16:49

    객체 생명주기

    생명주기를 다루기 위해 사건을 구별해보자.

    1. 객체의 생성(메모리에 인스턴스가 할당되는것)
    2. 바인딩의 생성(변수 이름이 해당 객체와 연결되는것)
    3. 변수, 함수, 타입참조(바인딩을 사용하는 것)
    4. 바인딩의 비활성화(잠시 사용할 수 없음)
    5. 바인딩 파괴
    6. 객체파괴

    이름과 그 이름이 나타내는 객체와의 바인딩이 생성되는 시점부터 파괴될 때까지의 기간을 바
    인딩의 생명주기라고 한다. 비슷하게 객체의 생성과 파괴 사이의 기간을 객체 생
    명주기라고 한다. 이 두 가지 생명주기는 꼭 일치할 필요는 없다. 객체는 주어진
    이름으로 더 이상 그 객체를 참조할 수 없더라도 값을 보유하고 참조될 수 있는 상태로 남아있
    을 수 있다.

    동일한 객체는 여러 개의 이름에 바인딩될 수 있고 각 바인딩은 다른 바인딩생명주
    기를 가질 수 있다. 객체는 살아있는데 그 객체에 대한 모든 바인딩이 해지된 것을 C 계열 언어
    에서는 메모리 누출이라고 한다.

    이름과 객체 사이의 바인딩 생명 주기가 객체보다 긴 경우도 있을 수 있다. 물론 그런 경
    우는 프로그램 오류일 가능성이 높다.
    더 이상 살아있지 않은 객체에 대한 참조를 댕글링 참조(dangling
    reference)라고 한다.

    동적객체의 바인딩 생명주기

    객체 생성후, 이름이 그 객체에 바인딩되며,
    free로 객체를 해지하고, = null로 바인딩을 하지한다.
    스택은 객체와 바인딩이 거의 동시에 일어난다.

    해지된 객체에 바인딩이 남아있으면 * 댕글링 참조

    • 해지된 객체를 가리키는 변수
    • 스택 객체의 주소를 가지는 변수
    • 바인딩 생명주기가 객체생명주기보다 길어짐

    바인딩이 사라지고 객체가 해지되지 않으면

    • 메모리 누출
    • 이로인한 메모리 부족으로 프로그램 종료

    의 문제점이 생긴다.

    728x90

    '프로그래밍언어론' 카테고리의 다른 글

    선언과 정의  (0) 2023.04.09
    범위규칙  (0) 2023.04.09
    힙 할당과 가비지 컬렉터  (0) 2023.03.27
    상수에 대한 간단한 고찰  (0) 2023.03.22
    메모리 영역  (2) 2023.03.20

    댓글

Designed by Tistory.