KR20190058706A - 사이클 그래프에서 객체 수명을 관리하는 기법 - Google Patents

사이클 그래프에서 객체 수명을 관리하는 기법 Download PDF

Info

Publication number
KR20190058706A
KR20190058706A KR1020197014616A KR20197014616A KR20190058706A KR 20190058706 A KR20190058706 A KR 20190058706A KR 1020197014616 A KR1020197014616 A KR 1020197014616A KR 20197014616 A KR20197014616 A KR 20197014616A KR 20190058706 A KR20190058706 A KR 20190058706A
Authority
KR
South Korea
Prior art keywords
count
wrapper
garbage collection
graph
computer system
Prior art date
Application number
KR1020197014616A
Other languages
English (en)
Other versions
KR102074113B1 (ko
Inventor
마이클 존 힐버그
라자 크리쉬나스와미
Original Assignee
마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 filed Critical 마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Publication of KR20190058706A publication Critical patent/KR20190058706A/ko
Application granted granted Critical
Publication of KR102074113B1 publication Critical patent/KR102074113B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/215Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • G06F12/0261Garbage collection, i.e. reclamation of unreferenced memory using reference counting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2237Vectors, bitmaps or matrices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc
    • G06F2212/1036Life time enhancement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7205Cleaning, compaction, garbage collection, erase control

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Memory System (AREA)
  • Processing Of Solid Wastes (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Stored Programmes (AREA)

Abstract

본 발명은 사이클 그래프에서 객체 수명을 관리하는 방법, 시스템 및 컴퓨터 프로그램 제품으로 확장된다. 본 발명의 실시예는 예를 들어 상이한 리소스 회수(reclamation) 기법(예를 들어, 참조 카운팅 및 가비지 콜렉션)을 혼합하는 객체들의 그래프로부터, 할당된 시스템 리소스들을 회수하는 단계를 포함한다. 가비지 콜렉션이 수행될 것이라는 판정에 응답하여, GC 객체와 참조 카운트 객체 간의 참조가 검출된다. 임의의 검출된 참조에 대한 참조 타입(예를 들어, 직접, 간접, 표준, 추적, 약한, 등)이 결정된다. 가비지 콜렉션은 임의의 할당된 시스템 리소스들이 회수될 수 있는지를 결정하도록 구현된다. 가비지 콜렉션은 객체들이 회수되는지 여부를 판정할 때 GC 객체와 참조 카운트 객체 간의 참조 및 참조 유형을 고려한다.

Description

사이클 그래프에서 객체 수명을 관리하는 기법{MANAGING OBJECT LIFETIME IN A CYCLIC GRAPH}
컴퓨터 시스템 및 관련 기술은 사회의 여러 면에 영향을 미친다. 사실, 컴퓨터 시스템의 정보 처리 능력은 우리가 살고 일하는 방식을 변화시켰다. 컴퓨터 시스템은 이제 흔히 컴퓨터 시스템이 등장하기 전에 수작업으로 행했던 다수의 작업(예를 들어, 워드 프로세싱, 스케줄링, 회계업무 등)을 수행한다. 보다 최근에는, 컴퓨터 시스템들은 서로 및 다른 전자 장치에 연결되어 유선 및 무선 컴퓨터 네트워크를 형성하고 이 네트워크를 통해 컴퓨터 시스템 및 다른 전자 장치가 전자 데이터를 전달할 수 있다. 따라서, 다수의 컴퓨팅 작업의 실행은 다수의 상이한 컴퓨터 시스템 및/또는 다수의 상이한 컴퓨팅 환경에 걸쳐 분산된다.
몇몇 프로그래밍 환경(예컨대, C++)은 객체들이 더 이상 참조되지 않아 객체들을 저장하는데 사용되는 메모리가 해제(release)될 수 있는 때를 판정하기 위한 메카니즘으로서 참조 카운팅을 사용한다. 객체들의 수명은 객체가 직접 참조될 수 없는 경우 그 객체를 메모리로부터 제거함으로써 관리된다. 하나의 객체가 다른 객체를 참조하는 경우, 참조된 객체에 대한 참조 카운트는 증가된다. 하나의 객체가 다른 객체를 역참조(dereference)하는 경우, 그 객체에 대한 참조 카운트는 감소된다. 객체에 대한 참조 카운트가 0에 도달하는 경우, 그 객체는 액세스 불가능하고 파괴될 수 있다.
그러나, 참조 카운팅은 비교적 정교하지 못하고 메모리 누수를 야기할 수 있다(즉, 사용되지 않은 및 액세스 불가능할 수 있는 객체들이 메모리를 계속 소비할 수 있다). 예를 들어, 두 개의 객체가 서로 참조할 수 있지만 임의의 다른 객체에 의해서는 참조되지 않아 결과적으로 하나의 사이클(cycle)이 일어날 수 있다. 한 사이클이 발생하면, 참조 카운팅은 두 객체가 단순히 서로를 참조할 뿐 그와 다르게는 참조되지 않음을 판정할 수 없을 수 있다. 그에 따라, 두 객체에 대한 메모리는 해제되지 않아 메모리 누수를 야기한다.
다른 프로그래밍 환경(예를 들어, C#)은 객체들이 더 이상 참조되지 않아 객체들을 저장하는데 사용되는 메모리가 해제될 수 있는 때를 판정하기 위한 메카니즘으로서 가비지 콜렉션(garbage collection)을 사용한다. 가비지 콜렉션은 직접적으로 또는 간접적으로 참조될 수 없는 객체들을 발견하여 이들을 제거함으로써 객체들의 수명을 관리한다. 가비지 콜렉션은 간접 참조를 고려함으로써 사이클과 연관된 문제를 해결한다.
몇몇 프로그래밍 환경은 참조 카운트 객체(reference counted objects) 및 가비지 콜렉트 객체(garbage collected objects)를 이용한다. 예를 들어, 개발자는 상이한 객체 수명 관리 기법을 사용하는 상이한 프로그래밍 언어의 장점을 취하려 할 수 있다. 이러한 혼합된 프로그래밍 환경에서, 참조 카운트 객체들은 가비지 콜렉트 객체들을 참조할 수 있고 및/또는 가비지 콜렉트 객체들은 참조 카운트 객체들을 참조할 수 있다. 그러나, 가비지 콜렉션 시스템은 참조 카운트 객체들에 걸쳐 간접 참조를 추적할 수 없다. 따라서, 혼합된 프로그래밍 환경에서, 메모리 누수는 여전히 발생할 수 있다.
본 발명은 사이클 그래프에서 객체 수명을 관리하는 방법, 시스템 및 컴퓨터 프로그램 제품으로 확장된다. 본 발명의 실시예는 예를 들어 상이한 리소스 회수(reclamation) 기법을 혼합하는 객체들의 그래프로부터, 할당된 시스템 리소스들의 회수를 준비하고 그 할당된 시스템 리소스들을 회수하는 단계를 포함한다. 몇몇 실시예에서, 컴퓨터 시스템은 가비지 콜렉션이 구현될 것으로 판정한다. 가비지 콜렉션이 구현될 것이라는 판정에 응답하여, 가비지 콜렉션에 따라 관리되는 객체들과 참조 카운팅에 따라 관리되는 객체들 간의 참조가 검출된다. 임의의 검출된 참조에 대한 참조 타입(예를 들어, 직접, 간접, 표준, 추적, 약한, 등)이 결정된다. 가비지 콜렉션은 임의의 할당된 시스템 리소스들이 회수될 수 있는지를 결정하도록 구현된다. 가비지 콜렉션은 가비지 콜렉션에 따라 관리되는 객체들과 참조 카운팅에 따라 관리되는 객체들 간의 참조 및 참조 유형을, 시스템 리소스 회수 결정의 일부로서 고려한다.
일반적으로, 객체들은 다른 객체로 및/또는 그로부터의 참조의 생성 및/또는 제거를 요청할 수 있다. 예를 들어, (예컨대, 시스템 리소스들을 회수하기 위해) 객체가 수집되는 경우, 수집될 객체로부터 참조된 다른 객체들은 수집될 객체가 그래프로부터 제거되기 전에 통보받을 수 있다. 그 통보에 응답하여, 참조되는 객체는 그 참조되는 객체로부터 추가의 객체로의 약화된 참조를 끊을 수 있다. 가비지 콜렉션은 임의의 또 다른 할당된 시스템 리소스들이 회수될 수 있는지 여부를 계속 결정할 수 있다. 계속되는 가비지 콜렉션은 다른 객체로부터 추가의 객체로의 약화된 참조는 끊어지는 것으로 간주한다.
본 요약은 이하 발명의 상세한 설명에서 보다 자세히 기술될 개념들 중 선택된 것들을 단순화된 형식으로 소개하기 위해 제공되는 것이다. 본 요약은 청구항에 기재된 청구대상의 주된 사항 또는 핵심 사항을 밝히기 위한 것이 아니며, 청구항에 기재된 청구대상의 범위를 한정하는데 도움을 주려고 하는데 사용되지도 않는다.
본 발명의 추가적인 특징 및 장점은 이하의 상세한 설명에서 설명될 것이며 그 상세한 설명으로부터 부분적으로 자명할 것이며, 또는 본 발명의 실시를 통해 학습될 수 있다. 본 발명의 특징 및 장점은 특히 청구항에 기재된 도구 및 조합들에 의해 실현 및 획득될 수 있다. 본 발명의 이들 및 다른 특징은 후속하는 상세한 설명 및 첨부한 청구항으로부터 보다 완전히 드러날 것이며, 또는 이하에서 설명된 본 발명의 실시를 통해 학습될 수 있다.
본 발명의 전술한 및 다른 장점 및 특징이 얻어질 수 있는 방식을 설명하기 위해, 앞서 간략히 설명한 발명의 보다 특정한 설명이 첨부한 도면에 도시되어 있는 본 발명의 특정 실시예를 참조하여 표현될 것이다. 이들 도면은 본 발명의 전형적인 실시예를 나타낼 뿐이며 따라서 본 발명의 범주를 제한하는 것으로 간주되지 않음을 이해한다면, 본 발명은 첨부한 도면과 함께 보다 구체적이고 자세하게 기술 및 설명될 것이다.
도 1a는 사이클 그래프에서 객체 수명을 관리하는 것을 용이하게 하는 예시적인 컴퓨터 아키텍처를 나타내는 도면.
도 1b는 예시적인 사이클 그래프를 나타내는 도면.
도 1c는 예시적인 사이클 그래프를 나타내는 도면.
도 1d는 예시적인 사이클 그래프를 나타내는 도면.
도 1e는 예시적인 사이클 그래프를 나타내는 도면.
도 1f는 예시적인 사이클 그래프를 나타내는 도면.
도 2는 시스템 리소스들을 회수하려 시도하는 준비로서 카운트 객체 그래프(counted object graph)로부터의 참조 정보를 가비지 콜렉트 객체 그래프(garbage collected object graph)와 동기화시키는 예시적인 방법의 흐름도.
도 3은 시스템 리소스들을 회수하려 시도하는 준비로서 참조 카운트 객체가 어떻게 참조되는지를 결정하기 위한 예시적인 방법의 흐름도.
도 4는 할당된 시스템 리소스들을 회수하기 위한 예시적인 방법에 대한 흐름도.
본 발명은 사이클 그래프에서 객체 수명을 관리하는 방법, 시스템 및 컴퓨터 프로그램 제품으로 확장된다. 본 발명의 실시예는 예를 들어 상이한 리소스 회수 기법을 혼합하는 객체들의 그래프로부터, 할당된 시스템 리소스들을 회수하는 단계를 포함한다. 몇몇 실시예에서, 컴퓨터 시스템은 가비지 콜렉션이 구현될 것으로 판정한다. 가비지 콜렉션이 구현될 것이라는 판정에 응답하여, 가비지 콜렉션에 따라 관리되는 객체들과 참조 카운팅에 따라 관리되는 객체들 간의 참조가 검출된다. 임의의 검출된 참조에 대한 참조 타입(예를 들어, 직접, 간접, 표준, 추적된, 약화된, 등)이 또한 결정된다. 가비지 콜렉션은 임의의 할당된 시스템 리소스들이 회수될 수 있는지를 결정하도록 구현된다. 가비지 콜렉션은 가비지 콜렉션에 따라 관리되는 객체들과 참조 카운팅에 따라 관리되는 객체들 간의 참조 및 참조 유형을, 시스템 리소스 회수 결정의 일부로서 고려한다.
일반적으로, 객체들은 다른 객체로 및/또는 그로부터의 참조의 생성 및/또는 제거를 요청할 수 있다. 예를 들어, (예컨대, 시스템 리소스들을 회수하기 위해) 객체가 수집되는 경우, 수집될 객체로부터 참조된 다른 객체들은 수집될 객체가 그래프로부터 제거되기 전에 통보받을 수 있다. 그 통보에 응답하여, 참조되는 객체는 그 참조되는 객체로부터 추가의 객체로의 약화된 참조를 끊을 수 있다. 가비지 콜렉션은 임의의 또 다른 할당된 시스템 리소스들이 회수될 수 있는지 여부를 계속 결정할 수 있다. 계속되는 가비지 콜렉션은 다른 객체로부터 추가의 객체로의 약화된 참조는 끊어지는 것으로 간주한다.
본 발명의 실시예는 이하에서 더 자세히 설명되는 바와 같이 예를 들어 하나 이상의 프로세서 및 시스템 메모리와 같은 컴퓨터 하드웨어를 포함하는 전용 또는 범용 컴퓨터를 포함 또는 이용할 수 있다. 본 발명의 범주 내의 실시예들은 또한 컴퓨터 실행가능 명령어들 및/또는 데이터 구조를 전달 또는 저장하기 위한 물리적 및 다른 컴퓨터 판독가능 매체를 포함한다. 이러한 컴퓨터 판독가능 매체는 전용 또는 범용 컴퓨터 시스템에 의해 액세스될 수 있는 임의의 이용가능 매체일 수 있다. 컴퓨터 실행가능 명령어들을 저장하는 컴퓨터 판독가능 매체는 컴퓨터 저장 매체(장치)이다. 컴퓨터 실행가능 명령어들을 전달하는 컴퓨터 판독가능 매체는 전송 매체이다. 따라서, 예를 들어, 본 발명의 실시예는 적어도 두 개의 구별되는 상이한 종류의 컴퓨터 판독가능 매체, 즉 컴퓨터 저장 매체(장치) 및 전송 매체를 포함할 수 있다.
컴퓨터 저장 매체(장치)는 RAM, ROM, EEPROM, CD-ROM, (예를 들어, RAM에 기초한) 고체 상태 드라이브("SSD"), 플래시 메모리, 상 변화 메모리("PCM"), 다른 유형의 메모리, 다른 광학 디스크 저장소, 자기 디스크 저장소, 또는 다른 자기 저장 장치, 또는 컴퓨터 실행가능 명령어들의 형태의 원하는 프로그램 코드 수단 또는 데이터 구조를 저장하는데 사용될 수 있고 전용 또는 범용 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함한다.
"네트워크"는 컴퓨터 시스템 및/또는 모듈 및/또는 다른 전자 장치 사이에서 전자 데이터의 전송을 가능하게 하는 하나 이상의 데이터 링크로서 정의된다. 네트워크 또는 다른 통신 연결(유선, 무선 또는 유선과 무선의 조합)을 통해 정보가 컴퓨터로 전송 또는 제공되는 경우, 컴퓨터는 사실 그 연결을 전송 매체로서 본다. 전송 매체는 컴퓨터 실행가능 명령어들의 형태의 원하는 프로그램 코드 수단 또는 데이터 구조를 전달하는데 사용될 수 있고 전용 또는 범용 컴퓨터에 의해 액세스될 수 있는 네트워크 및/또는 데이터 링크를 포함할 수 있다. 전술한 것들의 조합이 컴퓨터 판독가능 매체의 범주 내에 포함되어야 한다.
또한, 다양한 컴퓨터 시스템 구성요소에 도달하게 되면, 컴퓨터 실행가능 명령어들의 형태의 프로그램 코드 수단은 전송 매체로부터 컴퓨터 저장 매체(장치)로 (또는 그 반대로) 자동으로 전송될 수 있다. 예를 들어, 네트워크 또는 데이터 링크를 통해 수신된 컴퓨터 실행가능 명령어들 또는 데이터 구조는 네트워크 인터페이스 모듈(예를 들어, "NIC") 내의 RAM에 버퍼링될 수 있고, 그럼 다음 최종적으로 컴퓨터 시스템 RAM 및/또는 컴퓨터 시스템에서의 소규모의 휘발성 컴퓨터 저장 매체(장치)로 전송될 수 있다. 따라서, 컴퓨터 저장 매체(장치)는 전송 매체를 또한 (또는 심지어 주로) 이용하는 컴퓨터 시스템 컴포넌트에 포함될 수 있다.
컴퓨터 실행가능 명령어들은 예를 들어 프로세서에서 실행되는 경우 범용 컴퓨터, 전용 컴퓨터, 또는 전용 처리 장치로 하여금 소정의 기능 또는 기능들의 그룹을 수행하게 하는 명령어들 및 데이터를 포함한다. 컴퓨터 실행가능 명령어들은 이진수, 어셈블리 언어와 같은 중간 포맷의 명령어들, 또는 심지어 소스 코드일 수 있다. 본 발명은 구조적 특징 및/또는 방법론적 동작에 특정한 언어로 기술되었지만, 청구항에 정의된 본 발명은 전술한 특징들 또는 동작들에 반드시 국한될 필요는 없음을 이해해야 한다. 그보다, 기술된 특징들 및 동작들은 청구항을 구현하는 예시적인 형태로서 개시된다.
당업자라면, 본 발명은 개인용 컴퓨터, 데스크톱 컴퓨터, 랩탑 컴퓨터, 메시지 프로세서, 핸드헬드 장치, 멀티프로세서 시스템, 마이크로프로세서 기반 또는 프로그램가능 소비자 전자기기, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 이동 전화기, PDA, 태블릿, 페이저, 라우터, 스위치 등을 비롯하여, 여러 유형의 컴퓨터 시스템 구성을 갖는 네트워크 컴퓨팅 환경에서 실시될 수 있음을 알 수 있을 것이다. 본 발명은 또한 네트워크를 통해 (유선 데이터 링크, 무선 데이터 링크 또는 유선 및 무선 데이터 링크의 조합에 의해) 링크되는 로컬 및 원격 컴퓨터 시스템 모두가 작업을 수행하는 분산형 시스템 환경에서 실시될 수 있다. 분산형 시스템 환경에서, 프로그램 모듈은 로컬 및 원격 메모리 저장 장치 모두에 위치할 수 있다.
상세한 설명 및 그에 후속하는 청구항에서, "참조 래퍼(Reference Wrapper)"("RW")는 가비지 콜렉션에 따라 회수된(reclaimed) 객체(이하, "GC 객체"로서 지칭될 수 있음)로서 정의되고 또 다른 GC 객체로부터 참조 카운팅에 따라 회수되는 추가의 객체(이하, "참조 카운트(Ref. Counted) 객체"로서 지칭될 수 있음)로의 참조를 저장한다. 즉, RW는 GC 객체로부터 참조 카운트 객체로의 참조를 저장한다.
상세한 설명 및 그에 후속하는 청구항에서, "카운트 래퍼(Counted Wrapper)"("CW")는 또 다른 참조 카운트 객체로부터 GC 객체로의 참조를 저장하는 참조 카운트 객체로서 정의된다. 즉, CW는 참조 카운트 객체로부터 GC 객체로의 참조를 저장한다.
상세한 설명 및 그에 후속하는 청구항에서, "표준 참조"는 임의의 참조 카운트 참조로서 정의된다. 예를 들어, COM(common object model) 참조는 객체 참조 카운팅 알고리즘의 일 예이다. 표준 참조는 주소참조/해제(AddRef/Release) 패턴에 따라 구현될 수 있다.
상세한 설명 및 그에 후속하는 청구항에서, "추적 참조"는 표준 참조와 유사하나 가비지 콜렉션 동안 객체로도 통신되는 참조로서 정의된다. 이 통신은 참조 카운트 객체(예를 들어, CW)가 RW를 이용하는 것 이외의 소정의 방식으로 (직접적으로 또는 간접적으로) 도달가능한지 여부를 나타낼 수 있다. 참조 카운트 객체가 RW를 이용하는 것 이외의 방식으로 도달가능한 경우, 참조 카운트 객체는 보호(또는 "고정(pegged)")될 수 있다. 보호되는 경우, 참조 카운트 객체를 직접 참조하는 RW 또는 다른 GC 객체가 가비지 콜렉션에서 배제되지 않는 경우에도 참조 카운트 객체는 가비지 콜렉션에서 배제될 수 있다. 참조 카운트 객체가 RW를 통해서만 도달가능한 경우, 참조 카운트 객체는 보호되지 않는다.
상세한 설명 및 그에 후속하는 청구항에서, "약한 참조"는 객체가 회수되지 않도록 하는 일 없이 그 객체를 참조하는데 사용되는 참조이다. 즉, 약한 참조는 약한 참조에 의해 직접 참조되는 객체의 수명을 제어하지 않는다.
몇몇 실시예에서, 가비지 콜렉션 전에 (예를 들어, GC 시스템이 메모리로부터 제거될 수 있는 GC 객체를 식별하는 경우), GC 시스템은 모든 RW로 이동하여 카운트 객체 그래프를 통해 어떤 CW들이 도달될 수 있는지를 판정한다. RW 타겟으로부터 CW로 이동하는 방법이 여러 개 있는 경우, 하나 이상이 발견될 수 있다. 매 발견마다, RW와 CW 타겟(또 다른 GC 객체임) 간의 GC 의존성이 생성된다. 따라서, RW 객체가 GC 동작 동안 수집되지 않는 경우, CW의 타겟도 수집되지 않는다. 즉, RW는 CW 타겟의 수명의 보호자이다.
다른 실시예에서, 가비지 콜렉션 이전에, 카운트 객체 시스템은 고정되어야 하는 CW를 식별한다. CW는 RW를 통하는 것 이외에 (직접적으로 또는 간접적으로) CW로 가는 방식이 있는 경우 고정되어야 한다. 즉, CW를 직접 참조하는 RW 또는 다른 GC 객체가 가비지 콜렉션 프로세스에서 배제되지 않는 경우에도 CW 타겟은 가비지 콜렉션으로부터 보호되어야 한다.
이들 사전-콜렉션 동작은 잠금 메카니즘과 함께 카운트 객체들 간의 참조를 보호하는데 사용될 수 있다.
도 1a는 사이클 그래프에서 객체 수명을 관리하는 것을 용이하게 하는 예시적인 컴퓨터 아키텍처(100)를 나타낸다. 컴퓨터 아키텍처(100)는 수명 관리 모듈(101), 카운트 객체 그래프(106) 및 가비지 콜렉트 객체 그래프(107)를 포함한다. 카운트 객체 그래프(106)에서의 참조 카운트 객체(151)는 가비지 콜렉트 객체 그래프(107)에서의 참조 GC 객체(152)를 참조할 수 있고 또한 그 반대로 참조할 수 있다. 참조 카운트 객체(151)와 GC 객체(152) 간의 참조는 사이클 그래프(109)를 형성할 수 있다.
일반적으로, 수명 관리 모듈(101)은 예를 들어 사이클 그래프(109)와 같은 사이클 그래프에서 객체 수명을 관리하도록 구성된다. 도시되어 있는 바와 같이, 수명 관리 모듈(101)은 참조 카운팅 컴포넌트(102), 분석 컴포넌트(103) 및 가비지 콜렉션 컴포넌트(104)를 포함한다.
참조 카운팅 컴포넌트(102)는 사이클 그래프 내에서 객체들에 대한 참조를 계산하도록 구성된다. 참조 카운팅 컴포넌트(102)는 객체들에 대한 참조를 계산하기 위해 대부분의 임의의 참조 카운팅 기법을 채용할 수 있다. 참조는 객체들 간의 외부 참조 또는 내부 참조를 포함할 수 있다. 참조 카운팅 컴포넌트(102)는 객체에 대한 총 참조 횟수를 결정할 수 있고 그에 따라 참조 카운트를 객체에 할당할 수 있다.
분석 컴포넌트(103)는 사이클 그래프에서 객체들에 대한 참조를 분석하도록 구성된다. 분석에 기초하여, 분석 컴포넌트(103)는 객체들 간의 참조를 약화 또는 강화시킬 수 있다. 분석 컴포넌트(103)는 분석에 기초하여, 참조 카운팅 시스템으로부터 가비지 콜렉션 시스템으로 그리고 다시 원래대로의 천이를 결정할 수 있다.
일반적으로, 수명 관리 모듈(101)은 가비지 콜렉션 컴포넌트(104)를 이용함으로써 사용되지 않은 객체들을 파괴 또는 내버려둘 수 있다. 객체가 도달가능하지 않아 객체에 대한 직접적인 또는 간접적인 참조가 존재하지 않는 경우, 객체는 수집될 수 있다. 가비지 콜렉션 컴포넌트(104)는 객체에 대한 도달가능성 정보에 기초하여 객체가 파괴되어야 하는지를 결정할 수 있다. 도달가능성 정보는 참조 카운팅 컴포넌트(102) 및/또는 분석 컴포넌트(103)에 의해 제공될 수 있다.
본 발명의 실시예들은 참조 카운트 정보를 가비지 콜렉션과 동기화시키는 것을 포함한다. 참조 카운트 측으로부터 GC 측으로의 참조 정보는 GC 프로세스 동안 또는 그 일부로서 제공된다. 즉, RW로부터 CW 타겟으로의 참조는 GC 동안 행해지고, GC 프로세스가 완료된 후 버려질 수 있다(다음 GC에서 적절히 재생성된다). 이와 달리 및/또는 조합하여, 성능 최적화를 위한 소정 유형의 캐싱이 사용될 수 있다.
도 1b는 예시적인 사이클 그래프(109)를 나타낸다. 도 1b를 참조하면, 사이클 그래프(109)는 참조 카운트 객체(111,112), GC 객체(114,116), 카운트 래퍼(113) 및 참조 래퍼(117)를 포함한다. GC 객체(114)는 참조 래퍼(117)를 통해 참조 카운트 객체(111)를 참조한다(참조 126). 참조 카운트 객체(112)는 카운트 래퍼(113)를 통해 GC 객체(116)를 참조한다(참조 123). 참조(121)(외부 참조) 또한 참조 카운트 객체(111)를 참조한다.
도 2는 사이클 그래프에서 객체 수명을 관리하는 예시적인 방법(200)에 대한 흐름도를 나타낸다. 방법(200)은 도 1b에 도시되어 있는 사이클 그래프(109) 및 컴퓨터 아키텍처(100)의 컴포넌트들과 관련하여 설명될 것이다.
방법(200)은 가비지 콜렉션이 수행될 것으로 판정하는 동작(201)을 포함한다. 예를 들어, 가비지 콜렉션 컴포넌트(104)는 사이클 그래프(109)의 가비지 콜렉션이 수행될 것으로 판정할 수 있다.
그 판정에 응답하여 또한 가비지 콜렉션을 수행하기 전에, 방법(200)은 카운트 래퍼가 카운트 객체 그래프를 통해 참조 래퍼로부터 도달될 수 있음을 판정하는 동작(202)을 포함한다. 예를 들어, 분석 컴포넌트(103)는 카운트 래퍼(113)가 참조 래퍼(117)로부터 도달될 수 있음을 판정할 수 있다. 그 판정에 응답하여 또한 가비지 콜렉션을 수행하기 전에, 방법(200)은 또한 참조 래퍼로부터 GC 객체로의 참조를 생성함으로써 카운트 래퍼를 통해 참조된 GC 객체의 수명을 보호하는 동작(203)을 포함한다. 예를 들어, 분석 모듈(103)은 참조 래퍼(117)로부터 GC 객체(116)로의 참조를 생성함으로써 GC 객체(116)를 보호할 수 있다.
방법(200)은 임의의 할당된 시스템 리소스가 회수될 수 있는지를 판정하기 위해 가비지 콜렉션을 수행하는 동작(204)을 포함하는데, 가비지 콜렉션은 GC 객체가 사실상 참조 래퍼에 의해 참조되는 것으로 간주한다. 예를 들어, 가비지 콜렉션 컴포넌트(104)는 사이클 그래프(109) 상에서 가비지 콜렉션을 수행할 수 있다. 가비지 콜렉션은 사이클 그래프(109)의 객체들에 대해 할당된 임의의 리소스가 회수될 수 있는지를 판정할 수 있다. 가비지 콜렉션 컴포넌트(104)는 GC 객체(116)가 사실상 참조 래퍼(117)에 의해 참조되는 것(참조 127)으로 간주할 수 있다.
방법(200)은 가비지 콜렉션에 후속하여 참조 래퍼와 GC 객체 간의 참조를 제거하는 동작(205)을 포함한다. 예를 들어, 사이클 그래프(109) 상에서의 가비지 콜렉션에 후속하여, 분석 모듈(103)은 참조(127)를 제거할 수 있다.
도 1c는 예시적인 사이클 그래프(109)를 나타낸다. 도 1b와 유사하게, 도 1c의 사이클 그래프(109)는 참조 카운트 객체(111,112), GC 객체(114,116), 카운트 래퍼(113) 및 참조 래퍼(117)를 포함한다. GC 객체(114)는 참조 래퍼(117)를 통해 참조 카운트 객체(111)를 참조한다(참조 126). 참조 카운트 객체(112)는 카운트 래퍼(113)를 통해 GC 객체(116)를 참조한다(참조 123). 참조(121)(외부 참조) 또한 참조 카운트 객체(111)를 참조한다.
도 3은 시스템 리소스들을 회수하려 시도하는 준비로서 참조 카운트 객체가 어떻게 참조되는지를 결정하는 예시적인 방법(300)의 흐름도를 나타낸다. 방법(300)은 도 1c에 도시되어 있는 사이클 그래프(109) 및 컴퓨터 아키텍처(100)의 컴포넌트들과 관련하여 설명될 것이다.
방법(300)은 가비지 콜렉션이 수행될 것으로 판정하는 동작(301)을 포함한다. 예를 들어, 가비지 콜렉션 컴포넌트(104)는 사이클 그래프(109)의 가비지 콜렉션이 수행될 것으로 판정할 수 있다.
그 판정에 응답하여 또한 가비지 콜렉션을 수행하기 전에, 방법(300)은 지정된 타입의 참조에 의한 참조 카운트 객체의 도달가능성을 판정하는 동작(302)을 포함한다. 예를 들어, 분석 컴포넌트(103)는 표준 및/또는 추적 참조에 의한 카운트 래퍼(113)의 도달가능성을 판정할 수 있다. 도 1c에 도시되어 있는 바와 같이, 카운트 래퍼(113)는 참조(121)(표준 참조) 및 참조(126)(추적 참조)로부터 도달가능하다.
그 판정에 응답하여 또한 가비지 콜렉션을 수행하기 전에, 방법(300)은 또한 지정된 타입의 참조에 기초하여 가비지 콜렉션에 관련된 정보에 액세스하는 동작(303)을 포함한다. 예를 들어, 참조 카운팅 컴포넌트(102)는 사이클 그래프(109)의 가비지 콜렉션에 관련된 참조(121) 및/또는 참조(126)로부터 정보에 액세스할 수 있다. 참조(121)와 관련하여, 참조 카운팅 컴포넌트(102)는 참조(121)가 표준 참조임을 나타내는 정보에 액세스할 수 있다.
참조(126)와 관련하여, 참조 카운팅 컴포넌트(102)는 참조(126)가 표준 참조임을 나타내는 정보에 액세스할 수 있다. 참조(126)로부터, 참조 카운팅 컴포넌트(102)는 또한 카운트 래퍼(113)가 RW 이외의 객체를 통해 도달가능한지를 액세스할 수 있다. 도 1c에서, 참조(126)는 카운트 래퍼(113)가 참조 래퍼(117)로부터만 도달가능함을 나타낼 수 있다. 그러나, 표준 참조(121)를 통한 도달가능성에 기초하여, 참조 카운팅 컴포넌트(102)는 가비지 콜렉션 동안 보호를 위해 카운트 래퍼(113)를 고정시킬 수 있다.
방법(300)은 임의의 할당된 시스템 리소스가 회수될 수 있는지를 판정하기 위해 가비지 콜렉션을 수행하는 동작(304)을 포함하는데, 가비지 콜렉션은 참조 카운트 객체가 회수되는 지를 결정할 때 액세스된 정보를 고려한다. 예를 들어, 가비지 콜렉션 컴포넌트(104)는 사이클 그래프(109) 상에서 가비지 콜렉션을 수행할 수 있다. 가비지 콜렉션은 참조(121, 126)로부터 액세스된 정보를 고려할 수 있다. 카운트 래퍼(113)가 참조 카운팅 컴포넌트(102)에 의해 고정되는 것에 기초하여, 카운트 래퍼(113)(및 사이클 그래프(109) 내의 임의의 다른 객체)는 회수되지 않고 메모리에 유지된다.
즉, 참조(121)가 존재하기 때문에, 카운트 래퍼(112)는 고정된다. 고정 카운트 래퍼(113)는 GC 객체(116)가 가비지 콜렉션 컴포넌트(104)에 의해 전역적으로 도달가능한 것으로 간주됨을 나타낸다. 가비지 콜렉션 동안, 어떠한 객체도 제거되지 않는다. 가비지 콜렉션 컴포넌트(104)는 GC 객체(116)를 존속시키며(keep alive)하며, 참조(124)는 가비지 콜렉션이 GC 객체(114)를 존속시키도록 하여 RW(117)를 존속시킨다. RW(117)가 참조 카운트 객체(111)에 대한 카운트 참조를 존속시키기 때문에, 참조 카운트 객체(111,112)는 참조(122)로 인해 존속 상태를 유지한다.
이제 도 1d를 참조하면, 도 1d는 예시적인 사이클 그래프(109)를 나타낸다.도 1d의 사이클 그래프(109)는 참조 카운트 객체(111,112), GC 객체(114,116), 카운트 래퍼(113) 및 참조 래퍼(117)를 포함한다. GC 객체(114)는 참조 래퍼(117)를 통해 참조 카운트 객체(111)를 참조한다(참조 126). 참조 카운트 객체(112)는 카운트 래퍼(113)를 통해 GC 객체(116)를 참조한다(참조 123). 참조(128)(외부 참조) 또한 참조 GC 객체(114)를 참조한다.
도 1d에서, 분석 모듈(103)은 카운트 래퍼(113)가 참조(126)(추적 참조)로부터 도달가능함을 결정할 수 있다. 참조 카운팅 컴포넌트(102)는 사이클 그래프(109)의 가비지 콜렉션에 관련된 참조(126)로부터 정보에 액세스할 수 있다. 참조(126)와 관련하여, 참조 카운팅 컴포넌트(102)는 참조(126)가 추적 참조임을 나타내는 정보에 액세스할 수 있다. 참조(126)로부터, 참조 카운팅 컴포넌트(102)는 또한 카운트 래퍼(113)가 RW 이외의 객체를 통해 도달가능한지를 액세스할 수 있다.
도 1d에서, 참조(126)는 카운트 래퍼(113)가 참조(128)를 통해 다른 객체로부터 도달가능함을 나타낼 수 있다. 그에 따라, 참조 카운팅 컴포넌트(102)는 카운트 래퍼(113)를 고정시킬 수 있다. 카운트 래퍼(113)가 고정되는 것에 기초하여, 카운트 래퍼(113)(및 사이클 그래프(109) 내의 임의의 다른 객체)는 회수되지 않는다. 즉, 참조(128)(GC 객체(114)에 대한 직접적인 또는 간접적인 전역 GC 참조)가 존재하는 이래로, 모든 객체는 메모리에 유지된다. 예를 들어, 참조(128)가 직접적으로 전역 GC 참조가 아닐 수 있는 경우, 참조(128)는 그 자체가 전역 GC 참조에 의해 참조되는 객체로부터의 참조일 수 있다. 참조(128)는 가비지 콜렉션 컴포넌트(104)가 GC 객체(114)를 존속시키도록 하여 참조 래퍼(117)를 존속시킨다. 도 1b로 돌아가서, 참조(127)와 유사한 참조는 GC 객체(116)를 존속시킬 수 있다.
이제 도 1e를 참조하면, 도 1e는 예시적인 사이클 그래프(109)를 나타낸다.도 1e의 사이클 그래프(109)는 참조 카운트 객체(111,112), GC 객체(114,116), 카운트 래퍼(113) 및 참조 래퍼(117)를 포함한다. GC 객체(114)는 참조 래퍼(117)를 통해 참조 카운트 객체(111)를 참조한다(참조 126). 참조 카운트 객체(112)는 카운트 래퍼(113)를 통해 GC 객체(116)를 참조한다(참조 123).
도 1e에서, 분석 모듈(103)은 카운트 래퍼(113)가 참조(126)(추적 참조)로부터 도달가능함을 결정할 수 있다. 참조 카운팅 컴포넌트(102)는 사이클 그래프(109)의 가비지 콜렉션에 관련된 참조(126)로부터 정보에 액세스할 수 있다. 참조(126)와 관련하여, 참조 카운팅 컴포넌트(102)는 참조(126)가 추적 참조임을 나타내는 정보에 액세스할 수 있다. 참조(126)로부터, 참조 카운팅 컴포넌트(102)는 또한 카운트 래퍼(113)가 RW 이외의 객체를 통해 도달가능한지를 액세스할 수 있다.
도 1e에서, 참조(126)는 카운트 래퍼(113)가 참조 래퍼(117)로부터만 도달가능함을 나타낼 수 있다. 그에 따라, 참조 카운팅 컴포넌트(102)는 카운트 래퍼(113)를 고정시키지 않는다. 카운트 래퍼(113)가 고정되지 않기 때문에, 그것은 가비지 콜렉션 동안 회수될 수 (또한 그럴 수도) 있다.
도 1e에서, 모든 객체는 가비지 콜렉션 프로세스에 의해 제거된다. 가비지 콜렉션 컴포넌트(104)는 GC 객체(114)에 대한 참조가 없기 때문에 GC 객체(114)를 제거할 수 있고, 또한 그와 유사하게 참조 래퍼(117)를 제거할 수 있다. 참조 래퍼(117)의 제거 동안, 참조(126)(참조 카운트 객체(111)에 대한 카운트)는 제거된다. 카운트의 제거는 참조 카운트 객체(111)로 하여금 참조 카운트 객체(112)로부터의 그의 카운트를 제거한 후 그 자신을 메모리로부터 제거하게 한다. 그와 유사하게 참조 카운트 객체(112)는 자신을 메모리로부터 제거하기 전에 카운트 래퍼(113)로부터 그의 카운트를 제거한다. 카운트 래퍼(113)는 GC 객체(116)에 대한 참조를 제거하는데, 이를 가비지 콜렉션 컴포넌트(104)는 GC 객체(116)를 메모리로부터 제거하라는 신호로서 인식한다.
본 발명의 또 다른 실시예는 수집 통보를 포함한다. GC 객체는 수집되었을 때 그러나 (이후 본 명세서에서 기술되는) 마무리 이전에 참조 카운트 객체에 통보한다. 이 통보는 참조 카운트 객체가 GC 객체가 마무리될 때까지는 실제로 해제되지 않는다는 것을 고려할 수 있다. 이 통보는 또한 참조 카운트 측에 대한 약한 참조가 연결해제되는 것을 허용한다.
도 1f는 예시적인 사이클 그래프를 나타낸다. 이제 도 1f를 참조하면, 도 1f는 예시적인 사이클 그래프(109)를 나타낸다. 도 1f의 사이클 그래프(109)는 참조 카운트 객체(111,112), GC 객체(114,116), 카운트 래퍼(113) 및 참조 래퍼(117)를 포함한다. GC 객체(114)는 참조 래퍼(117)를 통해 참조 카운트 객체(111)를 참조한다(참조 126). 참조 카운트 객체(112)는 카운트 래퍼(113)를 통해 GC 객체(116)를 참조한다(참조 123). 참조(128)(외부 참조) 또한 GC 객체(114)를 참조한다. 약한 참조(129)는 참조 카운트 객체(112)로부터 참조 카운트 객체(111)를 참조한다.
도 4는 할당된 시스템 리소스를 회수하는 예시적인 방법(400)의 흐름도이다. 방법(400)은 도 1f에 도시되어 있는 사이클 그래프(109) 및 컴퓨터 아키텍처(100)의 컴포넌트들과 관련하여 설명될 것이다.
방법(400)은 GC 객체를 저장하는데 사용된 시스템 리소스들의 일부분이 가비지 콜렉션 동안 회수될 것으로 결정하는 동작(401)을 포함하는데, GC 객체는 참조 카운트 객체를 참조한다. 예를 들어, 가비지 콜렉션 컴포넌트(104)는 가비지 콜렉션 동안 참조(128)가 제거되고 따라서 GC 객체(114)가 회수될 것으로 결정할 수 있다. 참조 래퍼(117)를 통해, GC 객체(114)는 참조 카운트 객체(111)를 참조할 수 있다. 방법(400)은 GC 객체를 수집하는 동작(402)을 포함한다. 예를 들어, 가비지 콜렉션 컴포넌트(104)는 GC 객체(114)를 수집할 수 있다.
방법(400)은 GC 객체의 해제를 마무리하기 전에 GC 객체가 수집되었음을 참조 카운트 객체에 통보하는 동작(403)을 포함한다. 예를 들어, 분석 모듈(103)은 GC 객체(114)의 해제를 마무리하기 전에 참조 카운트 객체(111)에 통보(131)를 전송할 수 있다. 몇몇 실시예에서, 통보(131)는 또한 참조 카운트 객체에 대한 참조를 비동기식으로 제거하기 전에 전송된다. 방법(400)은 통보에 응답하여 또 다른 참조 카운트 객체로부터 참조 카운트 객체로의 약한 참조를 연결해제하는 동작(404)을 포함한다. 예를 들어, 약한 참조(129)는 통보(131)에 응답하여 연결해제될 수 있다.
방법(400)은 시스템 리소스들 중 임의의 추가의 부분들이 회수될 수 있는지를 판정하기 위해 가비지 콜렉션을 계속하는 동작(405)을 포함한다. 예를 들어, 가비지 콜렉션 컴포넌트(104)는 사이클 그래프(109)의 가비지 콜렉션을 계속할 수 있다.
다른 추가의 실시예는 참조 카운트 객체가 또 다른 참조 카운트 객체에 대한 GC 참조를 요청하는 것을 포함한다. 즉, 참조 카운트 객체는 또 다른 참조 카운트 객체에 대해 RW를 참조하는 CW가 생성되도록 요청할 수 있다. CG 참조를 요청하는 것은 누수를 야기하지 않고 사이클을 의도적으로 생성하는데 유용할 수 있다.
또 다른 추가의 실시예는 GC 객체가 참조 카운트 객체에 대한 그의 참조를 제거하도록 참조 카운트 객체가 요청하는 것을 포함한다. 즉, GC 객체는 마무리 동안 참조 카운트 객체에 대한 그의 참조를 해제하도록 구성되지만, 이 요청의 경우, 해제는 즉각적으로 이루어질 수 있다.
본 발명은 본 발명의 사상 또는 본질적인 특성을 벗어나지 않으면서 다른 특정 형태로 구현될 수 있다. 기술된 실시예들은 모든 측면에서 제한이 아닌 예시로서 간주되어야 한다. 따라서, 본 발명의 범주는 전술한 상세한 설명보다 첨부한 청구항에 의해 표현된다. 청구항의 균등물의 의미 및 범위 내에 속하는 모든 변경들이 본 발명의 범주 내에 포함될 수 있다.

Claims (20)

  1. 시스템 리소스를 회수(reclaim)하려는 시도의 준비로서 카운트 객체 그래프(a counted object graph) 및 가비지 콜렉트 객체 그래프(a garbage collected object graph) 사이에 참조 정보를 동기화시키도록 구성되는 컴퓨터 시스템으로서,
    하나 이상의 프로세서와,
    시스템 메모리와,
    컴퓨터 실행가능 명령어가 저장된 하나 이상의 컴퓨터 판독가능 매체
    를 포함하되,
    상기 컴퓨터 실행가능 명령어는 실행되는 경우에 상기 컴퓨터 시스템으로 하여금 적어도,
    상기 시스템 메모리에 저장되는 사이클 객체 그래프(a cyclic object graph) 내의 객체에 대한 참조를 계산하는 것 -상기 사이클 객체 그래프는 (i) 참조 카운팅(reference counting)에 따라 관리되는 수명을 갖는 하나 이상의 참조 카운트 객체를 포함하는 카운트 객체 그래프와, (ii) 가비지 콜렉션에 따라 관리되는 수명을 갖는 하나 이상의 가비지 콜렉트(GC) 객체를 포함하는 가비지 콜렉트(GC) 객체 그래프를 포함하고,
    상기 카운트 객체 그래프의 특정 참조 카운트 객체는 상기 카운트 객체 그래프의 카운트 래퍼(a counted wrapper)를 통해 상기 GC 객체 그래프의 특정 GC 객체를 참조하고, 상기 특정 GC 객체는 상기 GC 객체 그래프의 참조 래퍼를 통해 상기 특정 참조 카운트 객체를 참조하며, 상기 카운트 래퍼는 또 다른 참조 카운트 객체로부터 GC에 따라 회수되는 추가 객체로의 참조를 저장하고 참조 카운팅에 따라 회수되며, 상기 참조 래퍼는 또 다른 GC 객체로부터 참조 카운팅에 따라 회수되는 추가 객체로의 참조를 저장하며 GC에 따라 회수됨- 과,
    (i) 상기 카운트 래퍼가 상기 카운트 객체 그래프를 통해 상기 참조 래퍼로부터 도달될 수 있음을 판정하는 것, (ii) 상기 참조 래퍼로부터 상기 특정 GC 객체로의 새로운 참조를 생성하는 것, (iii) 상기 새로운 참조 및 상기 카운트 래퍼를 통해 참조된 상기 특정 GC 객체의 수명을 보호하는 것을 포함하여 가비지 콜렉션을 준비하는 것과,
    임의의 할당된 시스템 리소스가 상기 시스템 메모리로부터 회수될 수 있는지 여부를 판정하기 위해 상기 가비지 콜렉션을 수행하는 것- 상기 가비지 콜렉션은 상기 특정 GC 객체가 회수될 수 없도록 상기 참조 래퍼에 의해 유효하게 참조되는 것으로 간주함 - 을 수행하게 하도록 구성되는
    컴퓨터 시스템.
  2. 제1항에 있어서,
    상기 가비지 콜렉션을 준비하는 것은 가비지 콜렉션에 후속하여 상기 참조 래퍼와 상기 특정 GC 객체 간의 상기 새로운 참조를 제거하는 것을 더 포함하는
    컴퓨터 시스템.
  3. 제1항에 있어서,
    상기 카운트 래퍼를 통해 참조된 상기 특정 GC 객체의 수명을 보호하는 것은 상기 참조 래퍼에 대한 상기 특정 GC 객체의 의존성을 생성하는 것을 포함하는
    컴퓨터 시스템.
  4. 제1항에 있어서,
    상기 카운트 래퍼가 상기 카운트 객체 그래프를 통해 상기 참조 래퍼로부터 도달될 수 있음을 판정하는 것은 상기 카운트 래퍼가 상기 카운트 객체 그래프를 통해 상기 참조 래퍼로부터 도달될 수 있음을 판정하는 것을 포함하는
    컴퓨터 시스템.
  5. 제1항에 있어서,
    상기 가비지 콜렉션을 준비하는 것은 상기 카운트 래퍼가 상기 특정 GC 객체를 간접적으로 참조함을 판정하는 것을 더 포함하는
    컴퓨터 시스템.
  6. 제1항에 있어서,
    상기 가비지 콜렉션을 준비하는 것은 상기 카운트 래퍼가 상기 특정 GC 객체를 직접적으로 참조함을 판정하는 것을 더 포함하는
    컴퓨터 시스템.
  7. 제1항에 있어서,
    상기 임의의 할당된 시스템 리소스가 회수될 수 있는지 여부를 판정하기 위해 가비지 콜렉션을 수행하는 것은 시스템 메모리를 회수하기 위해 하나 이상의 객체를 제거하는 것을 포함하는
    컴퓨터 시스템.
  8. 제1항에 있어서,
    상기 사이클 객체 그래프는, 또 다른 참조 카운트 객체에 대한 참조 래퍼를 다음으로 참조하는 카운트 래퍼를 참조하는 참조 카운트 객체를 포함하는
    컴퓨터 시스템.
  9. 제1항에 있어서,
    상기 사이클 객체 그래프는 GC 객체가 참조 카운트 객체에 대한 참조를 제거하는 것을 요청하도록 구성되는 참조 카운트 객체를 포함하는
    컴퓨터 시스템.
  10. 시스템 리소스를 회수하려는 시도의 준비로서 참조 카운트 객체가 어떻게 참조되는지를 결정하도록 구성된 컴퓨터 시스템으로서,
    하나 이상의 프로세서와,
    시스템 메모리와,
    컴퓨터 실행가능 명령어가 저장된 하나 이상의 컴퓨터 판독가능 매체를 포함하되,
    상기 컴퓨터 실행가능 명령어는 실행되는 경우에 상기 컴퓨터 시스템으로 하여금 적어도,
    상기 시스템 메모리에 저장되는 사이클 객체 그래프 내의 객체에 대한 참조를 계산하는 것 -상기 사이클 객체 그래프는, (i) 참조 카운팅에 따라 관리되는 수명을 갖는 하나 이상의 참조 카운트 객체를 포함하는 카운트 객체 그래프와, (ii) 가비지 콜렉션에 따라 관리되는 수명을 갖는 하나 이상의 가비지 콜렉트(GC) 객체를 포함하는 가비지 콜렉트(GC) 객체 그래프를 포함하고,
    상기 카운트 객체 그래프의 특정 참조 카운트 객체는 상기 카운트 객체 그래프의 카운트 래퍼(a counted wrapper)를 통해 상기 GC 객체 그래프의 특정 GC 객체를 참조하고, 상기 특정 GC 객체는 상기 GC 객체 그래프의 참조 래퍼를 통해 상기 특정 참조 카운트 객체를 참조하며, 상기 카운트 래퍼는 또 다른 참조 카운트 객체로부터 GC에 따라 회수되는 추가 객체로의 참조를 저장하고 참조 카운팅에 따라 회수되며, 상기 참조 래퍼는 또 다른 GC 객체로부터 참조 카운팅에 따라 회수되는 추가 객체로의 참조를 저장하며 GC에 따라 회수됨- 과,
    상기 카운트 래퍼가 참조 래퍼 이외의 임의의 객체를 통해 도달될 수 있는지를 판정하는 것과,
    상기 카운트 래퍼가 참조 래퍼 이외의 임의의 객체를 통해 도달될 수 있는 경우에, 가비지 콜렉션 동안 상기 카운트 래퍼를 회수(reclamation)되지 않게 보호하도록 상기 카운트 래퍼를 고정(peg)하는 것과,
    상기 임의의 할당된 시스템 자원이 상기 시스템 메모리로부터 회수될 수 있는지를 판정하기 위해 가비지 콜렉션을 수행하는 것 -상기 가비지 콜렉션은 고정되는 경우 상기 카운트 래퍼를 보호함- 을 수행하게 하도록 구성되는
    컴퓨터 시스템.
  11. 제10항에 있어서,
    상기 카운트 래퍼는, 상기 카운트 래퍼가 표준 참조를 통해 도달될 수 있는 경우에, 참조 래퍼 이외의 임의의 객체를 통해 도달가능한 것으로 판정되는
    컴퓨터 시스템.
  12. 제10항에 있어서,
    상기 카운트 래퍼는, 상기 카운트 래퍼가 추적 참조(a tracked reference)를 통해 도달될 수 있는 경우에, 참조 래퍼 이외의 임의의 객체를 통해 도달가능한 것을 판정되는
    컴퓨터 시스템.
  13. 제10항에 있어서,
    상기 사이클 객체 그래프는 또 다른 참조 카운트 객체에 대한 참조 래퍼를 다음으로 참조하는 카운트 래퍼를 참조하는 참조 카운트 객체를 포함하는
    컴퓨터 시스템.
  14. 제10항에 있어서,
    상기 사이클 객체 그래프는 GC 객체가 참조 카운트 객체에 대한 참조를 제거하는 것을 요청하도록 구성되는 참조 카운트 객체를 포함하는
    컴퓨터 시스템.
  15. 할당된 시스템 리소스를 회수하도록 구성되는 컴퓨터 시스템으로서,
    하나 이상의 프로세서와,
    시스템 메모리와,
    컴퓨터 실행가능 명령어가 저장된 하나 이상의 컴퓨터 판독가능 매체
    를 포함하되,
    상기 컴퓨터 실행가능 명령어는 실행되는 경우에 상기 컴퓨터 시스템으로 하여금 적어도,
    상기 시스템 메모리에 저장되는 사이클 객체 그래프 내의 객체에 대한 참조를 계산하는 것 -상기 사이클 객체 그래프는 (i) 참조 카운팅에 따라 관리되는 수명을 갖는 하나 이상의 참조 카운트 객체를 포함하는 카운트 객체 그래프와, (ii) 가비지 콜렉션에 따라 관리되는 수명을 갖는 하나 이상의 가비지 콜렉트(GC) 객체를 포함하는 가비지 콜렉트(GC) 객체 그래프를 포함하고,
    상기 카운트 객체 그래프의 특정 참조 카운트 객체는 상기 카운트 객체 그래프의 카운트 래퍼를 통해 상기 GC 객체 그래프의 특정 GC 객체를 참조하고, 상기 특정 GC 객체는 상기 GC 객체 그래프의 참조 래퍼를 통해 상기 특정 참조 카운트 객체를 참조하며, 상기 카운트 래퍼는 또 다른 참조 카운트 객체로부터 GC에 따라 회수되는 추가 객체로의 참조를 저장하고 참조 카운팅에 따라 회수되며, 상기 참조 래퍼는 또 다른 GC 객체로부터 참조 카운팅에 따라 회수되는 추가 객체로의 참조를 저장하며 GC에 따라 회수됨- 과,
    상기 특정 GC 객체를 저장하는 데 사용된 시스템 리소스의 일부분이 가비지 콜렉션 동안 상기 시스템 메모리로부터 회수되어야 함을 결정하고, 상기 특정 GC 객체를 수집하는 것과,
    상기 특정 GC 객체가 수집되었음을 상기 특정 참조 카운트 객체에 통보하여, 상기 특정 GC 객체의 해제(release)가 완료되기 전에, 상기 카운트 객체 그래프 내의 또 다른 참조 카운트 객체로부터 상기 특정 참조 카운트 객체로의 약한 참조를 연결해제되게 하는 것을 수행하게 하도록 구성되는
    컴퓨터 시스템.
  16. 제15항에 있어서,
    상기 GC 객체가 수집되었음을 상기 특정 참조 카운트 객체에 통보하는 것은, 상기 특정 참조 카운트 객체에 대한 참조를 제거하기 전에, 이루어지는
    컴퓨터 시스템.
  17. 제15항에 있어서,
    상기 특정 GC 객체를 저장하는 데 사용된 시스템 리소스의 일부분이 회수되어야 함을 결정하는 것은 상기 특정 GC 객체에 대한 참조가 제거되었음을 검출하는 것을 포함하는
    컴퓨터 시스템.
  18. 제15항에 있어서,
    상기 시스템 리소스 중 임의의 추가의 부분이 회수될 수 있는지를 판정하기 위해 가비지 콜렉션을 계속하는 것은 상기 특정 참조 카운트 객체를 회수하는 것을 포함하는
    컴퓨터 시스템.
  19. 제15항에 있어서,
    상기 사이클 객체 그래프는, 또 다른 참조 카운트 객체에 대한 참조 래퍼를 다음으로 참조하는 카운트 래퍼를 참조하는 참조 카운트 객체를 포함하는
    컴퓨터 시스템.
  20. 제15항에 있어서,
    상기 사이클 객체 그래프는 GC 객체가 참조 카운트 객체에 대한 참조를 제거하는 것을 요청하도록 구성되는 참조 카운트 객체를 포함하는
    컴퓨터 시스템.
KR1020197014616A 2011-09-09 2012-09-07 사이클 그래프에서 객체 수명을 관리하는 기법 KR102074113B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201161533134P 2011-09-09 2011-09-09
US61/533,134 2011-09-09
US13/598,247 2012-08-29
US13/598,247 US9053017B2 (en) 2011-09-09 2012-08-29 Managing object lifetime in a cyclic graph
PCT/US2012/054042 WO2013036701A2 (en) 2011-09-09 2012-09-07 Managing object lifetime in a cyclic graph

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020147006289A Division KR101983413B1 (ko) 2011-09-09 2012-09-07 사이클 그래프에서 객체 수명을 관리하는 기법

Publications (2)

Publication Number Publication Date
KR20190058706A true KR20190058706A (ko) 2019-05-29
KR102074113B1 KR102074113B1 (ko) 2020-02-05

Family

ID=47830782

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020197014616A KR102074113B1 (ko) 2011-09-09 2012-09-07 사이클 그래프에서 객체 수명을 관리하는 기법
KR1020147006289A KR101983413B1 (ko) 2011-09-09 2012-09-07 사이클 그래프에서 객체 수명을 관리하는 기법

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020147006289A KR101983413B1 (ko) 2011-09-09 2012-09-07 사이클 그래프에서 객체 수명을 관리하는 기법

Country Status (7)

Country Link
US (2) US9053017B2 (ko)
EP (1) EP2754054B1 (ko)
JP (1) JP6087928B2 (ko)
KR (2) KR102074113B1 (ko)
CN (1) CN102999328B (ko)
HK (1) HK1183533A1 (ko)
WO (1) WO2013036701A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102453983B1 (ko) * 2021-12-14 2022-10-31 인터와이즈 주식회사 생존 경로 정보 기반 가비지 컬렉션 방법

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9053017B2 (en) 2011-09-09 2015-06-09 Microsoft Technology Licensing, Llc Managing object lifetime in a cyclic graph
CN103226476B (zh) * 2013-05-20 2016-06-08 张永强 垃圾对象检测方法和装置
US10437720B2 (en) * 2014-03-12 2019-10-08 Optumsoft, Inc. Deferred destruction for efficient resource reclamation
US10438253B2 (en) 2015-11-29 2019-10-08 International Business Machines Corporation Reuse of computing resources for cloud managed services
US10223163B2 (en) 2016-07-14 2019-03-05 Microsoft Technology Licensing, Llc Workflow-based object destruction
CN108073461B (zh) * 2016-11-11 2021-01-19 腾讯科技(深圳)有限公司 内存泄漏调试方法及装置
US9983978B1 (en) 2017-03-08 2018-05-29 Microsoft Technology Licensing, Llc Querying an indexed time-travel trace
US9940369B1 (en) 2017-03-08 2018-04-10 Microsoft Technology Licensing, Llc Searching an indexed time-travel trace
US9959194B1 (en) 2017-03-08 2018-05-01 Microsoft Technology Licensing, Llc Indexing a trace by insertion of memory snapshots for replay responsiveness
US10185645B2 (en) 2017-03-08 2019-01-22 Microsoft Technology Licensing, Llc Resource lifetime analysis using a time-travel trace
US9934126B1 (en) 2017-03-08 2018-04-03 Microsoft Technology Licensing, Llc Indexing a trace by insertion of reverse lookup data structures
US9934127B1 (en) 2017-03-08 2018-04-03 Microsoft Technology Licensing, Llc Indexing a trace by insertion of key frames for replay responsiveness
CN108804337A (zh) * 2017-05-04 2018-11-13 华为技术有限公司 内存垃圾回收的方法、装置及计算机存储介质
US10282274B2 (en) 2017-06-14 2019-05-07 Microsoft Technology Licensing, Llc Presenting differences between code entity invocations
US10558564B2 (en) 2017-09-28 2020-02-11 Hewlett Packard Enterprise Development Lp Pointers in a memory managed system
CN107908567A (zh) * 2017-11-27 2018-04-13 腾讯科技(深圳)有限公司 一种Java对象引用方法、装置和介质
US11468312B2 (en) * 2018-02-02 2022-10-11 Samsung Electronics Co., Ltd. Memory management for machine learning training on GPU
CN110597737B (zh) * 2019-08-22 2022-03-08 腾讯音乐娱乐科技(深圳)有限公司 数据处理方法、装置、存储介质及电子设备
KR102194413B1 (ko) * 2020-06-18 2020-12-23 인터와이즈 주식회사 역방향 경로 탐색을 이용한 혼합형 가비지 컬렉션 방법 및 이를 이용하는 가비지 컬렉션 시스템

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6182107B1 (en) * 1997-06-03 2001-01-30 Object Technology Licensing Corporation Management of reference object lifetimes in object oriented programs
US20080270482A1 (en) * 2007-04-27 2008-10-30 Microsoft Corporation Managing object lifetime for native/managed peers

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5088036A (en) 1989-01-17 1992-02-11 Digital Equipment Corporation Real time, concurrent garbage collection system and method
US5920876A (en) 1997-04-23 1999-07-06 Sun Microsystems, Inc. Performing exact garbage collection using bitmaps that identify pointer values within objects
GB9721659D0 (en) 1997-10-14 1997-12-10 Philips Electronics Nv Space-limited marking structure for tracing garbage collectors
JPH11232162A (ja) * 1998-02-19 1999-08-27 Fujitsu Ltd ガベージコレクション方法
US6421690B1 (en) 1998-04-30 2002-07-16 Honeywell International Inc. Computer memory management system
GB9813266D0 (en) 1998-06-20 1998-08-19 Koninkl Philips Electronics Nv Stored data object marking for garbage collectors
GB9825102D0 (en) 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US6185107B1 (en) 1998-12-23 2001-02-06 Raytheon Company MEMS based tile assemblies and methods of fabrication
GB9906629D0 (en) * 1999-03-23 1999-05-19 Koninkl Philips Electronics Nv Memory reclamation method
US6453463B1 (en) 1999-06-07 2002-09-17 Sun Microsystems, Inc. Method and apparatus for providing finer marking granularity for fields within objects
US6363403B1 (en) 1999-06-30 2002-03-26 Lucent Technologies Inc. Garbage collection in object oriented databases using transactional cyclic reference counting
US6502111B1 (en) 2000-07-31 2002-12-31 Microsoft Corporation Method and system for concurrent garbage collection
US6874074B1 (en) 2000-11-13 2005-03-29 Wind River Systems, Inc. System and method for memory reclamation
US6879991B2 (en) 2000-12-11 2005-04-12 International Business Machines Corporation Synchronous collection of cyclic garbage in reference counting systems
US6457023B1 (en) 2000-12-28 2002-09-24 International Business Machines Corporation Estimation of object lifetime using static analysis
US6883172B1 (en) 2001-03-29 2005-04-19 Microsoft Corporation System and method for bridging managed and unmanaged object systems by utilizing an interface wrapper to facilitate transparent communications
JP4041347B2 (ja) * 2001-05-29 2008-01-30 松下電器産業株式会社 ガベージコレクション装置及びガベージコレクション方法
US6662274B2 (en) 2001-06-20 2003-12-09 Intel Corporation Method for using cache prefetch feature to improve garbage collection algorithm
US6728738B2 (en) * 2002-04-03 2004-04-27 Sun Microsystems, Inc. Fast lifetime analysis of objects in a garbage-collected system
US6735680B2 (en) 2002-05-24 2004-05-11 Sun Microsystems, Inc. Method and apparatus for deleting objects from memory within a smart card
US7092978B2 (en) 2003-02-24 2006-08-15 Sun Microsystems, Inc. Space-efficient, depth-first parallel copying collection technique making use of work—stealing on the same structures that maintain the stack of items to be scanned
US7451168B1 (en) 2003-06-30 2008-11-11 Data Domain, Inc. Incremental garbage collection of data in a secondary storage
US7315873B2 (en) 2003-07-15 2008-01-01 International Business Machines Corporation Depth counter used to reduce number of items to consider for loop detection in a reference-counting storage reclamation program
US7251671B2 (en) 2004-03-26 2007-07-31 Intel Corporation Method and system for garbage collection wherein resetting the mark/allocation bit, and switching the mark/allocation bit to the mark bit to perform marking and scanning of objects using the identified object as a root object and providing mark/allocation bit information being displayed at the client
US7444484B2 (en) 2004-06-24 2008-10-28 International Business Machines Corporation Method and system for determining memory usage of a heap
US7631024B2 (en) 2006-01-03 2009-12-08 Sun Microsystems, Inc. Method and apparatus for facilitating mark-sweep garbage collection with reference counting
US7565386B2 (en) 2006-02-10 2009-07-21 Microsoft Corporation Reference-counting subsumption analysis
CN101046755B (zh) * 2006-03-28 2011-06-15 郭明南 一种计算机自动内存管理的系统及方法
US7512745B2 (en) 2006-04-28 2009-03-31 International Business Machines Corporation Method for garbage collection in heterogeneous multiprocessor systems
US8589341B2 (en) 2006-12-04 2013-11-19 Sandisk Il Ltd. Incremental transparent file updating
US7987215B2 (en) * 2008-04-22 2011-07-26 Microsoft Corporation Efficiently marking objects with large reference sets
US8327109B2 (en) * 2010-03-02 2012-12-04 Advanced Micro Devices, Inc. GPU support for garbage collection
US8621150B2 (en) * 2010-04-09 2013-12-31 International Business Machines Corporation Data placement optimization using data context collected during garbage collection
US9053017B2 (en) 2011-09-09 2015-06-09 Microsoft Technology Licensing, Llc Managing object lifetime in a cyclic graph

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6182107B1 (en) * 1997-06-03 2001-01-30 Object Technology Licensing Corporation Management of reference object lifetimes in object oriented programs
US20080270482A1 (en) * 2007-04-27 2008-10-30 Microsoft Corporation Managing object lifetime for native/managed peers

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102453983B1 (ko) * 2021-12-14 2022-10-31 인터와이즈 주식회사 생존 경로 정보 기반 가비지 컬렉션 방법
WO2023113267A1 (ko) * 2021-12-14 2023-06-22 인터와이즈(주) 생존 경로 정보 기반 가비지 컬렉션 방법

Also Published As

Publication number Publication date
CN102999328B (zh) 2016-02-24
US20150269196A1 (en) 2015-09-24
US20130066927A1 (en) 2013-03-14
WO2013036701A3 (en) 2013-05-10
CN102999328A (zh) 2013-03-27
HK1183533A1 (zh) 2013-12-27
KR102074113B1 (ko) 2020-02-05
EP2754054A4 (en) 2015-02-11
EP2754054B1 (en) 2018-06-27
KR101983413B1 (ko) 2019-05-29
JP6087928B2 (ja) 2017-03-01
KR20140059801A (ko) 2014-05-16
US9613073B2 (en) 2017-04-04
JP2014529142A (ja) 2014-10-30
WO2013036701A2 (en) 2013-03-14
US9053017B2 (en) 2015-06-09
EP2754054A2 (en) 2014-07-16

Similar Documents

Publication Publication Date Title
KR101983413B1 (ko) 사이클 그래프에서 객체 수명을 관리하는 기법
KR101357397B1 (ko) 데이터 프로세싱 시스템의 메모리 사용을 추적하는 방법
US8301671B1 (en) Method and apparatus providing removal of replicated objects based on garbage collection
US10073770B2 (en) Scheme for determining data object usage in a memory region
US20130086132A1 (en) Time-based object aging for generational garbage collectors
US10133618B2 (en) Diagnostic data set component
CN103455424A (zh) 基于VxWorks操作系统的动态内存泄漏检测方法及装置
US10558439B2 (en) Automatic reference counting
US8255436B2 (en) Per thread garbage collection
CN106528071A (zh) 目标代码的选取方法及装置
US10915403B2 (en) Versioned records management using restart era
US10761936B2 (en) Versioned records management using restart era
CN111488117A (zh) 用于管理元数据的方法、电子设备和计算机可读介质
CN113535412B (zh) 用于跟踪锁的方法、设备和计算机程序产品
US20230259617A1 (en) Topology-based event suppression
US10754766B2 (en) Indirect resource management
CN113535412A (zh) 用于跟踪锁的方法、设备和计算机程序产品

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant