KR19990077655A - 컴퓨터메모리를세대(世代)에의하여동적으로관리하는방법과장치 - Google Patents

컴퓨터메모리를세대(世代)에의하여동적으로관리하는방법과장치 Download PDF

Info

Publication number
KR19990077655A
KR19990077655A KR1019990007412A KR19990007412A KR19990077655A KR 19990077655 A KR19990077655 A KR 19990077655A KR 1019990007412 A KR1019990007412 A KR 1019990007412A KR 19990007412 A KR19990007412 A KR 19990007412A KR 19990077655 A KR19990077655 A KR 19990077655A
Authority
KR
South Korea
Prior art keywords
memory
selection
computer
block
section
Prior art date
Application number
KR1019990007412A
Other languages
English (en)
Other versions
KR100567082B1 (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 KR19990077655A publication Critical patent/KR19990077655A/ko
Application granted granted Critical
Publication of KR100567082B1 publication Critical patent/KR100567082B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • 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/0269Incremental or concurrent garbage collection, e.g. in real-time systems
    • G06F12/0276Generational garbage collection
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99956File allocation
    • Y10S707/99957Garbage collection

Abstract

본 발명은 컴퓨터 메모리 내(內)에서 세대(世代)에 의한 이삭줍기(generational garbage collection)를 실행하는 방법과 장치에 관한 것이다. 본 발명의 하나의 특징에 따라서, 메모리(memory)는 제 1 메모리 섹션(first memory section)과, 다수의 블록(block)으로 나누어지는 제 2 메모리 섹션(second memory section) 등을 포함하고, 블록(block) 각각은 그와 관련이 있는 마커(marker)를 가지는데 ; 이러한 메모리를 동적(動的)으로 관리하는 컴퓨터로 구현된 방법(computer-implemented method)은 제 1 메모리 섹션에서 제 1 이삭줍기(first garbage collection)를 실행하는 단계를 포함한다. 또한, 상기 방법은 제 2 메모리 섹션의 하나의 선택 블록에서 제 2 이삭줍기(second garbage collection)를 실행하는 단계를 포함한다. 제 3 이삭줍기(third garbage collection)는 제 2 메모리 섹션의 선택 블록에서 실행된다. 적어도 부분적으로 선택 블록과 관련이 있는 마커(marker)에 의하여 지적되는 상태(status)에 바탕을 두는 선택 블록에 포함되어 있지 않은 제 2 객체를 참조하는 제 1 객체를 선택 블록이 포함하는지를 결정하는 단계를, 제 3 이삭줍기(third garbage collection)는 포함한다. 제 2 객체에 대한 참조는 제 2 이삭줍기를 실행한 후(後)에 저장되는지에 대한 지적을 상태(status)는 포함하고, 제 2 이삭줍기를 실행한 후(後)에 제 2 객체에 대한 참조를 저장한다면, 선택 마커를 이용하여 새로운 루트 어레이(new root array)를 만든다.

Description

컴퓨터 메모리를 세대(世代)에 의하여 동적으로 관리하는 방법과 장치{METHODS AND APPARATUS FOR GENERATIONAL DYNAMIC MANAGEMENT OF COMPUTER MEMORY}
본 발명은 일반적으로 컴퓨터 시스템(computer system)에서 동적(動的)으로 할당되는 메모리(dynamically allocated memory)의 관리에 관한 것이다. 보다 더 상세하게, 본 발명은 컴퓨터 시스템과 관련이 있는 메모리의 분리 섹션(separate section) 사이에서 참조(reference)를 추적함으로써, 자동 스토리지-교정(automatic storage-reclamation)을 부분적으로 실행하는 것에 관한 것이다.
컴퓨터 시스템과 관련이 있는 메모리의 양(量)은 일반적으로 제한된다. 그렇기 때문에, 메모리는 일반적으로 보전되어야만 하고, 다시 사용되어야만 한다. 많은 컴퓨터 프로그래밍 언어에 의하여, 소프트웨어 개발자는 컴퓨터 시스템 내(內)에서 메모리를 동적(動的)으로 할당하는 것이 가능하다. 어떤 프로그래밍 언어는 이전(以前)에 할당된 메모리를 명시(明示)에 의하여 수동으로 할당을 해제하는 것(deallocation)이 필요한데, 이것은 복잡해질 수 있고, 에러를 일으킬 수 있다. 명시(明示)에 의하여 수동으로 메모리 관리(explicit manual memory manage- ment)를 필요로 하는 언어는 C 와 C++ 프로그래밍 언어를 포함한다. 교정 시스템(reclamation system)에서 메모리를 할당하는 컴퓨터 프로그램의 적합한 작동을 확실하게 하는데 더 이상 필요하지 않은 메모리를 교정(矯正)하도록, 다른 프로그래밍 언어는 자동 스토리지-교정(automatic storage-reclamation)을 이용한다. 명시(明示)적 명령 없이, 또는 이전(以前)에 메모리를 이용하고 있었던 컴퓨터 프로그램에서 호출 없이, 이러한 자동 스토리지-교정 시스템(automatic storage- reclamation system)은 메모리를 교정(矯正)한다.
객체-지향 시스템이나 객체를 바탕으로 하는 시스템에 있어서, 당해 기술 종사 업자에 의하여 높이 평가되는 것처럼, 메모리 할당의 일반적 유닛(typical unit)은 통상적으로 객체(object), 또는 메모리 객체(memory object)를 가리킨다. 이용되고 있는 객체(客體)는 일반적으로 "라이브(live)" 객체를 의미하는데, 반면(反面)에 컴퓨터 프로그램을 올바르게 실행하는데 더 이상 필요로 하지 않는 객체는 일반적으로 "쓰레기(garbage)" 객체라고 불린다. 쓰레기 객체를 교정(矯正)하는 작동은 통상적으로 이삭줍기(garbage collection)라고 불리지만, 자동 스토리지-교정 시스템(automatic storage-declamation system)은 종종 쓰레기 컬렉터(garbage collector)라고 불린다. 컴퓨터 프로그램이 실행 중(中)에 라이브 메모리 객체를 변화시킬 수 있다는 사실로 인(因)하여, 자동 스토리지-교정 시스템을 이용하는 컴퓨터 프로그램은 뮤테이터(mutator)로써 공지되어 있다. (캘리포니아, Plao Alto 에 있는 Sun Microsystem 에 의하여 개발된) JAVATM프로그래밍 언어와 Smalltalk 프로그래밍 언어 등과 같은 언어로 쓰여진 컴퓨터 프로그램은, 자동으로 메모리를 관리하는데 이삭줍기(garbage collection)를 이용한다.
객체는 일반적으로 다른 객체에 대한 참조(reference)를 포함한다. 그렇기 때문에, 쓰레기 컬렉터(garbage collector)에 의하여 관리되는 컴퓨터 메모리의 영역은 일반적으로 서로에 대하여 참조를 하는 객체의 세트를 포함한다. 도 1 은 객체를 포함하는 컴퓨터 메모리의 영역에 대한 대표 그림을 나타낸다. 일반적으로 컴퓨터 시스템과 관련이 있는 히프(heap)로써 역할을 하는 메모리(10)에서 관리되는 영역은 영역(20)을 포함한다. 일반적으로, 객체(20)는 다른 객체(20)에 의하여 참조될 수 있다. 실례(實例)에 의하여, 객체(20a)는 객체(20b)에 대한 포인터(24a)(pointer)를 가진다. 또한, 객체(20c)는 객체(20b)에 대한 포인터(24b)를 가진다. 이와 같이, 객체(20b)는 두 개의 객체(20a, 20c)에 의하여 참조된다.
다수의 외부 참조는 메모리(10)(memory)로 들어간다. 도 1 에서 나타난 것처럼, 메모리(10)에 대하여 외부에 있는 고정 루트(30)(fixed root)는 메모리 내(內)에 위치된 객체, 예를 들면, 객체(20a)와 객체(20c)에 대한 포인터(34)를 포함한다. 고정 루트(30)에서 참조를 따르는 것에 의하여 도달 가능할 수 있는 모든 객체, 예를 들면, 객체(20a 내지 20d) 등은, 라이브 객체(live object)로써 고려된다. 대신(代身)에, 고정 루트(30)에서 참조를 따르는 것에 의하여 도달 가능할 수 없는 객체(20e)는 쓰레기 객체(garbage object)로써 특징을 짓는다.
일반적으로, 쓰레기 컬렉터(garbage collector)는 객체(20e)와 같은 쓰레기 객체를 확인할 목적으로 구현된다. 일반적으로, 다수의 서로 다른 알고리즘을 이용하면서 쓰레기 컬렉터는 작동될 수 있다. 종래의 이삭줍기 알고리즘은 참조 카운팅 컬렉터(reference counting collector), 마크 청소 컬렉터(mark sweep collecor), 및 복사 컬렉터(copying collector) 등을 포함한다. 당해 기술 종사 업자에 의하여 높이 평가되는 것처럼, 이삭줍기(garbage collection) 중(中)에 객체(20)가 이동될 때 객체(20)에 대한 참조는 따라서 조정되어야만 한다.
한 번에 하나의 영역에서 이삭줍기가 부분적으로 실행되는 것이 가능하도록, 관리되는 메모리 영역을 보다 더 작은 섹션으로 분리하는 것은 때때로 이점(利點)이 있다. 하나의 메모리 분할에서의 방법은 세대(世代)에 의한 이삭줍기(generational garbage collection)인데, 이러한 이삭줍기에서는 객체가 만들어졌던 시간에서부터 측정되는 객체의 존속기간(lifetime)에 바탕을 두어서 객체는 분리된다. "보다 더 젊은(Younger)" 객체는 "보다 더 늙은(older)" 객체보다 쓰레기가 될 가능성이 있다는 것은 관찰되었다. 이와 같이, 메모리 교정(memory reclamation)의 전체적인 효과를 높이는데, 세대(世代)에 의한 이삭줍기(generation garbage collection)는 이용될 수 있다.
도 2 는, 신(新)-세대와 구(舊)-세대 등으로 분할되는 메모리(memory), 그리고 루트(root) 사이에서 인터페이스(interface)에 대한 대표 그림을 나타낸다. 컴퓨터 시스템과 관련이 있는 히프(heap)로써 역할을 하는 메모리(110)는, 신(新)-세대(110a)와 구(舊)-세대(110b) 등을 포함한다. 고정 루트(114)(fixed root), 또는 신(新)-세대(110a)와 구(舊)-세대(110b) 양쪽, 또는 어느 하나 내(內)에서 객체를 참조하는 전역(全域) 객체(global object) 등은, 도 2 에서 나타난 것처럼, 신(新)-세대(110a)에서 객체(120)에 대한 포인터(116)를 참조한다. 당해 기술 종사 업자에 의하여 높이 평가되는 것처럼, 루트(114)(root)는 스택에 위치될 수 있다.
객체(120a)는 라이브 객체라고 가정되기 때문에, 그리고 객체(120a)는 또 하나의 객체(120d)에 대한 포인터(122)를 포함하기 때문에, 신(新)-세대(110a) 내(內)에서 어떤 객체(120), 예를 들면, 객체(120a)는 루트로써 고려될 수 있다. 신(新)-세대 객체(126)가 라이브 객체일 때, 그리고 구(舊)-세대 객체(128)를 가리킬 때, 구(舊)-세대(110b)에서 실행되는 이삭줍기는 일반적으로 객체(128)를 컬렉션(collection)하지 않는다. 하지만, 신(新)-세대 객체(126)가 없어질 때, 구(舊)-세대 객체(128)가 어떤 다른 객체에 의하여 지적되지 않기 때문에, 신(新)-세대(110a)에서 실행되는 이삭줍기는 도달 불가능이 되는 구(舊)-세대 객체(128)라는 결과를 일으킨다. 구(舊)-세대 객체(128)가 도달 불가능이라면, 구(舊)-세대(110b)에서 실행되는 이삭줍기는 구(舊)-세대 객체(128)의 컬렉션(collection)이라는 결과를 일으킨다. 포인터(130)가 구(舊)-세대(110a)와 신(新)-세대(110b) 양쪽에 연결되어 있기 때문에, 신(新)-세대 객체(126)와 구(舊)-세대 객체(128) 사이에서 가리키는 포인터(130)는 세대(世代) 사이의 포인터로써 고려된다. 신(新)-세대 객체(126)에서 포인터(130)가 구(舊)-세대 객체(128)를 가리킬 때, 신(新)-세대 이삭줍기를 이용하여서는 구(舊)-세대 객체(128)가 컬렉션(collection) 불가능이 되기 때문에, 구(舊)-세대 객체(128)는 종신(終身)이 가능한 쓰레기(tenured garbage)로써 고려된다.
또 하나의 메모리 분할 방법은 메모리를 보다 더 작은 영역으로 분리하는 것을 포함하는데, 단일 이삭줍기를 실행하는데 필요한 시간의 양(量)을 줄인다. 이삭줍기로 인(因)하여 일어나는 중단(pause)은 관련이 있는 뮤테이터(mutator)를 파괴하는 경향이 종종 있고, 그러므로 바람직하지 않다. 어떤 시스템에 있어서, 쓰레기 컬렉터(garbage collector)는 보장이 있는 최대로 작은 중단 존속 기간을 공급할 수 있다. 이상(以上)과 관련이 있는 이러한 쓰레기 컬렉터는 실시간(實時間) 쓰레기 컬렉터로써 공지되어 있다. 다른 시스템에 있어서, 쓰레기 컬렉터는 중단 시간(pause time)을 작게 할 수 있지만, 어떤 상황에서 이와 같이 하는데 실패할 수 있다. 중단 시간을 작게 하는 쓰레기 컬렉터(garbage collector)는 파괴되지 않거나 증분이 있는 쓰레기 컬렉터로써 공지되어 있다.
개개(個個)의 메모리 영역에서 작동시킬 목적으로, 쓰레기 컬렉터는 이러한 영역으로의 모든 참조의 지식을 가져야만 한다. 어떤 영역으로의 참조는 이러한 영역에 대한 루트(root)로써 불린다. 루트는 고정 루트와 같은 내부 참조, 그리고 컴퓨터 메모리의 다른 영역에서 참조 등의 양쪽을 포함할 수 있다는 사실은 높이 평가해야만 한다. 따라서, 쓰레기 컬렉터는 일반적으로 루트(root)나 참조(reference)를 찾고 추적하는 메커니즘을 공급한다.
메모리 영역으로 참조를 위치시키는 하나의 방법은, 메모리에서 모든 객체를 통하여 검색하는 것을 포함한다. 대부분의 시스템에 대하여, 메모리에서 모든 객체를 통한 검색은 엄청나게 시간을 낭비하는 것이다. 이와 같이, 보다 더 정교한 추적 방법은 종종 필요하다.
뮤테이터(mutator)가 객체로의 참조를 저장할 때마다, 이삭줍기 목적을 위하여 추가의 처리는 참조를 추적하기 위하여 구현될 수 있다. 상기 추가의 처리는 라이트 배리어(write barrier)나 저장 검사(store check)로써 공지되어 있다. 뮤테이터의 효율을 수용 가능한 레벨에서 유지시킬 목적으로, 라이트 배리어와 관련이 있는 비용은 가능하다면 낮게 유지되어야만 한다.
메모리 영역으로 참조를 추적하는 하나의 방법은, 영역을 위하여 모든 루트를 수용하는 세트(set)를 유지하는 것을 포함한다. 이러한 세트는 일반적으로 영역을 위하여 기억 세트(remembered set)로써 공지되어 있다. 영역으로의 참조가 저장될 때, 관련이 있는 라이트 배리어는 검사될 것이다. 따라서, 라이트 배리어(write barrier)는 영역과 관련이 있는 기억 세트로 참조의 위치를 삽입할 것이다.
도 3 은, 기억 세트(remembered set)를 이용하여 추적되는 구(舊)-세대에서 객체와, 신(新)-세대에서 객체 사이에서 포인터에 대한 대표 그림을 나타낸다. 메모리(302)는 신(新)-세대(302a)와 구(舊)-세대(302b) 등으로 나누어진다. 구(舊)-세대 객체(310)에서 신(新)-세대 객체(312)를 가리키는 포인터(314)를 추적하는데 기억 세트(304)(remembered set)는 이용된다. 구(舊)-세대 객체(310a)는 신(新)-세대 객체(312b)로의 포인터를 포함하고 있기 때문에, 구(舊)-세대 객체(310a)의 주소는 기억 세트(304)에 저장된다. 비슷하게, 신(新)-세대 객체(312b, 312a)로의 포인터(314b, 314b)를 각각 포함하는 구(舊)-세대 객체(310b)의 주소는 기억 세트(314)에 저장된다.
기억 세트가 이용될 때, 기억 세트는 모든 루트를 포함하고 있기 때문에, 이삭줍기를 위한 루트를 위치시키는 것은 간단하다. 하지만, 초과 메모리가 필요할 때, 라이트 배리어(write barrier)의 이용은 때때로 비싸다. 또한, 새로운 위치가 기억 세트로 삽입될 때, 특별한 위치가 기억 세트 내(內)에서 이미 존재할 수 있는 것은 가능하다. 위치를 삽입하기 전(前)에 복사 위치에 대한 기억 세트를 검사하는 것은 비싸다. 다른 측면에서, 복사 위치에 대한 검사를 제거하는 것에 의하여, 기억 세트가 불필요하게 크게 성장할 수 있다. 당해 기술 종사 업자에 의하여 높이 평가되는 것처럼, 기억 세트를 수용할 수 있는, 다수의 복사에 있어서 위쪽 경계는 일반적으로 존재하지 않는다. 위치로의 참조가 저장되어야만 할 때, 위치는 때때로 이전(以前) 참조를 포함한다. 결과로써, 저장 작용 전(前)에 위치와 관련이 있는 기억 세트 엔트리(remembered set entry)는, 저장 작용 후(後)에 일반적으로 유효하지 않다. 구(舊) 엔트리를 제거하는 것은 어떤 상황에서 비용이 많이 드는 작동이라고 판명될 수 있지만, 반면(反面)에 적합한 장소에서 구(舊) 엔트리를 제거하는 것은 기억 세트에 의하여 초과 메모리의 위치를 점유한다는 결과를 일으킬 수 있다.
메모리 영역으로의 참조를 추적하는데 때때로 이용되는, 또 하나의 방법은 카드 마킹(card marking)으로 공지되어 있다. 일반적으로, 카드 마킹(card marking)은 카드(card)라고 불리는 상대적으로 작은 부분으로 메모리를 개념적으로 나누는 것을 포함한다. 그 다음에, 쓰레기 컬렉터는 카드 당(當) 하나의 엔트리를 갖춘 비트의 어레이를 할당할 것이다. 참조가 저장될 때, 라이트 배리어는 대응하는 카드 어레이 엔트리를 계산하고, 관련이 있는 비트를 세트한다. 상기 처리는 카드를 "덜티잉(dirtying)"하는 것으로써 공지되어 있다. 효율적인 이유로 인(因)하여, 비트 어레이(bit array) 대신(代身)에 바이트(byte)나 워드 어레이(word array)는 때때로 이용된다는 사실은, 높이 평가할 만하다.
카드 마킹(card marking)을 이용하는 이점(利點)은, 라이트 배리어(write barrier)는 상대적으로 비용이 적다는 것이다. 카드 마킹(card marking)을 이용하는 또 하나의 이점(利點)은, 카드 어레이를 위하여 필요로 하는 메모리의 양(量)은 고정된다는 사실이다. 하지만, 이삭줍기 시간에 루트를 위치시키는데 필요한 처리는 때때로 중요한데, 예를 들면, 기억 세트를 이용하는 시스템에 있어서 필요한 것보다 더 많은 처리가 필요하다. 참조 저장이 어디서 일어났는지를, 쓰레기 컬렉터만이 대략적으로 안다. 즉, 어디서 카드 마킹 어레이(card marking array)가 덜티 엔트리를 가지는지를, 쓰레기 컬렉터만이 안다. 일단 덜티 엔트리(dirty entry)가 확인된다면, 루트를 위하여 대응하는 카드는 검색되어야만 한다. 루트를 위한 카드를 검색하는 것은 전체의 메모리를 검색하는 것보다 일반적으로 훨씬 싸지만, 카드를 검색하는 것은 때때로 여전히 비용이 많다. 당해 기술 종사 업자에 의하여 이해되는 것처럼, 쓰레기 컬렉터(garbage collector)가 루트(root)의 위치를 정(定)할 때, 이삭줍기가 실행되는 다음 시간에 루트(root)의 위치가 정(定)해지도록, 대응하는 카드 어레이 엔트리는 덜티(dirty)를 유지시켜야만 한다.
결합 방법으로써, 기억 세트(remembered set)와 카드 마킹(card marking)을 이용할 수 있다. 상기(上記)에서 기술(記述)된 것처럼, 라이트 배리어(write barrier)는 카드 마킹(card marking)을 이용할 수 있다. 하지만, 이삭줍기 시간에, 쓰레기 컬렉터는 각각의 카드에 대하여 기억 세트를 구성할 것이다. 이삭줍기가 완성될 때, 그 다음에 카드 마킹 어레이(card marking array)는 소거될 수 있다. 결합된 기억 세트와 카드 마킹 방법을 이용하는 것은, 결과적으로 일어나는 이삭줍기를 위하여 필요로 하는 검색의 양(量)을 줄이는데, 이것에 의하여 이삭줍기 처리의 전체적인 효율을 증가시킨다. 하지만, 상기 방법의 구현은 때때로 복잡해진다. 그러므로, 요구되어지는 것은 결합된 기억 세트와 카드 마킹 방법을 효율적으로 구현하는 방법과 장치이다.
본 발명은 컴퓨터 메모리 내(內)에서 세대(世代)에 의한 이삭줍기(generational garbage collection)를 실행하는 방법과 장치에 관한 것이다. 본 발명의 하나의 특징에 따라서, 메모리(memory)는 제 1 메모리 섹션(first memory section)과, 다수의 블록(block)으로 나누어지는 제 2 메모리 섹션(second memory section) 등을 포함하고, 블록(block) 각각은 그와 관련이 있는 마커(marker)를 가지는데 ; 이러한 메모리를 동적(動的)으로 관리하는 컴퓨터로 구현된 방법(computer-implemented method)은 제 1 메모리 섹션에서 제 1 이삭줍기를 실행하는 단계를 포함한다. 또한, 상기 방법은 제 2 메모리 섹션의 하나의 선택 블록에서 제 2 이삭줍기(second garbage collection)를 실행하는 단계를 포함한다. 제 3 이삭줍기(third garbage collection)는 제 2 메모리 섹션의 선택 블록에서 실행된다. 적어도 부분적으로 선택 블록과 관련이 있는 마커(marker)에 의하여 지적되는 상태(status)에 바탕을 두는 선택 블록에 포함되어 있지 않은 제 2 객체를 참조하는 제 1 객체를 선택 블록이 포함하는지를 결정하는 단계를, 제 3 이삭줍기(third garbage collection)는 포함한다. 제 2 객체에 대한 참조는 제 2 이삭줍기를 실행한 후(後)에 저장되는지에 대한 지적을 상태(status)는 포함하고, 제 2 이삭줍기를 실행한 후(後)에 제 2 객체에 대한 참조를 저장한다면, 선택 마커를 이용하여 새로운 루트 어레이(new root array)를 만든다.
본 발명의 또 하나의 특징에 따라서, 컴퓨터 메모리에 있는 선택 객체(selected object)를 할당하는 컴퓨터로 구현된 방법(computer-implemented method)은 ; 메모리의 제 1 섹션이 선택 객체를 할당하는데 적합한지를 결정하는 단계, 그리고 제 1 섹션이 객체를 할당하는데 적합한지를 결정할 때, 선택 객체를 할당하는 단계 등을 포함한다. 또한, 상기 방법은 제 1 섹션이 선택 객체를 할당하는데 적합하지 않다고 결정할 때, 제 1 섹션에서 이삭줍기를 실행하는 단계를 포함한다. 제 1 섹션에서 이삭줍기를 실행하는 단계는, 워드와 관련이 있는 제 1 루트가 이미 메모리에 존재하는 객체를 참조한다고 결정하게 배열되는 선택 워드를 위치시킬 목적으로 워드의 어레이를 검색하는 단계를 포함한다.
본 발명의 하나의 특징에 따라서, 컴퓨터 시스템은 제 1 메모리 섹션(first memory section)과 제 2 메모리 섹션(second memory section) 등으로써 배열된 메모리를 포함하는데, 여기서 제 2 메모리 섹션(second memory section)은 다수의 블록(block)으로 나누어진다. 상기 컴퓨터 시스템은 또한 메모리에 결합된 프로세서와 제 1 메모리 섹션과 관련이 있는 제 1 쓰레기 컬렉터(garbage collector) 등을 포함한다. 제 2 메모리 섹션과 관련이 있는 제 2 쓰레기 컬렉터(second collector)는, 선택 블록에 포함되지 않은 제 2 객체를 참조하는 제 1 객체(first object)를 선택 블록(selected block)이 포함하는지를 가리키도록 배열되는 관련이 있는 마커(marker)를 가지는 선택 블록에서 이삭줍기를 실행하도록 배열된다. 선택 마커(selected marker)는 루트 어레이(root array)와 관련이 있는데, 객체가 선택 블록에서 있지 않는 제 2 객체를 참조할 때, 루트 어레이(root array)는 객체의 주소를 수용한다. 하나의 실시예(實施例)에 있어서, 제 2 쓰레기 컬렉터(second collector)는 제 2 객체가 제 1 메모리 섹션에 있는지를 확인하는데 마커(marker)를 이용하도록 배열된다.
다음의 상세한 기술(記述)을 읽는 것에 의하여, 그리고 도면의 다양한 그림을 연구하는 것에 의하여, 본 발명의 상기 이점(利點)과 다른 이점(利點) 등은 분명해질 것이다.
본 발명, 그리고 본 발명의 덧붙여지는 이점(利點) 등은, 부속된 도면과 관련하여 얻어진 다음의 기술(記述)에 의하여 쉽사리 이해할 것이다.
도 1 은, 종래의 기술에 따라서 객체(客體)를 포함하는 컴퓨터 메모리(computer memory)의 영역에 대한 대표 그림을 나타낸다 ;
도 2 는, 종래의 기술에 따라서 신(新)-세대와 구(舊)-세대 등을 포함하는 메모리와, 루트 사이의 인터페이스(interface)에 대한 대표 도면을 나타낸다 ;
도 3 는, 종래 기술에 따라서 기억 세트(remembered set)와 관련이 있는 메모리에 대한 대표 도면을 나타낸다 ;
도 4a 는, 본 발명의 실시예에 따라서, 트레인(train)으로 분할되는 구(舊)-세대 메모리에 대한 대표 그림을 나타낸다 ;
도 4b 는, 본 발명의 실시예에 따라서, 카드 마크(card mark)의 어레이와 이와 관련이 있는 루트 어레이(root array)의 풀(pool) 등에 대한 대표 그림을 나타낸다 ;
도 5 는, 본 발명의 실시예에 따라서, 컴퓨터 프로그램을 실행하는 것과 관련이 있는 단계를 설명하는 처리 순서도를 나타낸다 ;
도 6 는, 본 발명의 실시예에 따라서, 도 5 의 단계(510)에서와 같이 이삭줍기(garbage collection)를 실행하는 처리를 설명하는 처리 순서도를 나타낸다 ;
도 7a 는, 본 발명의 실시예에 따라서, 도 6 의 단계(614)에서와 같이 신(新)-세대 메모리에서 이삭줍기(garbage collection)와 관련이 잇는 단계를 설명하는 처리 순서도를 나나낸다 ;
도 7b 는, 본 발명의 실시예에 따라서, 단일 루트(single root)를 따르는 것과 관련이 있는 단계를 설명하는 처리 순서도를 나타낸다 ;
도 7c 내지 도 7e 등은, 본 발명의 실시예에 따라서, 도 7b 의 단계(728)에서와 같이 카드 마크(card mark)를 갱신하는 것과 관련이 있는 단계를 설명하는 처리 순서도를 나타낸다 ;
도 8a 와 도 8b 등은, 본 발명의 실시예에 따라서, 도 6 의 단계(608)와 같이 구(舊)-세대 이삭줍기(garbage collection)를 실행하는 것과 관련이 있는 단계를 설명하는 처리 순서도를 나타낸다 ; 그리고
도 9 은, 본 발명을 구현하는데 적합한 컴퓨터 시스템에 대한 대표 도면을 나타낸다.
*참조 번호 설명
404 : 구(舊)-세대(old generation)
408 : 메모리의 블록(block of memory)
카(car)
412 : 트레인(trains)
컴퓨터 프로그램에 의한 이용을 위하여 컴퓨터 메모리(computer memory)를 동적(動的)으로 할당하는데 이삭줍기(garbage collection)는 이용된다. 일반적으로, 이삭줍기(garbage collection)에 의하여 프로그램의 실행에서 중단(pause)을 일으킨다. 이삭줍기(garbage collection)와 관련이 있는 중단-시간(pause-time)을 줄이는 장치는, 다수의 세대(世代)(generation)로 메모리(memory)를 나눈다. 실례(實例)에 의하여, 두 개의 세대(世代) 메모리 구조로써, 새롭게 할당된 객체(客體)를 포함하는 신(新)-세대(new generation)와, 보다 더 늙은 객체(客體)를 포함하는 구(舊)-세대(old generation) 등으로 메모리는 나누어질 수 있다. 새롭게 할당된 객체(客體)는 보다 더 늙은 객체(客體)보다 더 빨리 죽는다는 사실은, 높이 평가해야만 한다. 이와 같이, 이삭줍기(garbage collection)는 구(舊)-세대보다 신(新)-세대에서 보다 더 자주 실행될 수 있다. 일반적으로, 신(新)-세대는 메모리의 전체적인 크기와 비교되어 상대적으로 작다. 따라서, 프로그램의 실행 중(中)에 실질적인 인터럽트(interrupt)를 일으킴 없이, 신(新)-세대 내(內)에서 이삭줍기(garbage collection)는 일반적으로 실행된다.
신(新)-세대의 이삭줍기(garbage collection)로 인(因)하여 눈에 뜨이는 중단-시간(pause-time)은 일으키지 않지만, 구(舊)-세대는 일반적으로 신(新)-세대보다 더 크기 때문에, 구(舊)-세대의 이삭줍기(garbage collection)에 의하여 프로그램 실행 중(中)에 눈에 뜨이는 중단(pause)을 일으킨다. 덧붙여서, 구(舊)-세대의 객체(客體)에서 신(新)-세대의 객체(客體)까지 세대(世代) 사이의 포인터가 존재한다면, 프로그램을 실행하는 동안에 때때로 세대(世代) 사이의 포인터는 추적된다. 세대(世代) 사이의 포인터와 관련이 있는 구(舊)-세대의 객체는 신(新)-세대의 루트로써 고려되기 때문에, 이러한 포인터는 추적된다. 구(舊)-세대의 객체(object)에서 신(新)-세대의 객체(object)까지 포인터(pointer)나 참조(reference)에 대한 추적은, 때때로 복잡하고, 그러므로 시간을 낭비한다.
구(舊)-세대 메모리(old generation memory)를 더 작은 영역이나 블록 등으로 나누는 것에 의하여, 구(舊)-세대 이삭줍기와 관련이 있는 중단-시간(pause-time)은 작아질 수 있다. 구(舊)-세대 이삭줍기를 실행하는 각각의 시간에 있어서, 구(舊)-세대 이삭줍기는 구(舊)-세대 메모리의 특별한 블록에서 실행될 수 있다. 구(舊)-세대 이삭줍기를 실행하게 되는 블록을 제한하는 것에 의하여, 그리고 구(舊)-세대 이삭줍기를 실행하는 각각의 시간에서 서로 다른 블록에 있는 쓰레기를 컬렉션(collection)하는 것에 의하여, 구(舊)-세대 이삭줍기의 효율은 증가될 수 있다.
상기(上記)에서 기술(記述)한 것처럼, 구(舊)-세대 이삭줍기를 쉽게 실행하기 위하여, 구(舊)-세대 메모리는 블록(block)으로 나누어진다. 구(舊)-세대 이삭줍기를 실행하게 되는 각각의 시간에 대하여, 어떤 적합한 블록(block)에서 구(舊)-세대 이삭줍기는 실행된다. 즉, 구(舊)-세대 이삭줍기는 증분에 의하여 실행될 수 있다. 하나의 실시예(實施例)에 있어서, 이삭줍기가 실행되지 않았던 가장 오래된 블록(oldest block)에서 이삭줍기(garbage collection)는 실행될 수 있다. 또 하나의 실시예(實施例)에 있어서, 이삭줍기가 적어도 최근에 실행되었던 블록에서 이삭줍기(garbage collection)는 실행될 수 있다.
도 4a 에 관하여, 구(舊)-세대 내(內)의 블록(block)으로 메모리의 분할은 본 발명의 실시예(實施例)에 따라서 기술(記述)될 것이다. 구(舊)-세대(404)는 메모리의 블록(408)(block)을 포함한다. 메모리의 블록은 일반적으로 필요가 있는 기저(as-needed basis)에 할당된다. 즉, 실질적으로 모든 존재하는 블록(408)이 꽉 채워져 있을 때, 추가의 블록은 할당된다. 특별한 프로그램과 관련이 있는 객체를 포함하는 블록(408)은, 때때로 "카(cars)" 로 불린다. 블록(408)이나 카(408)는 "트레인(trains)"(412) 으로써 공지된 연결 세트(linked set)에 설치된다. 예를 들면, 트레인(412a)은 카(408a, 408b) 등을 포함하고, 트레인(412b)은 카(408c, 408d, 408e) 등을 포함하고, 트레인(412c)은 카(408f, 408g) 등을 포함한다.
특별한 카(408)가 특별한 트레인(412)에 언제 추가되는지에 바탕을 두어서, 트레인(412) 내(內)의 카(408)는 일반적으로 순서가 정해진다. 예를 들면, 트레인(412a) 내(內)에서, 카(408a)의 다음에 카(408b)가 트레인(412a)에 추가된다면, 카(408a)는 카(408b)와 같은 트레인에서 더 낮은 카(lower car)로써 고려된다. 비슷하게, 또한, 특별한 트레인(412)이 언제 만들어지는가에 바탕을 두어서, 트레인(412)은 일반적으로 순서가 정해진다. 도 4a 에서 나타난 것처럼, 트레인(412c)의 다음에 트레인(412b)이 메모리(404)에 추가된다면, 트레인(412c)은 트레인(412b)에 대하여, 그러므로 트레인(412b) 내(內)에서 카(408c, 408d, 408e) 등에 대하여 더 낮은 쪽에 있는 트레인으로 된다.
구(舊)-세대(404) 내(內)에서 이삭줍기를 실행하는데 이용되는 알고리즘은, 한 번에 한 세트 수(數)의 카(408)를 일반적으로 컬렉션(collection)한다. 기술(記述)된 실시예(實施例)에 있어서, 어떤 적합한 수(數)의 카는 각각의 구(舊)-세대 이삭줍기 중(中)에 컬렉션(collection)될 수 있다는 사실은 높이 평가되지만, 단일 카(408)만이 각각의 구(舊)-세대 이삭줍기 중(中)에 컬렉션(collection)된다. 한 번에 하나의 카(408)를 컬렉션(collection)하는 것에 의하여, 구(舊)-세대 이삭줍기의 전체 길이(length)는, 그러므로 구(舊)-세대 이삭줍기와 관련이 있는 중단-시간(pause-time)은 원래 경계가 정(定)해진다. 그러므로, 각각의 구(舊)-세대 이삭줍기 중(中)에 한 세트 수(數)의 카(408)를 컬렉션(collection)하는 것에 의하여, 구(舊)-세대 이삭줍기와 일반적으로 관련이 있는 길이에 의한 중단-시간을 줄일 수 있다.
일반적으로, 카(408)에서 이삭줍기를 실행할 목적으로, 구(舊) 메모리에 있는 각각의 카(408) 내(內)에서 객체에서 시작하는, 그렇지 않으면 객체에 접근하는 모든 포인터는 추적된다. 포인터를 추적하는 하나의 방법은 도 4b 에 관하여 아래에서 기술(記述)될 것이다. 컬렉션(collection)될 수 있는 특별한 카(408)는 라이브 객체(live object)를 포함할 때, 객체에 의하여 지적되는, 그렇지 않으면 지적되었던 트레인(412)으로 객체는 복사된다. 그 다음에, 객체의 복사가 일단 만들어지면, "원(源)" 객체는 컬렉션(collection)되거나 교정(矯正)된다. 일반적으로, 선택 트레인(412)(selected train)이 더 이상 그 자체의 바깥쪽으로 포인터를 가지지 않을 때, 선택 트레인(412)(selected train)은 제거될 수 있는데, 즉, 선택 트레인(412)에 할당된 메모리는 제거된다. 비슷하게, 선택 카(408)(selected car)는 더 이상 그 자체의 바깥쪽으로 포인터를 가지지 않을 때, 선택 카(408)(selected car)는 제거될 수 있다.
기술(記述)되는 실시예(實施例)에 있어서, 주어진 트레인(412) 내(內)의 카(408)의 크기는 고정된다. 즉, 모든 카(408)는 실질적으로 같은 크기를 가질 수 있다. 그러므로, 단일 카(408)가 연결 객체를 수용하는데 충분한 공간을 가지지 않기 때문에, 하나의 카(408), 예를 들면, 카(408f)에 있는 객체(416a)는 제 2 카(408), 예를 들면, 카(408g)에 있는 객체(416b)에 연결될 수 있다. 구(舊)-세대 이삭줍기 중(中)에, 객체(416a, 416b) 등이 분리 카(408)에 있기 때문에, 객체(416a, 416b) 등은 살아남는 것처럼 보이고, 서로를 참조한다. 결과로써, 구(舊)-세대 이삭줍기는 카(408f, 408g)의 컬렉션(collection)이라는 결과를 일으킬 수 없다. 그러므로, 트레인(412c) 내(內)에 있는 카(408f, 408g) 등의 사이에서 포인터가 추적되지 않는다면, 카(408f, 408g)와 관련이 있는 메모리는 일반적으로 제거되지 않는다.
일반적으로, 카(408)의 크기뿐 아니라 트레인(412)의 길이 등은 넓은 범위에서 다양해질 수 있다. 카(408)의 크기는 구(舊)-세대(408)의 크기, 이삭줍기 알고리즘의 속력, 그리고 이삭줍기 알고리즘에서 실행되는 컴퓨터의 속력 등을 포함하는, 그러나 이러한 것에 제한되지 않는 인자(因子)에 의존할 수 있다. 실례(實例)에 의하여, 메모리에서 약 20 kilobytes 내지 약 100 kilobytes 까지의 카 크기는 현재 시스템에서 잘 작동한다. 기술(記述)된 실시예(實施例)에 있어서, 카(408)는 메모리에서 약 64 kilobytes 를 포함한다.
도 4b 에 관하여 아래에서 기술(記述)되는 것처럼, 일반적으로 카(408)에서 실행되는 구(舊)-세대 이삭줍기를 쉽게 하는데 이용되는 카드(420)(card) 등으로 카(408)는 분리될 수 있다. 카드(420)(card)가 약 100 내지 약 1000 bytes 까지를 종종 포함할 수 있지만, 카(408)와 같이 카드(420)(card)는 어떤 적합한 크기를 가질 수 있다. 예를 들면, 메모리의 약 64 kilobytes 를 가지는 카(408)에 대하여, 카드(420)는 약 512 bytes 를 가진다.
구(舊)-세대 객체에서 신(新)-세대 객체를 지적하는 세대(世代) 사이의 포인터(inter-generational pointer)를 추적하는 효율은, 구(舊)-세대 내(內)에서 서로 다른 영역과 관련이 있는 스토리지(storage)나 마커(marker) 등을 공급하는 것에 의하여 개선될 수 있다. 하나의 실시예(實施例)에 있어서, 특별한 영역의 관련이 있는 부분이 신(新)-세대에서 객체에 대한 포인터를 포함하는 것을 가리키는데 설정되는 플래그(flag)를 포함하는 워드(word)로써, 마커(marker)는 이용된다. 상기 워드의 이용에 의하여, 구(舊)-세대 객체에서 신(新)-세대 객체로의 세대(世代) 사이의 포인터(inter-generational pointer)를 추적하는데 이용될 수 있는 효과적인 구성을 공급한다. 마커(marker)를 워드(word)로써 기술(記述)하지만, 예를 들면, 비트나 바이트 및 유사 단위로써 어떤 적합한 스토리지 타입으로 마커(marker)는 될 수 있다는 사실은, 높이 평가하여야만 한다.
구(舊)-세대 메모리에 있는 카드와 관련이 있는 객체에서, 신(新)-세대에 있는 객체로의 세대(世代) 사이의 포인터를 추적할 목적으로, 카드(card)에 "추적 구조(tracking structure)" 를 공급한다. 세대(世代) 사이의 포인터는 카드에 대하여 존재한다는 것을 확인하는데, 또한 카드 내(內)에 있는 어떤 객체 포인터를 포함하는가를 확인하는데, 추적 구조(tracking structure), 또는 카드 마크(card marks) 등은 이용될 수 있다. 도 4b 는, 본 발명의 실시예에 따라서, 카드 마크(card mark)의 어레이(array)와 루트 어레이(root array)의 관련이 있는 풀(pool) 등에 대한 대표 도면을 나타낸다. 루트 어레이(root array)는, 일반적으로 카드에 대하여 오프-셋(off-set)으로 분류되는 루트 위치(root location)를 포함하는 작은 어레이가 된다. 달리 말하면, 루트 어레이(root array)는 실질적으로 작은, 기억 세트(remembered set)가 된다. 카드 마크(452)(card mark)의 어레이(450)(array)는, 루트 어레이(460)(root array)의 풀(464)(pool)에 포함된 루트 어레이(460)(root array)로 향(向)하는 포인터(460)(pointer)를 포함한다. 일반적으로, 카드 마크(452)는 트레인 내(內)의 카(car)와 관련이 있다. 특별하게, 트레인 내(內)에 있는 카(car)는 구(舊)-세대 객체를 수용하는 카드의 수(數)로 분리된다. 이와 같이, 트레인 내(內)에 있는 카(car)는 많은 카드 마크(452)(card mark)와 관련이 있다. 카와 관련이 있는 모든 카드 마크(452)를 포함하거나 포함하지 않는 카드 마크(452)를 그룹(group)으로 만드는 것은, 카드 마크(452)의 어레이(450)로써 고려된다. 기술(記述)된 실시예에 있어서, 어레이(450)는 구(舊)-세대와 관련이 있는 모든 카드 마크(452)를 포함한다.
기술(記述)되는 실시예에 있어서, 카드 마크(452a)는 일반적으로 어떤 적합한 길이의 워드일 수 있다는 사실은 높이 평가해야만 하지만, 카드 마크(452a)와 같은 카드 마크(452)는 32-bit 워드이다. 대신(代身)에, 카드 마크를 구성하는 데이터 구조는 다수의 요소로 분리된다. 하나의 실시예에서, 카드 마크(452a)를 구성하는 비트는 특별한 응용에 적합한 어떤 방식으로 할당될 수 있지만, 카드 마크(452a)에서 가장 낮은 비트(lowest bit)나 최하위 비트(least significant bit, LSB)는, 카드 마크(452a)의 "상황(status)" 또는 전체 상태(overall condition)를 실질적으로 확인하는 플래그(flag)로써 이용된다. 카드 마크(452a)의 가장 낮은 비트(468)(lowest bit)는 "덜티(dirty)" 플래그(flag)가 된다. 즉, 가장 낮은 비트(468)(lowest bit)는 일반적으로 카드 마크(452a)나 보다 더 상세하게 (도 4a 에서 나타난 것처럼) 카드 마크(452a)와 관련이 있는 카드(card)가 "덜티(dirty)" 한지를 지적하는데 설치된다. 덜티 카드(dirty card)는 마지막 이삭줍기 이후(以後)에 포인터를 저장하였던 카드(card)이다. 상기 포인터는 구(舊)-세대 메모리에서 신(新)-세대 메모리로 지적되는 세대(世代) 사이의 포인터, 더 낮은 트레인(lower train)으로 포인터, 그리고 카드 마크(452a)와 관련이 있는 같은 트레인에서 더 낮은 카로의 포인터 등을 포함할 수 있지만, 이러한 포인터에 제한되지 않는다. 가장 낮은 비트(468)가 세트(set)될 때, 즉, 가장 낮은 비트(468)이 "0" 으로 세트(set)될 때, 지적(indication)은 카드 마크(452a)가 덜티(dirty)하다는 것을 나타낸다.
카드 마크(452a)의 두 번째로 가장 낮은 비트(470)(second lowest bit)는 신(新)-세대 플래그(flag)이고, 신(新)-세대를 가리키는 세대(世代) 사이의 포인터를 카드 마크(452a)가 포함하는지를 지적하는데 카드 마크(452a)의 두 번째로 가장 낮은 비트(470)(second lowest bit)는 이용된다. 두 번째로 가장 낮은 비트(470)(second lowest bit)가 세트(set)될 때, 즉 "0" 으로 세트(set)될 때, 지적(indication)은 카드 마크(452a)는 신(新)-세대를 가리키는 세대(世代) 사이의 포인터를 포함한다는 것을 나타낸다. 세 번째로 가장 낮은 비트(472)(third lowest bit)는 기술(記述)된 실시예에서 더 낮은 트레인 플래그(lower train flag)이다. 카드 마크(452a)가 더 낮은 트레인으로의 포인터를 가지는 것을 가리키도록, 더 낮은 트레인 플래그(lower train flag)는 배열된다. 더 낮은 트레인 플래그, 또는 세 번째로 가장 낮은 비트(472)(third lowest bit)가 세트(set)될 때, 지적(indication)은 카드 마크(452a)가 더 낮은 트레인으로의 포인터를 포함하는 것을 나타낸다. 네 번째로 가장 낮은 비트(474)(fourth lowest bit)는 같은 트레인 플래그인데, 카드 마크(452a)가 같은 트레인에서 더 낮은 카로의 포인터를 포함하는 것을 가리키도록 상기의 같은 트레인 플래그는 배열된다.
기술(記述)된 실시예에 있어서, 카드 마크(452a)가 소거되는 것을 고려할 목적으로, 카드 마크(452a)는 구(舊)-세대에서 신(新)-세대를 가리키는 포인터, 더 낮은 트레인으로의 포인터, 또는 같은 트레인의 더 낮은 카로의 포인터 등을 일반적으로 포함할 수 있다. 이와 같이, 가장 낮은 비트(468), 두 번째로 낮은 비트(470), 세 번째로 낮은 비트(472), 그리고 네 번째로 낮은 비트(474) 등은, 카드 마크(452a)가 소거되는 상황에서 "1" 이라는 값을 모두 가진다. 달리 말하면, 카드 마크(452a)가 소거될 때, 카드 마크(452a)의 네 번째로 가장 낮은 비트는 소거되었다. 그러므로, 위에서 나타난 것처럼, 카드 마크(452a, 452b) 등은 소거되는데, 반면(反面)에 세트(set)된 가장 낮은 비트를 가지는 카드 마크(452c)는 덜티(dirty)로 된다.
카드 마크(452a)와 관련이 있는 포인터의 주소를 실질적으로 수용하는, 관련이 있는 루트 어레이(460)를 가리키는 포인터로써의 이용을 위하여, 카드 마크(452a)에서 그 다음에 남은 28 개의 비트는 할당될 수 있다. 대신(代身)에, 예를 들면, 기술(記述)된 실시예에서, 카드 마크(452a)는 27 비트의 포인터(478)와 예약된 비트(480) 등을 포함한다. 27 비트 포인터(478)는 카드 마크(452a)에서 루트 어레이(460a)를 가리키는 포인터(456a)를 확인한다. 루트 어레이(460a)에서 워드의 수(數)는 넓은 범위에서 다양할 수 있지만, 루트 어레이(460a)는 때때로 8 워드나 그렇지 않으면 16 워드로 구성될 수 있다. 루트 어레이(460)는 일반적으로 루트로의 참조를 수용하도록 배열된다. 실례(實例)에 의하여, 루트 어레이(460a)는 카드 마크(450a)와 관련이 있는 루트, 그러므로 카드 마크(450a)와 관련이 있는 카드(도 4a 에서 나타난 것처럼) 등을 수용할 수 있다.
적합한 루트 어레이(460)가 채워질 때, "루트 어레이 오버플로우(root array overflow)" 는 일어날 수 있다. 너무나 많은 루트가 주어진 루트 어레이(460)에 저장될 때, 루트는 더 이상 추적되지 않는다. 풀(464)에서 할당을 위하여 이용 가능한 루트 어레이(460)에 관하여 풀(464)에서 루트 어레이(460)으로의 포인터의 내용이 초과될 때, 루트 어레이 오버플로우는 일반적으로 일어난다. 결과로써, 이삭줍기를 실행할 때, 루트 어레이 오버플로우와 관련이 있는 카드에 함께 있는 포인터가 일반적으로 루트를 확인하는데 검색된다. 루트 어레이 오버플로우가 일어날 때, 27-비트 포인터(478)는 널(null)로써 세트(set)된다. 즉, 27-비트 포인터(478)에 있는 27 비트는 "0" 으로 세트(set)된다.
이삭줍기 처리와 직접적으로 관련이 있거나 관련이 없는 적합한 목적의 어떤 수(數)에 대하여, 예약이 된 비트(480)(reserved bit)는 이용될 수 있다. 적합한 목적에 있어서, 카드 마크(452a)의 존속기간을 가리키는데 예약이 된 비트(480)를 이용하는 것은 포함될 수 있지만, 그것에 제한되지는 않는다. 카드 마크(452a)에서 포인터, 예를 들면, 27-비트 포인터(478)와 관련이 있는 비트의 수(數)를 줄이는 것에 의하여, 카드 마크(452a)에서 추가의 예약이 된 비트는 또한 포함될 수 있다는 것은, 높이 평가해야만 한다.
신(新)-세대 객체를 향(向)하는 세대(世代) 사이의 포인터를 포함하는 카(car) 내(內)에서 카드(card)를 추적할 목적으로, 이삭줍기 처리와 관련하여 카드 마크(card mark)는 이용될 수 있다. 하나의 실시예에 있어서, 컴퓨터 프로그램의 실행 중(中)에, 카드 마크가 실질적으로 현재를 남기는 것이 가능하도록, 카드 마크(card mark)는 갱신될 수 있다. 그 다음에, 이삭줍기 중(中)에 세대(世代) 사이의 포인터를 확인하는데 카드 마크는 검사될 수 있다.
카드 마크가 컴퓨터 프로그램의 실행 중(中)에 이삭줍기 처리를 쉽게 하는데 이용될 때, 일반적으로 카드 마크는 검색되고, 동시에 카드 마크에 의하여 참조된 객체를 확인하기 위하여 카드 마크는 갱신된다. 다음으로 도 5 에 관하여, 이삭줍기를 이용하는 프로그램을 실행하는 것과 관련이 있는 단계는 본 발명의 실시예에 따라서 기술(記述)될 것이다. 프로그램을 실행하기 전(前)에, 프로그램과 관련이 있는 카드 어레이(card array)는 단계(502)에서 초기화된다. 하나의 실시예에 있어서, 카(car)와 관련이 있는 카드 어레이(card array)는 카드 마크, 또는 카드 마크로의 참조 등을 포함하는데, 이러한 카드 어레이(card array)는 프로그램에 의하여 이용되는 객체와 관련이 있다. 이와 같이, 카드 어레이는 일반적으로 프로그램에서 이용되는 객체를 추적하는데 이용된다. 카드 어레이를 초기화한 후(後)에, 객체를 할당하거나, 그렇지 않으면 객체를 위한 포인터를 저장하는 것이 바람직할 때까지, 프로그램은 단계(503)에서 실행된다. 일반적으로 객체를 할당하는 것은 객체에 메모리를 할당하는 것을 포함하는데, 반면(反面)에 객체를 위한 포인터를 저장하는 것은 제 1 객체 내(內)에서 또 하나의 객체로의 포인터를 저장하는 것을 포함한다.
실행 중(中)에, 주기적으로 포인터를 저장하는 명령이 존재할 것이다. 포인터를 저장할 때, 단계(504)에 의하여 대표되는 것처럼, 단계(512)에서 저장될 포인터가 있게 되는 객체에 대응하는 카드 어레이에 있는 엔트리(entry)는 확인된다. 일단 카드 어레이 엔트리가 확인되면, 카드 어레이 엔트리가 단계(514)에서 덜티(dirty)로 표시된다. 도 4b 에 관하여 상기(上記)에서 기술(記述)된 것처럼, 카드 어레이 엔트리, 예를 들면, 카드 마크를 덜티(dirty)로써 표시하는 것은, 엔트리(452a)의 가장 낮은 비트(468)와 같이 엔트리의 덜티 플래그(dirty flag)를 설정하는 것을 포함한다. 카드 마크를 덜티(dirty)로써 표시한 후(後)에, 어떤 적합한 방법을 이용하여 포인터는 단계(516)에 저장된다. 포인터가 일단 기록되면, 처리는 단계(503)로 들어가는데, 여기서 프로그램은 계속해서 실행된다. 프로그램이 종료될 때, 프로그램을 다시 실행하는 것은 단계(502)에서 다시 시작하는데, 여기서 카드 마크의 어레이는 초기화된다.
또한, 실행은 객체를 할당하는 명령을 일반적으로 공급한다. 하나의 실시예에 있어서, 단계(504)로 돌아와서, 객체를 할당할 때, 할당되는 객체를 위하여 신(新)-세대 메모리가 충분히 존재하는 것에 관하여, 단계(516)에서 결정된다. 객체를 할당하는 이용을 위하여 신(新)-세대 메모리가 충분하게 존재하는 것이 단계(506)에서 결정된다면, 객체는 단계(508)에서 할당되고, 처리는 단계(503)로 들어가는데, 저장되는 포인터가 있는지에 관하여 단계(503)에서 결정된다.
단계(506)에서 결정이라는 것이 객체를 할당하는 신(新)-세대 메모리가 충분하지 않다는 것이라면, 처리는 단계(506)로 진행되는데, 여기서 이삭줍기가 실행된다. 이삭줍기 중(中)에, 신(新)-세대 메모리와 가능하다면 구(舊)-세대 메모리 등은, 객체를 할당할 수 있도록 신(新)-세대 메모리의 섹션을 늘이기 위하여 소거될 수 있다. 어떤 적합한 이삭줍기 방법이 이용될 수 있다는 사실은 높이 평가해야만 하지만, 특별하게 적합한 이삭줍기 방법은 도 6 에 관하여 아래에서 기술(記述)될 것이다. 이삭줍기를 단계(510)에서 실행한 후(後)에, 처리는 단계(506)로 진행되고, 단계(506)에서 객체를 할당하기 위하여 신(新)-세대 메모리를 이삭줍기에 충분하게 공급되었다는 것에 관한 결정을 하는데, 여기서 이용되는 객체는 그 할당이 단계(503)에서 필요하다.
도 6 에 관하여, 이삭줍기를 실행하는 것과 관련이 있는 단계는 본 발명의 실시예와 관련하여 기술(記述)될 것이다. 즉, 도 5 의 단계(510)는 기술(記述)될 것이다. 객체를 할당하는 것이 가능하게 충분한 메모리 공간을 "만들기" 위하여, 이삭줍기는 신(新)-세대 메모리와 구(舊)-세대 메모리 양쪽에서 실행될 수 있다. 이삭줍기를 실행하는 시스템이 다(多)-연속(multi-threaded)으로 이루어진 시스템이라면, 적합한 방법을 이용하여 단계(602)에서 연속(thread)을 동시에 일어나게 한다. 동시에 일어나는 것을 필요로 하는 어떤 연속(thread)이 동시에 일어난다면, 단계(604)에서 신(新)-세대 메모리 내(內)에서 이삭줍기는 실행된다. 상기의 신(新)-세대 이삭줍기를 실행하는 하나의 방법과 관련이 있는 단계는, 도 7a 에 관하여 하기(下記)에서 기술(記述)될 것이다.
신(新)-세대 이삭줍기를 단계(604)에서 실행한 후(後)에, 처리는 단계(606)로 진행되는데, 이러한 단계에서 구(舊)-세대 메모리를 위한 이삭줍기를 실행하는 것이 필요한지에 관하여 결정한다. 기술(記述)된 실시예에 있어서, 구(舊)-세대 이삭줍기는 주기적으로 실행된다. 즉, 미리 결정된 시간의 양(量)이 지난 후(後)에, 구(舊)-세대 이삭줍기는 실행된다. 하지만, 다른 실시예에 있어서, 서로 다르거나, 추가의 판단 기준은 구(舊)-세대 이삭줍기를 필요로 하는지에 대한 결정에서 이용될 수 있다.
구(舊)-세대 이삭줍기가 필요하다고 결정된다면, 카드 마킹 방법(card marking scheme)을 이용하여 구(舊)-세대 이삭줍기는 단계(608)에서 실행된다. 카드 마킹 방법(card marking scheme)을 이용하여 구(舊)-세대 메모리에서 실행되는 이삭줍기와 관련이 있는 방법은 넓게 다양하지만, 하나의 적합한 구(舊)-세대 이삭줍기 방법은 도 8a 와 도 8b 등에 관하여 아래에서 기술(記述)될 것이다.
구(舊)-세대 이삭줍기가 단계(608)에서 일단 완성된다면, 객체를 할당하는 것이 가능한 이삭줍기를 실행하는 전체적인 처리는 완성된다. 그러므로, 처리는 도 5 의 단계(506)로 진행되는데, 신(新)-세대 메모리가 객체를 할당하는데 충분하게 이용 가능한지를 결정한다. 비슷하게, 구(舊)-세대 이삭줍기는 필요하지 않다는 것이 단계(606)에서 결정된다면, 처리는 또한 도 5 의 단계(506)로 진행된다.
도 7a 는, 본 발명의 실시예에 따라서, 신(新)-세대 이삭줍기와 관련이 있는 단계, 즉 도 6 의 단계(604)를 설명하는 처리 순서도를 나타낸다. 단계(701)에서, 고정 루트(fixed root)를 따른다. 이전(以前)에 기술(記述)된 것처럼, 고정 루트(fixed root)는 루트(root), 예를 들면, 스택에 있는 라이브 객체(live object)인데, 이삭줍기를 통하여 소거되는 구(舊)-세대 메모리, 또는 신(新)-세대 메모리를 직접적으로 가리키는 루트(root)이다. 일반적으로 고정 루트를 따르는 것은 루트의 참조를 다른 데로 옮아가면서 따르는 것이다. 고정이든 다른 것이든 루트(root)를 따른 것과 관련이 있는 실질적인 단계는, 도 7b 내지 도 7e 등에 관하여 아래에서 기술(記述)될 것이다.
고정 루트(fixed root)를 따른 후(後)에, 덜티 플래그(dirty flag)나 세트(set)되는 신(新)-세대 플래그 양쪽에서, 또는 어느 하나에서 카드 어레이에 있는 다음의 엔트리를 위치시킬 목적으로, 단계(702)에서 카드 어레이는 검색된다. 앞에서 기술(記述)한 것처럼, 하나의 실시예에서, 비트를 "세팅(setting)" 하는 것은 비트에 "0" 의 값을 할당하는 것을 의미하고, 반면(反面)에 비트를 "클리어링(clearing)" 하는 것은 비트에 "1" 의 값을 할당하는 것을 의미한다. 단계(703)에서, 신(新)-세대 플래그나 세트(set)된 덜티 플래그(dirty flag) 양쪽, 또는 어느 하나를 갖춘 엔트리(entry)나 카드 마크 등을 발견한 것에 관한 결정을 한다. 상기 엔트리가 발견된다면, 처리는 단계(704)로 진행되는데, 엔트리가 덜티(dirty)한지를 결정한다.
엔트리가 덜티(dirty)하다고 단계(704)에서 결정한다면, 엔트리와 관련이 있는 카드는 단계(707)에서 소거되는 것으로써 표시된다. 카드가 소거됨을 표시(marking)하는 것은 카드가 소거됨과 관련이 있는 카드 마크(card mark)를 표시(marking)하는 것을 의미한다. 단계(707)에서 카드가 소거된다고 표시한 후(後)에, 처리는 단계(708)로 진행되는데, 카드에 있는 모든 객체는 따르게 되는 루트를 위치시키기 위하여 검색된다. 상기(上記)에서 기술(記述)된 것처럼, 루트를 따르는 것과 관련이 있는 단계는 도 7b 내지 도 7e 등에 관하여 라래에서 논의될 것이다. 루트를 일단 따른다면, 처리의 흐름은 단계(702)로 돌아가는데, 카드 어레이는 다음의 엔트리, 예를 들면, 세트(set)되는 신(新)-세대 플래그나 덜티(dirty) 플래그 양쪽, 또는 어느 하나를 갖춘 카드 마크(card mark)를 위치시키는데 검색된다.
단계(704)에서 엔트리가 덜티(dirty)하지 않다고 결정된다면, 엔트리는 세트(set)된 신(新)-세대 플래그를 가진다. 달리 말하면, 엔트리는 세대(世代) 사이의 포인터를 포함한다. 엔트리가 덜티(dirty)하지 않다면, 처리의 흐름은 단계(704)에서 단계(714)로 진행하는데, 엔트리와 관련이 있는 루트 어레이가 오버플로우(overflow)되었다는 것에 관한 결정을 단계(714)에서 한다. 오버플로우 루트 어레이(overflowed root array)는 추가 루트의 삽입을 받아들이는데 충분한 공간을 가지고 있지 않은 루트 어레이(root array)이다. 엔트리와 관련이 있는 루트 어레이가 오버플로우(overflow)가 된다고 결정하면, 처리 흐름은 단계(707)로 진행하는데, 엔트리와 관련이 있는 카드는 소거된다고 표시된다.
단계(714)에서 처리 흐름은 단계(718)로 진행되는데, 엔트리와 관련이 있는 블록은 검색되고, 블록과 관련이 있는 루트를 따른다. 그 다음에, 처리 흐름은 단계(702)로 돌아가는데, 가장 낮은 비트를 "0" 으로 세트(set)하면서, 카드 어레이에서 다음의 엔트리를 찾기 위하여, 카드 어레이를 검색하는 단계이다.
적합한 엔트리, 즉 "0" 으로 세트(set)된 가장 낮은 비트 등을 단계(703)에서 못 찾을 때, 모든 복사된 객체를 단계(710)에서 검색할 때까지, 신(新)-세대 메모리 내(內)의 루트를 따른다. 일단 모든 복사된 객체를 검색하면, 신(新)-세대 이삭줍기 처리는 완성된다.
일반적으로, 이삭줍기는 앞에서 기술(記述)한 것처럼 루트를 따르는 것을 포함한다. 이제 도 7b 에 관하여, 단일 루트를 따르는 것과 관련이 있는 단계는 본 발명의 실시예를 따라서 기술(記述)될 것이다. 처리는 루트가 이삭줍기가 일어나는 메모리 영역을 가리키는 결정을 단계(720)에서 시작한다. 루트(root)가 이삭줍기가 일어나는 영역을 가리키지 않는다고 결정한다면, 루트를 따르는 처리는 완성된다. 다른 측면에서, 단계(720)에서 이삭줍기가 일어나는 영역을 루트가 실질적으로 가리키지 않는다고 결정한다면, 단계(721)에서 카드 마크의 헤더 필드는 전방으로 향(向)하는 포인터(forwarding pointer)를 수용하는지에 관한 결정을 한다. 즉, 카드 마크와 관련이 있는 전방으로 향(向)하는 포인터(forwarding pointer)에 의하여, 신(新) 메모리 위치(new memory location)를 확인하는 것에 관하여 결정한다.
헤더 필드가 전방으로 향(向)하는 포인터를 수용한다고 결정한다면, 처리의 흐름은 단계(721)에서 단계(722)로 진행되는데, 단계(722)에서 전방으로 향(向)하는 카운터(forwarding counter)에 의하여 확인되는 신(新) 위치로 루트는 갱신된다. 루트를 갱신한 후(後)에, 따라서 카드 마크는 단계(728)에서 갱신된다. 카드 마크를 갱신하는 것과 관련이 있는 단계는 도 7c 에 관하여 아래에서 기술(記述)될 것이다. 일단 카드 마크가 갱신된다면, 루트를 따르는 처리는 완성된다.
단계(721)로 돌아와서, 헤더 필드가 전방으로 향(向)하는 포인터를 포함하지 않는다면, 루트에 의하여 확인되는 객체는 신(新) 위치로 복사되고, 전방으로 향(向)하는 포인터는 단계(724)에서 객체의 헤더에 삽입된다. 전방으로 향(向)하는 포인터는 객체의 신(新) 위치를 확인한다. 전방으로 향(向)하는 포인터가 헤더에 삽입되었을 때, 루트는 단계(726)에서 신(新) 위치로 갱신된다. 그 다음에, 단계(728)에서 관련이 있는 카드 마킹(card marking)은 갱신되고, 루트를 따르는 처리는 완성된다.
도 7c 내지 도 7e 에 관하여, 카드 마크를 갱신하는 것과 관련이 있는 단계, 즉 도 7b 의 단계(728)는, 본 발명의 실시예에 따라서 기술(記述)될 것이다. 단계(740)에서, 포인터가 구(舊)-세대에서 신(新)-세대를 가리키는 것에 관한 결정을 한다. 포인터가 구(舊)-세대에서 신(新)-세대를 가리킨다면, 단계(746)에서 구(舊)-세대에서 신(新)-세대로의 포인터가 존재하는지를 가리키도록 신(新)-세대 플래그를 세트(set)하는 결정을 한다.
단계(752)에 있어서, 단계(746)에서 신(新)-세대 플래그를 세트(set)한다고 결정할 때, 루트 어레이는 오버플로우(overflow)가 되었는지를 결정한다. 루트 어레이가 오버플로우(overflow)되면, 카드 마크를 갱신한는 처리는 완성된다. 하지만, 루트 어레이가 오버플로우되지 않는다면, 루트 어레이가 채워진다는 것에 관한 결정을 단계(754)에서 한다. 루트 어레이가 채워지지 않는다고 결정하면, 처리의 흐름은 단계(750)로 진행되는데, 루트, 즉 따르게 되는 루트는 루트 어레이에 삽입되고, 카드 마크를 갱신하는 처리는 완성된다. 루트 어레이가 단계(754)에서 채워진다고 결정하면, 처리의 흐름은 단계(755)로 진행되는데, 카드 마크는 루트 어레이의 오버플로우가 존재한다는 표시하도록 세트(set)된다. 카드 마크를 세트(set)한 후(後)에, 카드 마크 갱신 처리는 완성된다.
단계(746)와 신(新)-세대 플래그를 세트(set)한다는 결정 등으로 돌아와서, 신(新)-세대 포인터가 세트(set)되지 않는다고 결정할 때, 그 다음에 단계(747)에서, 구(舊)-세대에서 신(新)-세대를 포인터가 가리키는 것을 지적하도록, 신(新)-세대 포인터를 세트(set)한다. 루트 어레이를 할당하고, 단계(748)에서 할당된 루트 어레이를 가리키도록 카드 마크를 세트(set)한다. 단계(748)에서, 처리는 단계(749)로 진행되는데, 단계(749)에서 루트 어레이의 할당은 성공적이었다고 결정한다. 루트 어레이의 할당이 성공적이었다면, 그 다음에 따르게 되는 루트(followed root)는 루트 어레이에서 단계(750)로 삽입된다. 다른 측면에서, 루트 어레이의 할당이 성공적이 아니었다면, 처리의 흐름은 단계(755)로 진행되는데, 카드 마크는 단계(755)에서 루트 어레이가 오버플로우(overflow)라고 지적하도록 세트(set)된다. 하나의 실시예(實施例)에서, 루트 어레이가 오버플로우라고 지적하도록 카드 마크를 세팅(setting)하는 단계는 카드 마크에서 포인터, 예를 들면, 27 비트 포인터를 널(null)로 세팅(setting)하는 단계를 포함한다.
단계(740)에서 결정은 포인터가 구(舊)-세대에서 신(新)-세대를 가리키지 않는 것이라면, 처리의 흐름은 단계(742)로 진행되는데, 구(舊)-세대의 더 낮은 트레인을 가리키는 포인터가 존재하는지를 결정하는 단계이다. 포인터가 구(舊)-세대의 더 낮은 트레인을 가리킨다고 결정한다면, 구(舊)-세대에서 신(新)-세대로의 포인터가 존재하는지를 지적하도록 신(新)-세대 플래그를 세트(set)하는 것에 관하여 단계(760)에서 결정한다. 신(新)-세대 플래그를 세트(set)한다고 지적한다면, 처리의 흐름은 단계(775)로 진행되는데, 더 낮은 트레인 플래그를 세트(set)한다는 결정을 단계(775)에서 한다. 기술(記述)된 실시예에 있어서, 더 낮은 트레인 플래그(lower train flag)는 카드 마크에서 세 번째로 가장 낮은 비트(third lowest bit)이고, 상기(上記)에서 기술(記述)된 것처럼, 포인터가 더 낮은 트레인을 가리킨다고 더 낮은 트레인 플래그(lower train flag)는 지적한다. 더 낮은 트레인 플래그가 세트(set)된다고 결정한다면, 카드 마크를 갱신하는 처리는 완성된다. 대신(代身)에, 더 낮은 트레인 플래그를 세트(set)하지 않는다면, 더 낮은 트레인 플래그는 단계(776)에서 세트(set)된다. 일단 더 낮은 트레인 오버플로우 플래그가 세트(set)되면, 카드 마크 갱신 처리는 완성된다.
신(新)-세대 플래그를 세트(set)하지 않는다고 단계(760)에서 결정한다면, 처리의 흐름은 단계(766)로 진행되는데, 더 낮은 트레인 플래그를 세트(set)한다고 단계(766)에서 결정한다. 더 낮은 트레인 플래그를 세트(set)하지 않는다고 단계(766)에서 결정한다면, 더 낮은 트레인으로의 포인터의 존재를 지적하도록 단계(767)에서 더 낮은 트레인 플래그는 세트(set)된다. 일단 더 낮은 트레인 플래그를 세트(set)하면, 루트 어레이는 할당되고, 카드 마크는 단계(768)에서 할당된 루트 어레이를 가리키도록 세트(set)된다. 그 다음에, 단계(769)에서 새로운 루트 어레이의 할당이 성공적이었다고 결정한다. 할당이 성공적이었다면, 루트가 루트 어레이에서 아직 제시되지 않은 상황에서, 단계(770)에서 따르게 되는 루트(followed root)는 루트 어레이에 삽입된다. 그 다음에, 카드 마크를 갱신하는 처리는 완성된다. 다른 측면에서, 단계(769)에서 새로운 루트 어레이의 할당이 성공적이 아니었다면, 처리의 흐름은 단계(769)에서 단계(762)로 진행되는데, 카드 마크는 루트 어레이 오버플로우를 지적하도록 세트(set)된다. 카드 마크가 루트 어레이 오버플로우를 지적하도록 세트(set)된다면, 카드 마크의 갱신 처리는 완성된다.
단계(766)로 돌아와서, 더 낮은 트레인으로의 포인터가 존재하는지를 지적하도록 더 낮은 트레인 플래그를 세트(set)한다고 결정한다면, 대응하는 루트 어레이는 오버플로우가 된다는 것에 관하여 단계(772)에서 결정된다. 루트 어레이가 오버플로우 된다면, 카드 마크는 단계(762)에서 루트 어레이 오버플로우를 지적하도록 세트(set)된다. 대신(代身)에, 루트 어레이가 단계(722)에서 오버플로우 되지 않았다고 결정한다면, 루트는 아직 루트 어레이에서 제시되지 않았다면, 따르게 되는 루트(followed root)는 단계(770)에서 루트에 삽입된다. 구(舊)-세대의 더 낮은 트레인을 포인터가 가리킨다고 결정하는 단계인 단계(742)로 다시 돌아와서, 포인터가 구(舊)-세대의 더 낮은 트레인을 가리키지 않는다고 결정한다면, 포인터는 같은 트레인에서 더 낮은 카를 가리키는 것에 관한 결정을 한다. 포인터가 같은 트레인에서 더 낮은 카를 가리키지 않는다면, 카드 마크 갱신 처리는 완성된다. 하지만, 포인터가 같은 트레인에서 더 낮은 카를 가리킨다고 결정하면, 처리의 흐름은 단계(780)로 진행되는데, 신(新)-세대로의 포인터가 존재하는 것을 지적하도록 신(新)-세대 플래그를 세트(set)하는 결정을 단계(780)에서 한다.
신(新)-세대 플래그를 세트(set)한다고 단계(780)에서 지적한다면, 같은 트레인 플래그를 세트(set)하는 것에 관한 결정을 단계(782)에서 한다. 즉, 같은 트레인의 더 낮은 카로의 포인터가 존재하는 것에 관한 결정을 한다. 트레인 플래그를 세트(set)한다면, 카드 마크 갱신 처리는 완성된다. 대신(代身)에, 같은 트레인 플래그를 세트(set)하지 않는다면, 같은 트레인 플래그는 단계(783)에서 세트(set)된다. 일단 같은 트레인 플래그를 세트(set)한다면, 카드 마크 갱신 처리는 완성된다.
신(新)-세대 플래그를 세트(set)하지 않는다고 단계(780)에서 결정할 때, 처리의 흐름은 단계(786)로 진행되는데, 더 낮은 트레인으로의 포인터가 존재하는지를 지적하도록, 카드 마크의 더 낮은 트레인 플래그를 세트(set)하는 것에 관한 결정을 단계(786)에서 한다.
더 낮은 트레인 플래그를 세트(set)하지 않는다면, 또는 더 낮은 트레인이 존재하지 않는다고 더 낮은 트레인 플래그가 지적한다면, 처리의 흐름은 단계(786)에서 단계(788)로 진행되는데, 카드 마크의 같은 트레인 플래그를 세트(set)하는 것에 관한 결정을 단계(788)에서 한다. 달리 말하면, 단계(788)이라는 것은, 같은 트레인의 더 낮은 카드(card)로의 포인터가 존재하는 것을 카드 마크가 지적한다고 결정한다. 같은 트레인 플래그를 세트(set)한다고 결정한다면, 단계(790)에서 카드 마크와 관련이 있는 루트 어레이는 오버플로우 된다고 결정한다. 루트 어레이가 오버플로우 된다면, 단계(793)에서 루트 어레이가 오버플로우 된다고 지적하도록 카드 마크를 세트(set)한다. 대신(代身)에, 루트 어레이를 오버플로우 하지 않는다고 결정한다면, 루트 어레이에서 루트가 아직 존재하지 않는 상황에서, 단계(792)에서 루트는 루트 어레이에 삽입된다. 필요하다면, 루트를 블록 어레이에 삽입한 후(後)에, 카드 마크 갱신 처리는 완성된다.
단계(788)로 돌아와서, 같은 트레인 플래그를 세트(set)하지 않는다고 결정하면, 루트 어레이는 단계(794)에서 할당된다. 덧붙여서, 카드 마크는 할당된 루트 어레이를 가리키도록 세트(set)된다. 단계(796)에서, 루트 어레이의 할당이 성공적이었다고 결정한다. 루트 어레이의 할당이 성공적이 아니었다면, 카드 마크는 단계(782)에서 루트 어레이 오버플로우를 지적하도록 세트(set)된다. 달리 말하면, 루트 어레이의 할당이 성공적이었다면, 처리의 흐름은 단계(792)로 진행되는데, 루트 어레이에서 루트가 아직 제시되지 않았다면, 단계(792)에서 루트는 루트 어레이에 삽입된다.
도 8a 와 도 8b 등은, 본 발명의 실시예에 따라서, 도 6 의 단계(608)인 구(舊)-세대 메모리에서 이삭줍기(garbage collection)를 실행하는 것과 관련이 있는 단계를 설명한다. 단계(802)에서, 고정 루트(fixed root)를, 즉, 상기 실시예에서 구(舊)-세대 메모리로 직접적으로 가리키는 루트(root)를 따른다. 본 발명의 실시예에 따라서, 고정 루트를 따르는 것과 관련이 있는 단계는, 도 7b 내지 도 7e 등에서 기술(記述)되었다.
단계(804)에서 신(新)-세대에서 루트를 따른다. 즉, 신(新)-세대에서 구(舊)-세대를 가리키는 루트(root)의 연합(association)을 따른다. 처리의 흐름은 단계(804)에서 단계(806)로 진행되는데, 세트(set)되는 더 낮은 트레인 플래그를 가지는 다음의 엔트리(next entry)를 위치시키기 위하여, 단계(806)에서 카드 어레이 또는 카드 마크의 어레이는 검색된다. 단계(808)에서, 상기 엔트리, 예를 들면, 세트(set)되는 더 낮은 트레인 플래그를 가지는 엔트리를 찾는 결정을 한다. 상기 엔트리를 찾았다고 결정한다면, 세트(set)되는 신(新)-세대 플래그(new generation flag)나 오버플로우 되는 루트 어레이(root array) 양쪽, 또는 어느 하나를 가지는 엔트리를 찾는 것에 관한 결정을 단계(812)에서 한다. 신(新)-세대 플래그(new generation flag)가 세트(set)되거나 루트 어레이(root array)가 오버플로우 된다면, 양쪽 다 이루어진다면, 단계(814)에서 카드에 있는 모든 객체는 루트에 대하여 검색되고, 루트를 따른다. 다시, 루트를 따르는 것과 관련이 있는 단계는 도 7b 내지 도 7e 등에서 이전(以前)에 기술(記述)되었다. 루트를 따른 후(後)에, 처리는 단계(806)로 진행되는데, 세트(set)가 되는 더 낮은 트레인 플래그를 가지는 다음의 엔트리를 위치시키도록, 카드 어레이를 단계(806)에서 검색한다.
예를 들면, 단계(808)에서 찾아졌던 카드 마크와 같은 엔트리가, 세트(set)되는 신(新)-세대 플래그나 오버플로우 되는 루트 어레이 등을 가지지 않는다고 단계(812)에서 결정한다면, 처리는 단계(816)로 진행되는데, 엔트리와 관련이 있는 루트는 검색되고, 루트 어레이와 관련이 있는 루트를 따른다. 루르틀 따른 후(後)에, 세트(set)되는 더 낮은 트레인 플래그를 가지는 다음의 엔트리에 대하여 단계(806)에서 카드 어레이를 검색한다.
단계(808)로 돌아와서, 세트(set)되는 더 낮은 트레인 플래그를 가지는 엔트리를 찾는 카드 어레이를 검색하는 단계가 엔트리를 찾았다는 결과를 일으킨다면, 모든 복사된 객체를 검색할 때까지, 단계(820)에서 신(新)-세대 내(內)에서 루트를 따른다. 하나의 실시예에서, 다른 트레인에서 참조된 하나의 트레인에 있는 객체는 이러한 트레인으로 복사된다. 모든 복사된 객체를 검색하였을 때, 검색 처리 중(中)에 더 낮은 트레인을 가리키는 루트를 만났는가에 대한 결정을 단계(830)에서 한다. 가장 낮은 트레인(lowest train)으로의 루트를 만났다고 결정한다면, 전체의 가장 낮은 트레인(lowest train)은 단계(840)에서 해제된다. 달리 말하면, 가장 낮은 트레인에 의하여 수용된 구(舊)-세대 메모리는 비어 있게 된다. 가장 낮은 트레인으로의 포인터가 존재하지 않는다는 사실 때문에, 전체적으로 가장 낮은 트레인은 비어 있게 될 수 있는데, 가장 낮은 트레인은 단지 쓰레기만을 포함한다. 전체적으로 가장 낮은 트레인이 비어 있을 때, 서로를 참조하는, 그리고 같은 트레인의 서로 다른 카에 위치되는 사이클 구조를 컬렉션(collection)할 수 있다는 사실은 높이 평가할 만하다. 일단 전체적으로 가장 낮은 트레인(lowest train)이 비어 있다면, 구(舊)-세대 이삭줍기와 관련이 있는 단계는 완성된다.
가장 낮은 트레인으로의 루트를 만났다는 결정을 단계(830)에서 한다면, 세트(set)되는 같은 트레인 플래그를 가지는 카드 마크와 같은 다음의 엔트리를 찾는데, 단계(832)에서 카드 어레이를 검색한다. 단계(834)에 있어서, 세트(set)되는 같은 트레인 플래그를 갖춘 엔트리를 찾았다는 것에 관한 결정을 한다. 세트(set)되는 같은 트레인 플래그를 갖춘 엔트리를 찾지 못 하였다고 결정한다면, 모든 복사된 객체를 단계(836)에서 검색하였을 때까지, 구(舊)-세대 내(內)에서 루트를 따른다. 모든 복사된 객체를 검색하는 단계는, 하나의 실시예에서 포인터를 위한 이동하는 검색(transive search)을 포함한다. 일단 모든 복사된 객체를 검색하였다면, 가장 낮은 트레인에 있는 가장 낮은 카(lowest car)는 단계(837)에서 해제하고, 구(舊)-세대 이삭줍기 처리는 완성된다.
단계(834)로 돌아와서, 세트(set)되는 같은 트레인 플래그를 갖춘 엔트리나 카드 마크 등을 찾는다고 결정한다면, 처리는 단계(838)로 진행되는데, 엔트리(entry)가 세트(set)되는 신(新)-세대 플래그, 세트(set)되는 더 낮은 트레인 플래그, 및 오버플로우 되는 루트 어레이 등을 가지는 것에 관한 결정을 단계(838)에서 한다. 엔트리가 세트(set)되는 신(新)-세대 플래그의 어느 하나나 모두를 가진다면, 단계(850)에서 카드(card)에 있는 모든 객체는 루트에 대하여 검색되고, 루트를 따른다. 일단 루트를 따른다면, 처리는 단계(832)로 진행되는데, 세트(set)되는 같은 트레인 플래그를 가지는 다음의 엔트리를 찾기 위하여, 카드 어레이는 다시 한 번만 단계(832)에서 검색된다.
단계(834)에서 찾은 엔트리가 세트(set)되는 신(新)-세대 플래그, 세트(set)되는 더 낮은 트레인, 및 오버플로우 되는 루트 어레이 등을 포함하지 않는다고 단계(838)에서 결정된다면, 엔트리와 관련이 있는 루트 어레이는 단계(856)에서 검색되고, 루트 어레이에 있는 루트를 따른다. 루트를 따른 후(後)에 처리는 단계(832)로 진행되는데, 세트(set)되는 같은 트레인 플래그를 가지는 다음의 엔트리를 찾기 위하여, 카드 어레이는 다시 한 번만 단계(832)에서 검색된다.
본 발명에 따라서, 세대(世代) 사이의 이삭줍기를 이용하는 컴퓨터 프로그램은 서로 다른 다양한 컴퓨터 시스템에서 구현될 수 있다는 사실은, 높이 평가하여야만 한다. 도 9 는, 본 발명을 구현하는데 적합한 일반적인 목적의 컴퓨터 시스템을 설명한다. 컴퓨터 시스템(930)은 메모리 장치에 연결된 (중앙 처리 장치 또는 CPU 로써 불리는) 어떤 수(數)의 프로세서(932)를 포함하는데, (일반적으로 ROM 이라 할 수 있는) 제 1 의 스토리지 장치(934)(first storage device), 그리고 (일반적으로 RAM 이라 할 수 있는) 제 1 스토리지 장치(936) 등을 메모리 장치는 포함한다. 공지된 기술(技術)에서와 같이, ROM 은 단(單) 방향으로 CPU(932)에 데이터와 명령어를 이동시키는데 이용되면서, RAM 은 양(兩) 방향으로 데이터와 명령어를 이동시키는데 이용된다. 제 1 스토리지 장치(934, 936)는 어떤 컴퓨터에 의하여 판독 가능한 매체를 포함한다. 매스 메모리 장치로써 이용되는 제 2 스토리지 장치(938)는 양(兩) 방향으로 CPU(932)에 또한 연결되고, 추가의 데이터 저장 용량을 공급한다. 매스 메모리 장치(938)(mass memory device)는 컴퓨터 코드, 데이터, 및 그 밖의 것 등을 포함하는 프로그램을 저장하는데 이용될 수 있는 컴퓨터에 의하여 판독 가능한 매체이고, 제 1 스토리지 장치(934, 936)보다는 일반적으로 더 느린 하드디스크나 테이프 등과 같은 스토리지 매체(storage media)가 된다. 매스 메모리 스토리지 장치(938)는 자기나 종이 테이프, 또는 다른 공지된 장치의 형(型)으로 될 수 있다. 적합한 경우에 있어서, 매스 메모리 장치(938) 내(內)에 유지되는 정보는 가상 메모리로써 RAM(936)의 부분으로써 표준 형(型)으로써 합체(合體)되어 있다는 사실은, 높이 평가할 만하다. CD-ROM 과 같은 특별한 제 1 스토리지 장치(934)는 CPU 로 단(單) 방향으로 데이터를 보낸다.
CPU(932)는 하나 이상의 입력/출력 장치(940)에 또한 결합되는데 ; 비디오 모니터, 트랙 볼, 마우스, 키보드, 마이크로폰, 접촉에 의한 디스플레이, 트랜스듀서 카드 리더, 자기나 종이 테이프 리도, 타블릿, 스타일러스, 음성이나 손으로 쓸 수 있는 인식기, 또는 다른 공지된 입력 장치 등을 입력/출력 장치(940)는 포함한다. 마지막으로, CPU(932)는 선택적으로 컴퓨터나 (912)에 의하여 나타난 것과 같은 네트워크 연결을 이용하면서, 인터넷(Internet)이나 인트라넷 네트워크 등과 같은 원격 통신 네트워크 등에 결합할 수 있다. 이러한 네트워크 연결에 있어서, CPU(932)는 네트워크에서 정보를 받을 수 있고, 상기에서 기술(記述)된 방법 단계를 실행하는 과정에서 네트워크로 정보를 출력할 수 있다. CPU(932)를 이용하여 실행되는 명령의 순서로써 때때로 요구되는 상기 정보는, 반송파(搬送波)에서 실시(實施)되는 컴퓨터 데이터 신호의 형(型)으로 네트워크에서 수신될 수 있고, 네트워크로 출력된다. 상기(上記)에서 기술(記述)된 장치와 물질 등은 컴퓨터 하드웨어와 소프트웨어 기술(技術)에서 종사하는 업자에게는 친숙하다.
본 발명의 적은 실시예만을 기술(記述)하였지만, 본 발명의 사상(思想)과 범위에서 벗어나지 않으면서 많은 다른 특별한 형(型)에서 본 발명은 실시(實施)될 수 있다는 사실은 이해할 것이다. 실례(實例)에 의하여, 신(新)-세대 이삭줍기와 구(舊)-세대 이삭줍기 등에 포함된 단계는 다시 순서를 정(定)할 것이다. 단계는 또한 본 발명의 사상(思想)과 범위에서 벗어나지 않으면서 제거될 수 있고, 추가될 수 있다.
메모리의 신(新)-세대와 구(舊)-세대 등에서 실행되는 것처럼, 세대(世代)에 의한 이삭줍기(generational garbage collection)는 기술(記述)되었지만, 세대(世代)에 의한 이삭줍기(generational garbage collection)는 메모리의 많은 세대(世代)에서 실행될 수 있다. 즉, 본 발명의 세대(世代)에 의한 이삭줍기(generational garbage collection) 방법은, 예를 들면, 신(新)-세대, 중간(中間)-세대, 및 구(舊)-세대 등과 같은 다수의 세대(世代)로 나누어지는 메모리에서 실행될 수 있는데, 각각의 세대(世代) 내(內)에서 객체의 존속기간에 의하여 분리된다. 다수의 세대(世代)가 있게 되는 실시예(實施例)에 대하여, 세대(世代) 사이의 포인터는 일반적으로 어떤 두 개의 세대(世代) 사이에서 지적될 수 있다는 사실은, 이해해야만 한다.
27-비트 포인터, 예약이 된 비트(reserved bit), 같은 트레인 플래그(same train flag), 더 낮은 트레인 플래그(lower train flag), 신(新)-세대 플래그, 및 덜티 플래그(dirty flag) 등을 포함하는 32-비트로써, 카드 마크(card mark)는 기술(記述)되었다. 하지만, 카드 마크는 본 발명의 사상(思想)과 범위에서 벗어나지 않으면서 다양해질 수 있다는 사실은, 높이 평가할 만하다. 예를 들면, 적어도 부분적으로 주어진 시스템의 특별한 요구 사항에 의존하면서, 카드 마크는 32 비트보다 적거나, 그 이상 등으로 카드 마크(card mark)는 이루어질 수 있다. 대신(代身)에, 또한, 카드 마크 내(內)에 있는 비트는 넓은 범위에서 다양해질 수 있다. 실례(實例)에 의하여, 하나의 실시예(實施例)에 있어서, 카드 마크 내(內)에 있는 32-비트는 26-비트의 포인터, 두 개의 "상태 표시기(status indicator)", 또는 태그 비트(tag bit)를 포함할 수 있다. 상태 표시기 비트에 대한 서로 다른 결합 값이 카드 마크가 덜티(dirty), 소거(clean) 등을 지적하도록, 신(新)-세대 포인터를 포함하도록, 또는 신(新)-세대 포인터를 포함하지 않도록, 상태 표시기(status indicator)는 배열될 수 있다. 더 낮은 트레인(lower train)으로의 어떤 포인터가 존재하는지를 지적하는 더 낮은 트레인 플래그(lower train flag), 주어진 트레인에 있는 더 낮은 카(lower car)를 주어진 트레인 내(內)에서 가리키는 어떤 포인터가 존재하는지를 지적하는 같은 트레인 플래그(same train flag), 더 낮은 트레인 오버플로우 플래그(lower train overflow flag), 그리고 같은 트레인 오버플로우 플래그(same train overflow flag) 등을, 카드 마크(card mark)는 또한 포함할 수 있다.
덧붙여서, 상기(上記)에서 기술(記述)된 것처럼, 카드 마크 내(內)에 있는 가장 낮은 비트(lowest bit)는, 예를 들면, 카드 마크는 덜티(dirty)하다고 지적하는데 이용되는 플래그(flag)로써 기술(記述)되었지만, 카드 마크 내(內)에 있는 플래그는 카드 마크 내(內)의 어떤 적합한 위치에서 위치될 수 있다는 사실은, 높이 평가할 만하다. 플래그를 대표하는 비트는 카드 마크 내(內)의 최상위 비트(highest bit)가 될 수 있다. 대신(代身)에, 비트는 카드 마크를 통하여 이곳 저곳에 위치될 수 있다.
구(舊)-세대 메모리에서 카(car)의 크기는 고정되는 것처럼 기술(記述)되었지만, 하나의 실시예에서 카(car)의 크기는 동적(動的)으로 할당된다는 사실은 높이 평가해야만 한다. 즉, 카(car)의 크기는 카(car) 내(內)에서 위치될 수 있는 객체의 특별한 요구사항에 바탕을 두어서 결정될 수 있다. 실례(實例)에 의하여, 본 발명의 사상(思想)이나 범위에서 벗어나지 않으면서 카(car) 내(內)에서 객체를 생성시키는 포인터의 수(數)를 최소화할 목적으로, 카(car)의 크기는 이삭줍기 처리 중(中)에 할당될 수 있다.
이삭줍기의 종래의 방법은 구(舊)-세대 메모리 내(內)에서 때때로 구현될 수 있다는 것은, 높이 평가해야만 한다. 실례(實例)에 의하여, 어떤 경우에 있어서, 구(舊)-세대 메모리는 채워져 있다는 것이 가능할 수 있다. 구(舊)-세대 메모리가 채워질 때, 카(car)에서 구(舊)-세대 이삭줍기를 실행하는 것은, 즉각적인 이용을 위한 메모리의 충분한 양을 충분하게 확보하지 못 할 수 있다. 이와 같이, 마크 청소 컬렉션 처리(mark sweep collection process)와 같은 종래의 이삭줍기 처리는, 본 발명의 사상(思想)이나 범위에서 벗어나지 않으면서 구(舊)-세대 메모리가 채워지는 상황에서 가능하다면 구(舊)-세대 메모리만큼 자유롭게 구현될 수 있다. 그러므로, 본 실례(實例)는 설명으로써 고려될 수 있고, 제한이 없고, 본 발명은 여기에서 주어진 상세한 설명에 제한되지 않지만, 부속되는 청구항의 범위 내(內)에서 그에 일치하게 변경될 수 있다.

Claims (25)

  1. 메모리(memory)는 제 1 메모리 섹션(first memory section)과, 다수의 블록(block)으로 나누어지는 제 2 메모리 섹션(second memory section) 등을 포함하고, 제 2 메모리 섹션(second memory section)에 있는 블록(block) 각각은 그와 관련이 있는 마커(marker)를 가지는데 ; 컴퓨터 시스템과 관련이 있는 메모리를 동적(動的)으로 관리하는 컴퓨터로 구현된 방법(computer-implemented method)에 있어서,
    제 1 메모리 섹션에서 제 1 이삭줍기(first garbage collection)를 실행하는 단계 ;
    제 2 메모리 섹션의 하나의 선택 블록에서 제 2 이삭줍기(second garbage collection)를 실행하는 단계 ;
    제 2 메모리 섹션의 선택 블록에서 제 3 이삭줍기(third garbage collection)를 실행하는 단계 - 적어도 부분적으로 선택 블록과 관련이 있는 마커(marker)에 의하여 지적되는 상태(status)에 바탕을 두는 선택 블록에 포함되어 있지 않은 제 2 객체를 참조하는 제 1 객체를 선택 블록이 포함하는지를 결정하는 것을 제 3 이삭줍기(third garbage collection)는 포함하고, 제 2 객체에 대한 참조는 제 2 이삭줍기를 실행한 후(後)에 저장되는지에 대한 지적을 상태(status)는 포함하고 - ; 그리고
    제 2 이삭줍기를 실행한 후(後)에 제 2 객체에 대한 참조를 저장할 때, 선택 마커를 이용하여 새로운 루트 어레이(new root array)를 만드는 단계 ; 등을 포함하는 것을 특징으로 하는, 컴퓨터 시스템과 관련이 있는 메모리를 동적(動的)으로 관리하는 컴퓨터로 구현된 방법(computer-implemented method).
  2. 제 1 항에 있어서, 선택 블록에 포함되지 않은 제 2 객체를 제 1 객체가 참조하지 않는다고 결정할 때, 선택 블록을 해제하는 단계를 덧붙여서 포함하는 것을 특징으로 하는, 컴퓨터 시스템과 관련이 있는 메모리를 동적(動的)으로 관리하는 컴퓨터로 구현된 방법(computer-implemented method).
  3. 상기 어느 하나의 항에 있어서, 선택 블록(selected block)이 제 2 객체를 참조하는 제 1 객체를 포함한다고 결정할 때, 제 3 이삭줍기를 실행하는 단계는 :
    선택 블록 마커(selected block marker)를 이용하여 제 1 메모리 섹션에서 제 2 객체를 결정하는 단계 ; 그리고
    제 2 객체가 제 1 메모리 섹션에 있다고 결정할 때, 선택 블록 마커(selected block marker)와 관련이 있는 루트 어레이(root array)가 제 2 객체로의 포인터를 포함하는 것을 확실하게 하도록, 선택 블록 마커(selected block marker)와 관련이 있는 루트 어레이(root array)는 갱신되는 단계 ; 등을 포함하는 것을 특징으로 하는, 컴퓨터 시스템과 관련이 있는 메모리를 동적(動的)으로 관리하는 컴퓨터로 구현된 방법(computer-implemented method).
  4. 제 1 항과 제 2 항 등에서 어느 하나의 항에 있어서, 선택 블록이 제 2 객체를 참조하는 제 1 객체를 포함한다고 결정할 때, 제 3 이삭줍기를 실행하는 단계는 :
    선택 블록 마커를 이용하여 제 2 객체가 제 2 메모리 섹션에 있다고 결정하는 단계 ; 그리고
    제 2 객체가 제 2 메모리 섹션에 있다고 결정할 때, 다른 객체에 대한 참조를 확인하도록, 선택 블록 마커와 관련이 있는 루트 어레이는 검색되는 단계 ; 등을 포함하는 것을 특징으로 하는, 컴퓨터 시스템과 관련이 있는 메모리를 동적(動的)으로 관리하는 컴퓨터로 구현된 방법(computer-implemented method).
  5. 제 4 항에 있어서, 다른 객체에 대한 참조를 따르는 단계를 덧붙여서 포함하는 것을 특징으로 하는, 컴퓨터 시스템과 관련이 있는 메모리를 동적(動的)으로 관리하는 컴퓨터로 구현된 방법(computer-implemented method).
  6. 제 1 항과 제 2 항 등에서 어느 하나의 항에 있어서, 다수의 블록은 다수의 트레인으로써 배열되고, 선택 블록은 다수의 트레인 중(中)에서 제 1 트레인에 포함되는데, 제 3 이삭줍기를 실행하는 단계는 :
    적어도 부분적으로 블록과 관련이 있는 마커에 의하여 지적되는 상태(status)에 바탕을 두는 다수의 트레인 중(中)에서 제 2 트레인에, 제 2 객체가 있다고 결정하는 단계를 덧붙여서 포함하는 것을 특징으로 하는, 컴퓨터 시스템과 관련이 있는 메모리를 동적(動的)으로 관리하는 컴퓨터로 구현된 방법(computer-implemented method).
  7. 제 6 항에 있어서, 제 2 객체가 다수의 트레인에서 제 2 트레인에 있지 않다고 결정할 때, 제 2 트레인을 해제하는 단계를 덧붙여서 포함하는 것을 특징으로 하는, 컴퓨터 시스템과 관련이 있는 메모리를 동적(動的)으로 관리하는 컴퓨터로 구현된 방법(computer-implemented method).
  8. 제 1 항과 제 2 항 등에서 어느 하나의 항에 있어서, 다수의 블록(block)은 다수의 카(car)로써 배열되고, 다수의 카는 다수의 트레인으로써 덧붙여서 배열되고, 선택 블록은 다수의 트레인에서 선택 트레인을 형성하는 다수의 카에서 제 1 카에 포함되는데 ; 제 3 이삭줍기를 실행하는 단계는 :
    적어도 부분적으로 블록과 관련이 있는 마커에 의하여 지적되는 상태(status)에 바탕을 두는 선택 트레인을 형성하는 다수의 카 중(中)에서 제 2 카에, 제 2 객체가 있다고 결정하는 단계를 덧붙여서 포함하는 것을 특징으로 하는, 컴퓨터 시스템과 관련이 있는 메모리를 동적(動的)으로 관리하는 컴퓨터로 구현된 방법(computer- implemented method).
  9. 제 8 항에 있어서, 제 2 객체가 선택 트레인의 제 2 카에 있지 않다고 결정할 때, 제 2 카를 해제하는 단계를 덧붙여서 포함하는 것을 특징으로 하는, 컴퓨터 시스템과 관련이 있는 메모리를 동적(動的)으로 관리하는 컴퓨터로 구현된 방법(computer-implemented method).
  10. 메모리(memory)는 다수의 블록(block)으로 나누어지고, 블록(block) 각각은 그와 관련이 있는 마커(marker)를 가지는데 ; 컴퓨터 시스템과 관련이 있는 메모리를 동적(動的)으로 관리하는 컴퓨터로 구현된 방법(computer-implemented method)에 있어서,
    블록 중(中)에서 하나의 선택 블록에서 제 1 이삭줍기를 실행하는 단계 ;
    선택 블록에서 제 2 이삭줍기를 실행하는 단계 - 적어도 부분적으로 선택 블록과 관련이 있는 마커(marker)에 의하여 지적되는 상태(status)에 바탕을 두는 선택 블록에 포함되어 있지 않은 제 2 객체를 참조하는 제 1 객체를 선택 블록이 포함하는지를 결정하는 것을 제 2 이삭줍기(second garbage collection)는 포함하고, 제 2 객체에 대한 참조는 제 1 이삭줍기를 실행한 후(後)에 저장되는지에 대한 지적을 포함하는 마커(marker)에 의하여 지적되는 상태(status)는 실행되고 - ; 그리고
    제 1 이삭줍기를 실행한 후(後)에 제 2 객체에 대한 참조를 저장할 때, 선택 블록을 이용하여 새로운 루트 어레이(new root array)를 만드는 단계 ; 등을 포함하는 것을 특징으로 하는, 컴퓨터 시스템과 관련이 있는 메모리를 동적(動的)으로 관리하는 컴퓨터로 구현된 방법(computer-implemented method).
  11. 제 10 항에 있어서, 선택 블록에 포함되어 있지 않은 제 2 객체를 제 1 객체가 참조하지 않는다고 결정할 때, 선택 블록을 해제하는 단계를 덧붙여서 포함하는 것을 특징으로 하는, 컴퓨터 시스템과 관련이 있는 메모리를 동적(動的)으로 관리하는 컴퓨터로 구현된 방법(computer-implemented method).
  12. 제 10 항과 제 11 항 등에서 어느 하나의 항에 있어서, 다수의 블록은 다수의 트레인으로써 배열되고, 선택 블록은 다수의 트레인 중(中)에서 제 1 트레인에 포함되는데, 이삭줍기를 실행하는 단계는 :
    적어도 부분적으로 블록과 관련이 있는 마커에 의하여 지적되는 상태(status)에 바탕을 두는 다수의 트레인 중(中)에서 제 2 트레인에, 제 2 객체가 있다고 결정하는 단계 ; 그리고
    제 2 객체가 다수의 트레인 중(中)에서 제 2 트레인에 있지 않다고 결정할 때, 제 2 트레인을 해제하는 단계 ; 등을 덧붙여서 포함하는 것을 특징으로 하는, 컴퓨터 시스템과 관련이 있는 메모리를 동적(動的)으로 관리하는 컴퓨터로 구현된 방법(computer-implemented method).
  13. 제 10 항에 있어서, 추가의 메모리 섹션을 덧붙여서 포함하는데, 제 2 객체가 선택 블록에 포함되지 않는다고 결정할 때, 선택 블록에서 이삭줍기를 실행하는 단계는, 적어도 부분적으로 선택 블록과 관련이 있는 마커에 의하여 지적되는 상태(status)에 바탕을 두는 추가의 메모리 섹션에, 제 2 객체가 포함되는지를 결정하는 단계를 덧붙여서 포함하는 것을 특징으로 하는, 컴퓨터 시스템과 관련이 있는 메모리를 동적(動的)으로 관리하는 컴퓨터로 구현된 방법(computer-implemented method).
  14. 컴퓨터 메모리는 제 1 섹션, 제 2 섹션, 및 제 2 섹션의 요소와 관련이 있는 워드의 어레이 등을 포함하고, 워드와 관련이 있는 요소의 내용이 제 1 섹션의 객체를 참조하는지를 지적하도록 워드(word)는 배열되는데 ; 컴퓨터 시스템에 있는 선택 객체(selected object)를 할당하는, 컴퓨터로 구현된 방법(computer- implemented method)에 있어서,
    제 1 섹션이 선택 객체를 할당하는데 적합한지를 결정하는 단계 ;
    제 1 섹션이 객체를 할당하는데 적합한지를 결정할 때, 선택 객체를 할당하는 단계 ; 그리고
    제 1 섹션이 선택 객체를 할당하는데 적합하지 않다고 결정할 때, 제 1 섹션에서 이삭줍기를 실행하는 단계 - 제 2 섹션의 선택 워드와 관련이 있는 요소는 제 1 섹션의 특별한 객체를 참조한다고 지적하는 선택 워드를 위치시키도록, 이삭줍기를 실행하는 단계는 워드의 어레이를 검색하는 단계를 포함하고, 제 1 섹션에 있는 특별한 객체는 이삭줍기 중(中)에 계속 유지되고 - ; 등을 포함하는 것을 특징으로 하는, 컴퓨터 시스템에 있는 선택 객체(selected object)를 할당하는 컴퓨터로 구현된 방법(computer-implemented method).
  15. 제 14 항에 있어서, 제 2 섹션의 선택 마커와 관련이 있는 요소는 특별한 객체를 참조한다고 지적하는 선택 마커를 위치시킬 때, 제 1 섹션에서 이삭줍기를 실행하는 단계는 :
    컴퓨터 메모리 내(內)에서 새로운 위치로 루트를 갱신하는 단계와 선택 워드를 갱신하는 단계 등을 포함하는, 제 2 섹션의 요소 내(內)에서 루트(root)의 연합(association)을 따르는 단계를 포함하는 것을 특징으로 하는, 컴퓨터 시스템에 있는 선택 객체(selected object)를 할당하는 컴퓨터로 구현된 방법(computer-implemented method).
  16. 제 15 항에 있어서, 선택 워드를 갱신하는 단계는 :
    루트 중(中)에서 선택 루트는 제 2 섹션의 어디에 있고, 루트 중(中)에서 선택 루트는 제 1 섹션의 특별한 객체 중(中)에서 선택 객체를 참조한다고 결정하는 단계 ; 그리고
    선택 루트는 제 2 섹션에 있고, 선택 루트는 제 1 섹션의 특별한 선택 객체를 참조한다고 결정할 때, 선택 루트는 제 2 섹션에 있고, 특별한 선택 객체는 제 1 섹션에 있다는 것을 지적하도록, 선택 워드를 갱신하는 단계 ; 등을 포함하는 것을 특징으로 하는, 컴퓨터 시스템에 있는 선택 객체(selected object)를 할당하는 컴퓨터로 구현된 방법(computer-implemented method).
  17. 제 14 항에 있어서, 제 2 섹션에서 이삭줍기를 실행하는 단계를 포함하는데, 이삭줍기를 실행하는 단계는 요소 중(中)에서 선택 요소와 관련이 있는 루트(root)의 연합(association)을 따르는 단계를 포함하고, 루트는 신(新)-세대와 관련이 있고, 이것에 의하여 루트(root)의 연합(association)을 따르는 단계는 워드의 어레이에서 워드의 몇몇을 갱신하는 단계를 포함하는 것을 특징으로 하는, 컴퓨터 시스템에 있는 선택 객체(selected object)를 할당하는 컴퓨터로 구현된 방법(computer-implemented method).
  18. 제 1 메모리 섹션과 다수의 요소로써 배열된 제 2 메모리 섹션 등을 포함하고, 다수의 요소에서 선택되는 제 1 요소와 관련이 있는, 컴퓨터 시스템에서 이용을 위한 마커(marker)에 있어서,
    제 1 선택 요소는 제 1 메모리 섹션 내(內)에서 포함되는 객체를 참조하는지를 확인하도록, 배열되는 제 1 표시기(indicator)를 포함하는 것을 특징으로 하는, 컴퓨터 시스템에서 이용을 위한 마커(marker).
  19. 제 18 항에 있어서, 객체로의 참조를 덧붙여서 포함하고, 객체로의 참조는 객체를 위한 주소를 포함하는 어레이로의 포인터인 것을 특징으로 하는, 컴퓨터 시스템에서 이용을 위한 마커(marker).
  20. 제 1 메모리 섹션과, 다수의 블록으로 분할되는 제 2 메모리 섹션 등을 포함하는 메모리(memory) ;
    제 2 메모리 섹션에서 관련이 있는 블록에 각각 대응하는 마커(marker)의 어레이(array) - 마커와 관련이 있는 블록은 마커와 관련이 있는 블록의 바깥쪽에서 객체를 어디서 참조하는지를 지적하도록 마커(marker)는 구성되고 - ;
    객체의 주소를 수용하도록 배열되는 루트 어레이(root array)의 세트(set) - 마커의 어레이에서 선택 마커는 루트 어레이의 세트와 관련이 있고 - ;
    제 1 메모리 섹션 내(內)에서 공간을 교정(矯正)하는 제 1 쓰레기 컬렉터(first garbage collector) ; 그리고
    마커의 어레이에서 마커의 상태(status)에 적어도 부분적으로 바탕을 두는 제 2 메모리 섹션 내(內)에서 공간을 교정(矯正)하는 제 2 쓰레기 컬렉터(second garbage collector) ; 등을 포함하는 것을 특징으로 하는, 컴퓨터 시스템(computer system).
  21. 제 20 항에 있어서, 마커의 어레이에서 선택된 제 1 마커는, 제 1 마커의 관련이 있는 블록이 제 1 메모리 섹션에서 제 1 객체를 어디서 참조하는지를 확인하는 섹션 표시기(section indicator)를 포함하는 것을 특징으로 하는, 컴퓨터 시스템(computer system).
  22. 제 20 항과 제 21 항 등의 어느 하나의 항에 있어서, 다수의 블록은 다수의 카(car)로써 배열되고, 다수의 카(car)는 다수의 트레인(train)으로써 덧붙여서 배열되는 것을 특징으로 하는, 컴퓨터 시스템(computer system).
  23. 다수의 블록으로 분할되는 메모리 ;
    메모리에서 관련이 있는 블록에 각각 대응하는 마커(marker)의 어레이(array) - 마커와 관련이 있는 블록은 마커와 관련이 있는 블록의 바깥쪽에서 객체를 어디서 참조하는지를 지적하도록 마커(marker)는 구성되고 - ;
    객체의 주소를 수용하도록 배열되는 루트 어레이(root array)의 세트(set) - 마커의 어레이에서 선택 마커는 루트 어레이의 세트와 관련이 있고 - ; 그리고
    마커의 어레이에서 마커의 상태(status)에 적어도 부분적으로 바탕을 두는 메모리 내(內)에서 공간을 교정(矯正)하는 쓰레기 컬렉터(second garbage collector) ; 등을 포함하는 것을 특징으로 하는, 컴퓨터 시스템(computer system).
  24. 컴퓨터의 제 1 메모리 섹션에서 제 1 이삭줍기(first garbage collection)를 실행하는 컴퓨터 코드(computer code) ;
    다수의 블록으로 나누어지는, 컴퓨터의 제 2 메모리 섹션에서 제 2 이삭줍기(second garbage collection)를 실행하는 컴퓨터 코드(computer code) - 적어도 부분적으로 선택 블록과 관련이 있는 마커에 의하여 지적되는 상태(status)에 바탕을 두는 선택 블록에 포함되지 않은 제 2 객체를 참조하는 제 1 객체를, 다수의 블록에서 선택되는 블록이 포함하는지를 결정하는 것을 제 2 이삭줍기는 포함하고 - ; 그리고
    컴퓨터 코드를 저장하는 컴퓨터에 의하여 판독 가능한 매체(computer readable medium) ; 등을 포함하는 것을 특징으로 하는, 컴퓨터 시스템과 관련이 있는 메모리를 동적(動的)으로 관리하는 컴퓨터 프로그램 프로덕트(computer program product).
  25. 컴퓨터의 제 1 메모리 섹션에서 제 1 이삭줍기(first garbage collection)를 실행하는 컴퓨터 코드(computer code) ;
    다수의 블록으로 나누어지는, 컴퓨터의 제 2 메모리 섹션에서 제 2 이삭줍기(second garbage collection)를 실행하는 컴퓨터 코드(computer code) - 적어도 부분적으로 선택 블록과 관련이 있는 마커에 의하여 지적되는 상태(status)에 바탕을 두는 선택 블록에 포함되지 않은 제 2 객체를 참조하는 제 1 객체를, 다수의 블록에서 선택되는 블록이 포함하는지를 결정하는 것을 제 2 이삭줍기는 포함하고 - ; 그리고
    컴퓨터 코드를 대표하는 반송파(搬送波)에서 실시(實施)되는 컴퓨터 데이터 신호(computer data signal) ; 등을 포함하는,컴퓨터 시스템의 프로세서가 컴퓨터 시스템과 관련이 있는 메모리를 동적(動的)으로 관리하게 하는, 컴퓨터 프로그램 프로덕트(computer program product).
KR1019990007412A 1998-03-06 1999-03-06 컴퓨터 메모리의 세대별 동적 관리 방법 및 장치 KR100567082B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US7706998P 1998-03-06 1998-03-06
US60/077,069 1998-03-06

Publications (2)

Publication Number Publication Date
KR19990077655A true KR19990077655A (ko) 1999-10-25
KR100567082B1 KR100567082B1 (ko) 2006-03-31

Family

ID=22135895

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019990007412A KR100567082B1 (ko) 1998-03-06 1999-03-06 컴퓨터 메모리의 세대별 동적 관리 방법 및 장치

Country Status (6)

Country Link
US (1) US6308185B1 (ko)
EP (1) EP0940755B1 (ko)
JP (1) JP2000047931A (ko)
KR (1) KR100567082B1 (ko)
CN (1) CN100343821C (ko)
DE (1) DE69932874T2 (ko)

Families Citing this family (75)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB9906629D0 (en) * 1999-03-23 1999-05-19 Koninkl Philips Electronics Nv Memory reclamation method
US6185581B1 (en) * 1999-08-19 2001-02-06 Sun Microsystems, Inc. Train-algorithm-based garbage collector employing fixed-size remembered sets
US6449626B1 (en) 1999-08-19 2002-09-10 Sun Microsystems, Inc. Reduced-cost remembered-set processing in a train-algorithm-based garbage collector
US6434576B1 (en) 1999-08-19 2002-08-13 Sun Microsystems, Inc. Popular-object handling in a train-algorithm-based garbage collector
US6424977B1 (en) * 1999-08-19 2002-07-23 Sun Microsystems, Inc. Train-algorithm-based garbage collector employing reduced oversized-object threshold
US6434577B1 (en) 1999-08-19 2002-08-13 Sun Microsystems, Inc. Scalable-remembered-set garbage collection
US7096238B2 (en) 1999-08-19 2006-08-22 Sun Microsystems, Inc. Dynamic feedback for determining collection-set size
US6415302B1 (en) 1999-08-19 2002-07-02 Sun Microsystems, Inc. Train-algorithm-based garbage collector employing farthest-forward-car indicator
US6681306B1 (en) * 1999-11-29 2004-01-20 Sun Microsystems, Inc. Method and apparatus for increasing scavenging garbage collection effectiveness
US6393440B1 (en) * 1999-12-13 2002-05-21 International Business Machines Corporation Data structure for keeping track of objects remaining to be traced by concurrent garbage collector
US6529919B1 (en) * 2000-02-15 2003-03-04 Sun Microsystems, Inc. Incremental class unloading in a train-algorithm-based garbage collector
WO2002023345A1 (en) 2000-09-13 2002-03-21 Geodesic Systems, Incorporated Conservative garbage collectors that can be used with general memory allocators
GB0027045D0 (en) * 2000-11-06 2000-12-20 Ibm Computer system with heap reset
US7216136B2 (en) * 2000-12-11 2007-05-08 International Business Machines Corporation Concurrent collection of cyclic garbage in reference counting systems
US6567905B2 (en) * 2001-01-23 2003-05-20 Gemstone Systems, Inc. Generational garbage collector with persistent object cache
JP3939975B2 (ja) * 2001-12-14 2007-07-04 松下電器産業株式会社 ガベージコレクション装置、ガベージコレクション方法及びガベージコレクションプログラム
US6928460B2 (en) * 2002-07-01 2005-08-09 Sun Microsystems, Inc. Method and apparatus for performing generational garbage collection in a segmented heap
US6999980B2 (en) * 2002-08-23 2006-02-14 Sun Microsystems, Inc. Eliminating write barriers for young objects
US6999979B2 (en) * 2002-11-05 2006-02-14 Sun Microsystems, Inc. Efficient encoding of references into a collection set
US7035884B2 (en) * 2002-11-05 2006-04-25 Sun Microsystems, Inc. Placement of allocation trains in the train algorithm
US7539713B2 (en) 2002-11-05 2009-05-26 Sun Microsystems, Inc. Allocation of likely popular objects in the train algorithm
US7188129B2 (en) * 2002-11-15 2007-03-06 Sun Microsystems, Inc. Merging trains in a collector based on the train algorithm
US7209935B2 (en) 2002-11-27 2007-04-24 Sun Microsystems, Inc. Avoiding remembered-set maintenance overhead for memory segments known to be in a collection set
US7039664B2 (en) * 2002-12-04 2006-05-02 Sun Microsystems, Inc. Combining entries in a card object table
US7136887B2 (en) * 2002-12-04 2006-11-14 Sun Microsystems, Inc. Method and mechanism for finding references in a card in time linear in the size of the card in a garbage-collected heap
US7143124B2 (en) 2002-12-06 2006-11-28 Sun Microsystems, Inc. Detection of dead regions during incremental collection
US7069280B2 (en) 2002-12-06 2006-06-27 Sun Microsystems, Inc. Collection-tick mechanism for a collector based on the train algorithm
US7085790B2 (en) * 2002-12-06 2006-08-01 Sun Microsystems, Inc. Advancing cars in trains managed by a collector based on the train algorithm
US7024437B2 (en) * 2002-12-06 2006-04-04 Sun Microsystems, Inc. Better placement of objects reachable from special objects during collection based on the train algorithm
US7031990B2 (en) 2002-12-06 2006-04-18 Sun Microsystems, Inc. Combining external and intragenerational reference-processing in a garbage collector based on the train algorithm
US7058670B2 (en) * 2002-12-20 2006-06-06 Sun Microsystems, Inc. Scalable, space-efficient, parallel remembered-sets
US7069281B2 (en) 2003-02-24 2006-06-27 Sun Microsystems, Inc. Efficient collocation of evacuated objects in a copying garbage collector using variably filled local allocation buffers
US7146390B2 (en) 2003-02-24 2006-12-05 Sun Microsystems, Inc. Staging the processing of remembered-set entries as part of collection based on the train algorithm
US7096329B2 (en) * 2003-02-27 2006-08-22 Sun Microsystems, Inc. Better placement of objects promoted into a generation managed by the train algorithm
US7062519B2 (en) * 2003-02-27 2006-06-13 Sun Microsystems, Inc. Incremental scanning of enormous objects to improve scheduling and pause-time behavior of garbage collection
US7225439B2 (en) * 2003-03-21 2007-05-29 Sun Microsystems, Inc. Combining write-barriers within an inner loop with fixed step
US20040186863A1 (en) * 2003-03-21 2004-09-23 Garthwaite Alexander T. Elision of write barriers for stores whose values are in close proximity
GB2399897B (en) 2003-03-26 2006-02-01 Advanced Risc Mach Ltd Memory recycling in computer systems
US7089272B1 (en) 2003-06-18 2006-08-08 Sun Microsystems, Inc. Specializing write-barriers for objects in a garbage collected heap
US8108628B2 (en) * 2003-08-04 2012-01-31 Azul Systems, Inc. Processor instruction used to perform a matrix test to generate a memory-related trap
US7149762B1 (en) 2003-08-20 2006-12-12 Sun Microsystems, Inc. Handling futile collections in the train algorithm through selective extension of the collection set
US7019998B2 (en) * 2003-09-09 2006-03-28 Silicon Storage Technology, Inc. Unified multilevel cell memory
US7404182B1 (en) 2003-10-03 2008-07-22 Sun Microsystems, Inc. Deferring and combining write barriers for a garbage-collected heap
US7412580B1 (en) 2003-10-06 2008-08-12 Sun Microsystems, Inc. Concurrent incremental garbage collector with a card table summarizing modified reference locations
US7114045B1 (en) * 2003-12-23 2006-09-26 Sun Microsystems, Inc. Garbage collection with a dynamic window
US7792880B2 (en) * 2004-01-05 2010-09-07 International Business Machines Corporation Method and apparatus for efficient implementation of discontiguous objects
US7340494B1 (en) 2004-03-12 2008-03-04 Sun Microsystems, Inc. Garbage-first garbage collection
US7428560B1 (en) * 2004-03-12 2008-09-23 Sun Microsystems, Inc. Age segregation for garbage collector
US8131955B2 (en) * 2004-04-15 2012-03-06 Microsoft Corporation Ephemeral garbage collection using a tracking mechanism on a card table to determine marked bundles
US7620943B1 (en) 2004-06-30 2009-11-17 Sun Microsystems, Inc. Using class properties to segregate objects in a generation managed by the train algorithm
US7676801B1 (en) 2004-08-31 2010-03-09 Sun Microsystems, Inc. Scanning of evacuated objects in a generation managed by the train algorithm
US7272695B1 (en) 2004-09-13 2007-09-18 Sun Microsystems, Inc. Hot-card caching to avoid excessive remembered-set updating
US7313566B1 (en) 2004-12-23 2007-12-25 Sun Microsystems, Inc. Method and apparatus for isolating selected heap objects using a faulting address trap
US7882505B2 (en) * 2005-03-25 2011-02-01 Oracle America, Inc. Method and apparatus for switching between per-thread and per-processor resource pools in multi-threaded programs
US7565499B1 (en) 2005-03-28 2009-07-21 Sun Microsystems, Inc. Method and apparatus for recording modified reference locations in garbage-collected heap memory
US7650350B1 (en) 2005-05-18 2010-01-19 Sun Microsystems, Inc. Method and apparatus for concurrently processing remembered sets in a space-incremental garbage collector
GB0512809D0 (en) * 2005-06-23 2005-08-03 Ibm Arrangement and method for garbage collection in a computer system
US20070100919A1 (en) * 2005-11-01 2007-05-03 Electronics And Telecommunications Research Institute Garbage collection unit and method thereof
KR100753821B1 (ko) 2005-11-01 2007-08-31 한국전자통신연구원 가비지 컬렉션 장치 및 그 방법
US7599973B2 (en) * 2006-01-12 2009-10-06 Sun Microsystems, Inc. Method and apparatus for decreasing object copying by a generational, copying garbage collector
US8825718B2 (en) * 2006-12-28 2014-09-02 Oracle America, Inc. Methods and apparatus for marking objects for garbage collection in an object-based memory system
US7870171B2 (en) * 2007-02-12 2011-01-11 Oracle America, Inc. Method and system for garbage collection in a multitasking environment
US7627621B2 (en) * 2007-02-12 2009-12-01 Sun Microsystems, Inc. Method and system for minor garbage collection
US9785549B2 (en) 2007-04-27 2017-10-10 Microsoft Technology Licensing, Llc Managing object lifetime for native/managed peers
US7685182B2 (en) * 2007-05-08 2010-03-23 Microsoft Corporation Interleaved garbage collections
US8478738B2 (en) * 2007-12-10 2013-07-02 International Business Machines Corporation Object deallocation system and method
WO2010018613A1 (ja) * 2008-08-11 2010-02-18 富士通株式会社 ガーベジコレクションプログラム、及びガーベジコレクション方法、ならびにガーベジコレクションシステム
US9384129B2 (en) 2011-06-16 2016-07-05 Microsoft Technology Licensing Llc Garbage collection based on total resource usage and managed object metrics
US8694562B2 (en) 2012-05-22 2014-04-08 Microsoft Corporation Generational garbage collection for a pool-based heap
US8954398B1 (en) * 2013-01-04 2015-02-10 Symantec Corporation Systems and methods for managing deduplication reference data
US9189382B2 (en) 2013-05-08 2015-11-17 Red Hat, Inc. Noncontiguous representation of an array
KR101730991B1 (ko) * 2014-10-28 2017-04-28 삼성전자주식회사 스토리지 장치 및 스토리지 장치의 동작 방법
US9747250B2 (en) 2015-03-25 2017-08-29 International Business Machines Corporation Effective memory management for host objects in a runtime environment with embedded garbage-collected based dynamic language
US9734052B2 (en) * 2015-06-30 2017-08-15 International Business Machines Corporation Multi-section garbage collection
US10180902B2 (en) * 2015-06-30 2019-01-15 International Business Machines Corporation Pauseless location and object handle based garbage collection

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4797810A (en) * 1986-06-26 1989-01-10 Texas Instruments Incorporated Incremental, multi-area, generational, copying garbage collector for use in a virtual address space
US4989134A (en) * 1987-03-20 1991-01-29 Hewlett-Packard Company Method and apparatus for enhancing data storage efficiency
US5136706A (en) * 1987-04-30 1992-08-04 Texas Instruments Incorporated Adaptive memory management system for collection of garbage in a digital computer
US5953736A (en) * 1997-04-23 1999-09-14 Sun Microsystems, Inc. Write barrier system and method including pointer-specific instruction variant replacement mechanism
US5903900A (en) * 1997-04-23 1999-05-11 Sun Microsystems, Inc. Method and apparatus for optimizing exact garbage collection of array nodes in a carded heap
US5845298A (en) * 1997-04-23 1998-12-01 Sun Microsystems, Inc. Write barrier system and method for trapping garbage collection page boundary crossing pointer stores
US6148310A (en) * 1998-08-25 2000-11-14 International Business Machines Corporation Method for combining card marking with remembered sets for old area of a memory heap

Also Published As

Publication number Publication date
KR100567082B1 (ko) 2006-03-31
JP2000047931A (ja) 2000-02-18
DE69932874T2 (de) 2007-02-22
EP0940755A1 (en) 1999-09-08
DE69932874D1 (de) 2006-10-05
CN100343821C (zh) 2007-10-17
US6308185B1 (en) 2001-10-23
EP0940755B1 (en) 2006-08-23
CN1236921A (zh) 1999-12-01

Similar Documents

Publication Publication Date Title
KR19990077655A (ko) 컴퓨터메모리를세대(世代)에의하여동적으로관리하는방법과장치
US6249793B1 (en) Mostly concurrent compaction in a garbage collection system
US5652883A (en) Computer method and system for conservative-stack and generational heap garbage collection
US7711920B2 (en) Method and system for dynamically managing storage of data objects generated during execution of a computer program
EP1686482B1 (en) File recording device
KR100512665B1 (ko) 가비지 수집기들을 추적하는 공간 한정된 마킹 구조
US5321834A (en) Method and system for reclaiming unreferenced computer memory space
JP2564483B2 (ja) 接続されたユ−ザのプロセツサとは独立の並列ガ−ベツジコレクシヨン機能を有するコンピユ−タ記憶装置
US6173294B1 (en) Method for combining card marking with remembered set for generational garbage collection with more than two generations
US8065304B2 (en) Using asymmetric memory
US7631024B2 (en) Method and apparatus for facilitating mark-sweep garbage collection with reference counting
US6510440B1 (en) Method and apparatus for performing generational garbage collection using barrier bits
EP0606461A1 (en) Computer method and system for allocating and freeing memory
US9116798B2 (en) Optimized memory management for class metadata
JP2002506550A (ja) 部分的に再配置されたオブジェクトのソース及び目標インスタンスに関する書込みバリアを含む有界休止時間ガーベッジコレクションシステム及び方法
JP2002506549A (ja) 部分的に再配置されたオブジェクトのソースインスタンスに関連する書き込みバリアを含む有界休止時間ガーベッジコレクションシステム及びその方法
KR20010025112A (ko) 메모리 재사용 방법
US6470361B1 (en) Method and apparatus for performing generational garbage collection using middle-aged objects
JP4756231B2 (ja) 掃除用のガーベッジコレクションの効果を高めるための方法、コンピュータ読み取り可能媒体、コンピュータシステム、及び、メモリ
US7676511B2 (en) Method and apparatus for reducing object pre-tenuring overhead in a generational garbage collector
US7499961B2 (en) Method and apparatus for limiting the size and facilitating maintenance of remembered sets in a space incremental garbage collector
US7072918B2 (en) Remembered-set scrubbing to remove stale entries in an incremental garbage collector
US20160239217A1 (en) Determining causes of external fragmentation of memory
US7155467B1 (en) Adaptive type-partitioned garbage collection
US7596667B1 (en) Method and apparatus for byte allocation accounting in a system having a multi-threaded application and a generational garbage collector that dynamically pre-tenures objects

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20130305

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20140228

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20150302

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20160303

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20170302

Year of fee payment: 12

EXPY Expiration of term