KR20010025112A - 메모리 재사용 방법 - Google Patents

메모리 재사용 방법 Download PDF

Info

Publication number
KR20010025112A
KR20010025112A KR1020007013526A KR20007013526A KR20010025112A KR 20010025112 A KR20010025112 A KR 20010025112A KR 1020007013526 A KR1020007013526 A KR 1020007013526A KR 20007013526 A KR20007013526 A KR 20007013526A KR 20010025112 A KR20010025112 A KR 20010025112A
Authority
KR
South Korea
Prior art keywords
data
finalizer
objects
unnecessary information
mark
Prior art date
Application number
KR1020007013526A
Other languages
English (en)
Other versions
KR100715638B1 (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 KR20010025112A publication Critical patent/KR20010025112A/ko
Application granted granted Critical
Publication of KR100715638B1 publication Critical patent/KR100715638B1/ko

Links

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
    • G06F12/0261Garbage collection, i.e. reclamation of unreferenced memory using reference counting
    • 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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

확인 포인터들에 의해 링크된 데이터 오브젝트들을 포함하는 데이터 구조들에 할당된 메모리 스페이스를 재사용하는 방법 및 장치이다.
액티브 데이터 오브젝트들을 확인하고 마킹하기 위해 데이터 구조들을 트래버싱하는 단계(300)와, 이전 사이클 동안 불필요 정보(garbage)로서 마킹된 데이터 오브젝트들을 삭제하는 단계(320)와, 액티브(active)로서 마킹되지 않은 데이터 오브젝트들을 불필요 정보로서 마킹하는 단계(330)와, 파이널라이저(finaliser)를 갖는 불필요 정보로서 마킹된 어떤 데이터 오브젝트의 파이널라이저를 실행하는 단계(340)을 포함하는 반복 사이클이 실행된다.

Description

메모리 재사용 방법{Memory reclamation method}
불필요 정보 수집은 프로그래머에 의한 그 최종 사용후의 시스템 메모리 스페이스의 자동 재사용(automated reclamation)이다. 불필요 정보 수집 기술의 다수의 예는 1996년 John Wiley & Sons 발행, ISBN 0-471-94148-4, 1 내지 18페이지의 R. Jones 등에 의한 "Garbage Collection:Algorithms for Automatic Dynamic Memory Management(불필요 정보 수집:자동 다이내믹 메모리 관리를 위한 알고리즘)"에 개시되어 있다. 프로그래머나 편집자에 의해 취급되는 메모리 배치 및 복구를 이용하여, 많은 컴퓨터 프로그램의 저장 요건은 간단하고 예측가능할지라도, 특정 데이터 구조의 수명이 런 타임(run-time) 이전에 더 이상 결정되지 않고 따라서 이 저장의 자동 재사용이 프로그램이 실행됨에 따라 필요 불가결한 것이 되도록 보다 복잡한 실행 패턴을 갖는 기능적 언어로 향하는 경향이 있다.
파이널리제이션(finalisation)은 썬 마이크로 시스템의 자바 7과 다른 현행 불필요 정보 수집된 언어(썬 마이크로시스템의 상표명인 자바(Java)를 이용) 및 모듈러-3(Modula-3)와 세더(Cedar) 등의 프로그래밍 환경에 사용된 개념이다. 프로그램 처리에 의해 만들어진 저장된 데이터 오브젝트들은 프로그램 처리를 실행하는 동안이라는 점에서 더이상 필요하지 않을 것이다. 불필요한 데이터 오브젝트들은 프로그래밍 환경의 불필요 정보 수집기에 의해 검출되고 불필요 정보로서 마킹되어 데이터 오브젝트에 의해 점유된 메모리가 재사용될 수 있다. 데이터 오브젝트는 오브젝트가 불필요 정보로서 검출된 후 그러나 데이터 오브젝트에 의해 점유된 메모리가 재사용되기 전에 실행되될 관련 파이널라이저(finaliser)를 가질 수 있다. 이 특징의 목적은 오브젝트가 재사용된 다른 시스템 자원을 그것이 손상되기 전에 오브젝트를 클린업(clean up) 하도록 하는 것이다. 예를 들어, 자바 파일 오브젝트용 파이널라이저는 그 오브젝트에 의해 홀딩된 모든 시스템 파일 핸들을 차단할 것이다.
그러나, 다른 프로그램 공정의 전력 모두와 함께, 파이널라이저가 단지 데이터 오브젝트와 관련된 특정 유형의 프로그램 공정이므로, 파이널라이저 공정은 파이널라징되는 오브젝트로부터 액세스 가능한 모든 데이터 오브젝트들을 액세스하고 조종할 수 있다. 그러므로, 데이터 오브젝트에 의해 홀딩된 참조 포인터로부터 액세스 가능한 디센던트(descendant) 오브젝트 등과 같은, 파이널라이저에 의해 액세스 가능한 모든 오브젝트들은 불필요 정보 수집으로부터 명백하게 제외되어야만 한다. 더욱이, 다시 프로그램 처리에 의해 액세스 가능한 오브젝트를 만들므로써, 자체로 파이널라이징되는 오브젝트를 포함하는, 파이널라이저에 의해 액세스 가능한 그와 같은 오브젝트들을 파이널라이저 방법에 의해 재사용하는 것이 가능하다. 따라서, 불필요 정보 수집 공정은 그 파이널라이저가 실행되고 오브젝트들의 액세스 가능성이 재평가되기까지 파이널라이즈 가능한 오브젝트에 의해 액세스 가능한 오브젝트들을 삭제할 수 없다. 자바 및 다른 언어에서, 자체로 반복해서 재사용되는 오브젝트의 가능성은 각 경우에 대한 파이널라이저가 단지 한번만 실행되는 것을 지정함으로써 통상 제거된다. 여기에서 이 파이널리제이션상의 제어가 가정될 것이다.
PC나 워크스테이션에서, 파이널리제이션을 지지하기 위해 메모리 로드 및 임시 처리는 일반적으로, 물론 이러한 지지가 전체 효율성에 영향을 줄지라도, 통상적으로 PC에서 이용할 수 있는 메모리의 양으로 인한 문제는 아니다. 그러나 셋톱 박스 등과 같은 저 메모리 환경에서는, 파이널라이저를 위한 지지는 문제점들을 발생할 수 있고 동시발생 또는 증분 불필요 정보 수집기라도 그것이 몇몇의 또는 모든 현저한 파이널라이저를 실행하고 그들에 의해 사용된 메모리를 재사용할 때까지 프로그램을 정지해야만 할 것이다.
종래의 마크 스윕(mark-sweep) 불필요 정보 수집기에서는 스윕 단계는 단지 마크 단계가 종료된 후에 실행된다. 그러므로, 단지 마킹되지 않은 오브젝트들은 마크 단계가 모든 액티브 데이터 구조들을 완전히 트래버싱(traverse)하는 동안 불필요 정보로서 틀림없이 취급될 수 있다. 그와 같은 수집기는 마크 단계와 스윕 단계가 동시에 실행되도록 즉시 실행될 수 없다.
본 발명은 저장된 데이터 오브젝트들을 취급하는 방법 및 장치에 관한 것으로, 특히, 독점적이지는 않으나, 데이터 처리 장치의 실재 또는 가상 메모리 스페이스에서 실시간으로 실행되는 메모리 컴팩션(compaction) 및 불필요 정보 수집 공정에서의 오브젝트들에 대한 파이널리제이션(finalisation)의 취급에 관한 것이다.
도 1은 본 발명을 구체화하기에 적절한 데이터 처리 시스템의 블록도.
도 2는 종래기술의 불필요 정보 수집 시스템의 마킹 및 스위핑 동작의 동시 발생을 나타내는 도면.
도 3은 본 발명의 일 실시예에 따른 메모리 재사용 방법의 흐름도.
도 4는 본 발명의 다른 실시예에 따른 메모리 재사용 방법의 흐름도.
도 5는 파이널라이즈 가능한 데이터 구조를 나타내는 도면.
본 발명의 한 양태에 따르면, 확인 포인터들에 의해 링크된 데이터 오브젝트들을 포함하는 데이터 구조들에 할당된 메모리 스페이스를 재사용하는 방법으로서, 액티브 데이터 오브젝트들을 확인하고 마킹(mark)하기 위해 데이터 구조들을 트래버싱(traverse)하는 단계와; 이전 사이클 동안 불필요 정보(garbage)로서 마킹된 데이터 오브젝트들을 삭제하는 단계와; 액티브(active)로서 마킹되지 않은 데이터 오브젝트들을 불필요 정보로서 마킹하는 단계; 및 파이널라이저(finaliser)를 갖는 불필요 정보로서 마킹된 어떤 데이터 오브젝트의 파이널라이저를 실행하는 단계의 반복 사이클을 포함하는 메모리 스페이스 재사용 방법이 제공되어 있다.
본 발명의 방법 및 장치는 불필요 정보 오브젝트들을 명백하게 마킹함으로써 동시에 실행될 마킹(marking) 및 스위핑(sweeping)을 허용한다. 하나의 스윕 단계에서 불필요 정보로서 오브젝트들을 마킹하고 다음에서 그들 오브젝트들을 재사용함으로써, 오브젝트들의 삭제는 마킹 단계로부터 완전히 분리된다. 그러므로 메모리는 라이브 오브젝트들을 마킹함으로써 동시에 재사용되어 불필요 정보의 효율성을 개선한다.
상기 파이널라이저를 갖는 불필요 정보로서 마킹된 어떤 데이터 오브젝트의 파이널라이저를 실행하는 단계는 실행될 각 파이널라이저를 큐잉(queue)하고 각 큐잉된 파이널라이저를 차례로 실행하는 단계를 포함할 수 있고, 액티브 데이터 오브젝트들을 확인하고 마킹하기 위해 상기 데이터 구조들을 트래버싱하는 단계는 큐잉된 파이널라이저가 실행될 각 오브젝트의 데이터 구조를 트래버싱하고 오브젝트 및 그의 디센던트(descendant)들을 마킹하는 단계를 포함할 수 있다.
제 1 마크 및 제 2 마크는 오브젝트들을 불필요 정보로서 마킹하기 위해 다른 사이클에서 교대로 사용될 수 있고, 현재 사이클에서 사용된 마크와는 다른 마크를 갖는 데이터 오브젝트들은 삭제된다.
실행 안된 파이널라이저들을 갖는 데이터 오브젝트들의 총계는 파이널라이저들을 갖는 액티브 데이터 구조들의 데이터 오브젝트들의 총계와 비교될 수 있고, 총계들이 동일하면 액티브로서 마킹되지 않은 모든 오브젝트들은 삭제된다.
본 발명의 방법 및 장치는 불필요 정보 및 파이널라이즈 가능한 오브젝트들에 할당된 메모리를 가능한 한 빨리 효율적으로 재사용한다.
실행을 위해 큐잉될 파이널라이저를 갖는 데이터 오브젝트에 대응하는 데이터 구조는 실행을 위해 큐잉될 파이널라이저를 갖는 데이터 구조의 다른 데이터 오브젝트를 발견하기 위해 처리될 수 있고, 다른 데이터 오브젝트가 상기 데이터 구조의 어떤 계층에서 더 높다면, 파이널라이저는 다른 데이터 오브젝트용 파이널라이저 뒤에 실행을 위해 큐잉되고, 데이터 오브젝트가 다른 데이터 오브젝트보다 상기 데이터 구조의 어떤 계층에서 더 높다면, 파이널라이저는 상기 다른 오브젝트용 파이널라이저 전에 실행을 위해 큐잉된다.
본 발명의 다른 양상에 따르면, 확인 포인터들에 의해 링크된 데이터 오브젝트들을 포함하는 데이터 구조를 포함하는 랜덤 액세스 메모리가 연결된 데이터 프로세서를 포함하는 데이터 처리 장치로서, 액티브 데이터 오브젝트들을 확인하고 마킹하기 위해 데이터 구조들을 트래버싱하는 수단과; 이전 사이클 동안 불필요 정보로서 마킹된 데이터 오브젝트들을 삭제하는 수단과; 액티브로서 마킹되지 않은 데이터 오브젝트들을 불필요 정보로서 마킹하는 수단; 및 파이널라이저를 갖는 불필요 정보로서 마킹된 어떤 데이터 오브젝트의 파이널라이저를 실행하는 수단을, 저장된 복수의 데이터 오브젝트들상에 동작하기 위한 반복 사이클에서 제공하도록 구성되는 데이터 처리 장치가 제공된다.
파이널라이저를 갖는 불필요 정보로서 마킹된 어떤 데이터 오브젝트의 파이널라이저를 실행하는 수단은 실행될 각 파이널라이저를 큐잉(queue)하고 각 큐잉된 파이널라이저를 차례로 실행하는 수단을 포함할 수 있고, 액티브 데이터 오브젝트들을 확인하고 마킹하기 위해 상기 데이터 구조들을 트래버싱하는 수단은 큐잉된 파이널라이저가 실행될 각 오브젝트의 데이터 구조를 트래버싱하고 오브젝트 및 그의 디센던트(descendant)들을 마킹하는 수단을 포함할 수 있다.
데이터 처리 장치는 실행 안된 파이널라이저들을 갖는 데이터 오브젝트들의 총계를 얻는 수단과,총계를, 파이널라이저들을 갖는 액티브 데이터 구조들의 데이터 오브젝트들의 총계와 비교하고 총계들이 동일하면 액티브로서 마킹되지 않은 모든 오브젝트들을 삭제하는 수단을 포함할 수 있다.
데이터 처리 장치는 실행을 위해 큐잉될 파이널라이저를 갖는 데이터 오브젝트에 대응하는 데이터 구조를 처리하여 실행을 위해 큐잉될 파이널라이저를 갖는 데이터 구조의 다른 데이터 오브젝트를 발견하는 수단과, 큐(queue)에서 상기 파이널라이저를 삽입하는 수단을 포함할 수 있고; 다른 데이터 오브젝트가 상기 데이터 구조의 어떤 계층에서 더 높다면, 파이널라이저는 다른 데이터 오브젝트용 파이널라이저 뒤에 삽입되고, 그렇지 않으면, 만일 데이터 오브젝트가 다른 데이터 오브젝트보다 상기 데이터 구조의 어떤 계층에서 더 높다면, 상기 파이널라이저는 다른 오브젝트용 파이널라이저 전에 삽입된다.
이제 첨부된 도면들을 참조하여 단지 예로서 본 발명을 설명한다.
도 1은 퍼스널 컴퓨터 등의 데이터 처리 시스템을 나타내며, 이 시스템은 예를 들어 가상 환경을 규정하는 데이터용 브라우저로서 시스템을 구성할 수 있는 다수의 소프트웨어 유틸리티용 호스트로서 작동한다. 위의 시스템은 어드레스 및 데이터 버스(12)를 통해 랜덤 액세스 메모리(RAM)(14) 및 판독 전용 메모리(ROM)(16)에 접속된 중앙 처리 장치(CPU)(10)를 포함한다. 이들 메모리들은 하나 또는 몇몇의 집적 회로 디바이스로 구성될 수 있으며, CD-ROM 등의 부가(착탈가능한) 메모리 디바이스들로부터 판독하기 위한 수단은 물론 시스템 하드 디스크에 의해 증대될 수 있다. 또한 마우스나 트랙볼 등의 커서 제어 및 선택 디바이스와 키보드를 적절히 포함할 수 있는 제1 및 제2 유저 입력 디바이스(18,20)이 버스(12)를 통해 CPU(10)에 접속되어 있다. 시스템으로부터의 오디오 출력은 오디오 처리 스테이지(24)에 의해 구동된 하나 이상의 스피커(22)를 통해 이루어진다. 시스템으로부터의 비디오 출력은 CPU(10)의 제어하에서 디스플레이 드라이버 스테이지(28)에 의해 구동된 디스플레이 스크린(26)상에 표시된다. 시스템의 다른 데이터 소스는 버스(12)에 접속된 네트워크 인터페이스(30)가 설치되는 시스템을 끝맺는, 예를 들어 인터넷을 통해 원격 사이트에 온라인 링크된다.
본 발명은 CPU(10)의 제어하에서 RAM(14)의 작업 영역에 대한 메모리 관리에서 특히 구체화되며; 이를 위한 프로그램 제어는 ROM(16)에 최초에 홀딩(hold)되고 전원을 올린 상태에서 동작 시스템으로 로딩업(load-up)될 수 있다. 다음의 예들은 자바 7(썬 마이크로 시스템스 인코포레이티드) 가상 머신에서의 동시 발생 불필요 정보 수집 및 메모리 관리 기술에 따르며, 이 기술은 다음과 같이 해석되어야 한다: 그러나 본 발명은 자바-컴플라이언트 시스템에 한정되는 것이 아니며, 동시발생(또는 증분) 불필요 정보 수집이나 간단히 가상 메모리 관리에 한정되는 것도 아니라는 것을 인식될 것이다.
다음에서, 특정 의미를 갖는 다수의 특별한 용어들이 다음과 같이 사용될 것이다. 루트 오브젝트들을 시스템에서 글로벌하게 액세스 가능한 저장 데이터 오브젝트들이다: 자바에서는, 이들이 스테이틱 데이터 필드 및 스택들에 의해 표시된다. 도달 가능한 오브젝트들은 시스템의 루트 오브젝트들로부터 액세스 가능한 데이터 구조에 접속된 저장 데이터 오브젝트들이다. 불필요 정보 수집동안, 마킹 처리는 하나의 불필요 정보 수집 사이클에서 모든 도달 가능한 오브젝트들을 발견해야 한다. 도달 가능하지 않은 오브젝트들은 액세스 가능한 데이터 구조에 접속되지 않은 저장 데이터 오브젝트이며, 그들은 프로그램을 실행하기 위해 액세스하기 어려우며 따라서 불필요 정보 쉽을 위한 후보자이다.
파이널라이즈 가능한 오브젝트들은 그들이 도달 가능하지 않음에 따라 명목상으로 불필요 정보가 되지만 또한 아직 실행되지 않은 텅비지 않은 파이널라이저를 갖는 데이터 오브젝트들이다. 파이널라이저는 단지 한번 실행될 수 있으므로, 그 파이널라이저가 불필요 정보 수집기에 의해 아직 실행되지 않았다면 오브젝트는 파이널라이즈 가능한 것으로 고려된다. 파이널라이저-도달 가능한 오브젝트들은 파이널라이즈 가능한 오브젝트들로부터 포인터들을 통해 도달 가능한 도달 가능하지 않은 오브젝트들의 그룹의 부분집합이다: 이들 오브젝트들은 그들이 재생되거나 그렇지않으면 파이널라이저에 의해 변형될 수 있는 바와 같이 수집된 불필요 정보가 아니어야 한다.
뮤테이터 쓰레드(mutator thread)들은 증분 불필요 정보 수집 시스템에서의 실행 쓰레드들이다: 그 이름은 불필요 정보 수집 쓰레드들과 동시에 저장 데이터 오브젝트들을 홀딩하는 힙(heap) 메모리들을 변화시키는 그들의 효과로부터 생기며, 불필요 정보 수집 쓰레드는 불필요 정보 오브젝트들을 수집하고 힙에서의 더 많은 자유 공간을 만들기 위한 목적의 전용 시스템 쓰레드이다. 파이널라이저 쓰레드는 도달 가능하지 않은 오브젝트들용의 파이널리제이션 코드를 파이널라이저로 실행할 전용 시스템 쓰레드이다.
검출 기간은 제거되는 오브젝트에 대한 최종 참조값과 도달 가능하지 않은 오브젝트로서의 그 검출 사이의 시간 기간이다. 마크-스윕 수집기들에서, 이것은 마킹 사이클의 지속시간에 의해 결정된다. 재사용 기간은 도달 가능하지 않은 것으로서 검출되는 오브젝트와 그것이 삭제되는 포인트 사이의 시간이다. 마크-스윕 불필요 정보 수집기들에서, 이것은 파이널라이즈 가능한 오브젝트들의 존재와 스윕 사이클의 지속시간에 의해 결정된다.
설명을 위해, 우선 예를 들어 썬 자바 가상 머신 v1.0.2에서 사용된, 파이널라이징 불필요 정보 수집을 위해 일반적으로 사용된 기술을 고려하는 것이 유용할 것이다. 전형적인 비-파이널라이징 불필요 정보 수집 사이클은 도달 가능하지 않은 불필요 정보 수집 세트가 이어지는, 집합의 도달 가능한 및 도달 가능하지 않은 데이터 오브젝트들의 집합으로 힙을 첫째로 분할함과 같이 구체화 항목들과 무관하게 설명될 수 있다. 파이널리제이션은 앞서와 같이, 도달 가능하지 않은 세트를 불필요 정보 및 파이널라이저-도달 가능한 집합들로 분할하고; 최종적으로 불필요 정보 집합의 불필요 정보 수집 및 파이널라이저-도달 가능한 집합상의 파이널라이저 실행이 뒤따르는; 도달 가능한 및 도달 가능하지 않은 집합들로의 힙의 분할을 포함하도록, 각 불필요 정보 수집 사이클에 대로운 스테이지를 부가함으로써 불필요 정보 수집을 복잡하게 한다.
이러한 사이클을 연장하는 것은 도달 가능하지 않은 것이 되는 오브젝트들과 그들의 수집 사이의 래그(lag)가 더 커지는 것을 의미하며, 그 결과로, 힙의 더 큰 비율이 불필요 정보 오브젝트들에 의해 사용되고 그러므로 힙의 더 작은 영역은 새로운 데이터 아이템들을 위해 이용될 수 있다. 또한, 사이클내에서의 스테이지들 사이의 강한 의존은 불필요 정보 수집 알고리즘이 계속됨에 따라 뮤테이터 쓰레드들내의 긴 중단과 함께, 대부분의 실행이 불량한 동시 발생 특성을 가질 것을 의미한다. 전형적인 시스템에서의 다수의 파이널라이즈 가능한 오브젝트들이 작은 백분율의 액티브 오브젝트들의 집합이라는 것을 고려하면, 부가된 오버헤드의 파이널라이저 지지는 불균형하게 크다. 시스템내의 각 오브젝트의 상태는 2개의 변수 M과 F에 의해 확인되며, 여기서, M은 (다른 마크 상태를 포함하는) 마킹된 또는 마킹 안된 것이며, F는 파이널라이저 또는 노(No) 파이널라이저를 나타낼 수 있다. 변수 'M=마크'를 갖는 오브젝트는 도달 가능한 것이며 마킹 처리에 의해 발견되어 왔고, 반면 'M=마킹 안됨'은 오브젝트가 아직 도달 가능하게 되는 것으로 반견되지 않았음을 나타낸다.
간단한 시스템에서의 불필요 정보 수집기 및 그의 상호작용과 관련된 개별 태스크는 도 2에 도시되어 있다. 뮤테이터 쓰레드(MU)는 임의의 시간에 힙(heap)에 새로운 오브젝트들을 만들 수 있다. 마킹 스테이지(MA)는 루트 오브젝트들로부터의 오브젝트들의 트레이싱(tracing)을 포함한다. 이 트레이싱에 의해 발견된 오브젝트들은 'M=마크'를 가지며, 마킹은 불필요 정보 수집 쓰레드에서 또는 증분 불필요 정보 수집의 예시된 경우에, 뮤테이터 쓰레드에서 실행될 수 있다. 파이널라이저 분할(F-P)은 힙 위에서 스위핑하는 것, 큐(queue)내의 'M=마킹 안됨' 및 'F=파이널라이저'로 오브젝트들을 위치시키는 것을 포함하고, 마크 단계는 파이널라이즈 가능한 오브젝트들을 루트로서 이용한다: 이것은 불필요 정보 수집(GC) 쓰레드에서 실행된다. 파이널리제이션 스테이지(FS)는 큐에서의 파이널라이의 실행을 포함하고, 실행후의 오브젝트들에 대해 'F=NO 파이널라이저'를 설정한다. 이것은 불필요 정보 수집(GC) 쓰레드나, 또는 도시된 바와 같은, 전용의 파이널라이저 쓰레드(FS)에서 실행될 수 있다.
이 기술은 몇몇 불량한 특성을 가지며, 그 첫번째는 마크 단계(MA), 파이널라이저 분할(F-P), 직렬로 발생하는 불필요 정보 수집(GC) 스윕의 단계를 이용한 불량한 동시 발생이다. 따라서, 태스크들 사이의 고유의 독립성은 멀티-쓰레드 시스템에서 활용될 수 없다. 다른 문제는 일반적으로 전체 오브젝트들에 대한 긴 재사용 시간이다. (아주 대부분이 될) 논(non)-파이널라이저-도달 가능한 불필요 정보에 있어서, 어떠한 불필요 정보도 파이널라이저 분할(F-P)이 종료할 때까지 이 사이클에서 수집되지 않을 것이다. 이것은 오브젝트들이 어쨋든 파이널리제이션 분할 동안 검사될 것이므로 비경제적이다. 증분 불필요 정보 수집 알고리즘을 이용하여, 파이널라이저 분할(F-P) 및 불필요 정보 수집(GC) 스윕이 발생하는 동안 뮤테이터에 대한 시스템 중단은 만족스럽지 못하게 길고, 힙 위의 2개의 완성된 스윕과 파이널라이저-도달 가능한 마킹 단계를 플러스한 것을 처리한다.
도 3은 본 발명의 일 실시예에 따른 메모리 재사용 방법의 흐름도이다. 불필요 정보 마크 변수(G)는 각 오브젝트에 관련된다. 처음에 변수에 아무런 값도 주어지지 않으며, 그것은 각각의 오브젝트가 도달 가능하지 않은 것으로 확인될 때 설정된다. 도달 가능한 오브젝트들을 확인하고 마킹하는 마킹 스테이지는 설명된 또는 위에서 언급된 기술 등과 같은 기술을 이용하는 단계(300)에서 실행된다. 마킹 안된 오브젝트들(즉, 마킹 스테이지(300)에서 도달되지 않은 것들)은 단계(300)에서 이미 현존하는 불필요 정보 마크에 대해 검사된다. 만약 불필요 정보 마크가 발견되면, 오브젝트는 단계(320)에서 삭제된다. 만약 현존하는 불필요 정보 마크가 발견되지 않으면, 오브젝트는 단계(330)에서 불필요 정보 마크에 할당된다. 만약 오브젝트와 관련된 파이널라이저 변수가 그것이 실행 안된 파이널라이저를 갖는 것을 나타내면, 오브젝트에 대한 참조값이 단계(340)에서 파이널라이저 큐에 부가된다. 스윕 스테이지는 마킹 안된 오브젝트들에 대한 불필요 정보 마크의 할당, 현존하는 불필요 정보 마크를 이용한 데이터 오브젝트들의 삭제, 파이널라이저의 실행(또는, 실행을 위한 스케줄링)을 포함한다. 마킹 스테이지는 루트 오브젝트들로부터 도달 가능한 전체의 오브젝트들의 트래버싱과 그들을 마킹하는 것을 포함한다. 마킹 스테이지의 목적을 위해, 실행 파이널라이저를 갖는 오브젝트들 또는 실행을 위해 스케줄링된 파이널라이저는 루트 오브젝트로서 다루어지고, 그러므로 오브젝트와 그의 디센던트 오브젝트들은 파이널라이저가 그의 실행을 종료할 때까지 재생되는 것이 방지된다.
단계(310-340)는 메모리 힙 내의 각 마킹 안된 오브젝트에 대해 반복된다. 일단 전체의 힙이 처리되면, 파이널라이저 큐에서 참조된 각 오브젝트에 대한 파이널라이저가 단계(350)에서 실행된다. 그에 의해, 이 사이클은 이전 사이클 동안 할당된 불필요 정보 마크를 갖는 오브젝트들에 할당된 메모리 스페이스를 재사용하고, 그것은 이전 사이클 동안 파이널라이저의 실행(또는, 실행의 스케줄링)후에라도 불필요 정보로서 남는다. 파이널라이저 실해은 참조된 오브젝트 및/또는 그의 도달 가능한 디센던트를 재생시키는 효과를 가질 수 있다. 재생된 오브젝트는 루트 오브젝트로부터 도달 가능하게 될 것이다. 일단 파이널라이저가 실행되었으면, 그의 참조값은 파이널라이저 큐로부터 제거되고, 오브젝트의 변수 F는 'F=NO 파이널라이저"로 설정된다.
다음의 마크 스테이지동안, (파이널라이저 실행의 결과로서) 루트도달 가능하도록 발견된 불필요 정보 마크를 갖는 오브젝트는 마킹되는 것에 부가하여 지워진 불필요 정보 마크를 갖는다. 바람직하게, 파이널라이징 오브젝트들, 즉 파이널라이징되도록 스케줄링된 오브젝트들과 마크 스테이지의 목적을 위한 루트 오브젝트들로서 다루어지는 그들의 디센던트들은 그들이 파이널라이저의 실행이 완료되자 마자 재사용되도록 지워진 그들의 불필요 정보 마크를 가지지 않는다.
후속하는 스윕 스테이지에서는, 불필요 정보 마크를 갖는 전체의 마킹 안된 오브젝트들, 즉, 이전의 마크 스윕 동안 확인되지만 파이널라이저에 의해 재생되지 않는 불필요 정보는 상술한 바와 같이 즉시 삭제될 수 있다.
이제 도 3을 참조하여 상술한 방법에 대한 향상된 것으로서의 일실시예를 설명한다. 이 실시예는 새롭게 마킹 안된 오브젝트들이 안전하게 삭제될 수 있는지(즉, 다음의 마크 스윕 사이크을 기다리지 않음) 여부를 확실히 검출하는 수단을 제공한다. 이 공정은 마킹 동안 발견된 파이널라이저로 다수의 오브젝트들을 트래킹하고, 공지의 그리고 힙 내에 할당된 저장된 총 값을 비교함으로써 실행된다. 파이널리제이션 큐가 마킹 처리에 포함되므로, 마킹 동안 위치가 정해지지 않은 파이널라이즈 가능한 오브젝트들만이 이전의 수집 사이클 동안 도달 가능하지 않게 된 것이다. 전체의 파이널라이즈 가능한 오브젝트들이 이전의 마크 단계에서 위치가 정해지지 않을 때, 스윕에서 확인을 위해 파이널라이저-도달 가능한 오브젝트들의 비어 있지 않은 집합이 있다. 그러나, 전체의 파이널라이즈 가능한 것들이 고려될 때, 전체의 마킹 안된 오브젝트들은 불필요 정보가 될 것으로 공지되며, 즉시 삭제될 수 있다.
오브젝트 상태는 도 3에 관한 예이만, 3개의 새로운 글로벌 변수가 부가된다:
finaliser_count 힙 내의 파이널라이즈 가능한 오브젝트들의 총수의 카운트
found_count 마크 처리 동안 위치가 정해진 파이널라이저를 갖는 오브젝트들의 수
shortcut 스윕 처리가 이 사이클에서 어떻게 작용하는지를 나타내는 플래그.
태스크는 도 3의 예에 대해 일반적으로 실해되지만, 도 4의 흐름도에 의해 예시된 바와 같은 몇몇 예외를 갖는다. 뮤테이터의 경우, 만약 만들어진 새로운 오브젝트가 'F=파이널라이저'를 가지면, finaliser_count는 증가된다. 마킹 동안, 만약 발견된 오브젝트가 'F=파이널라이저'를 가지면, found_count는 단계(400)에서 증가된다. 만약, 전체의 도달 가능한 오브젝트들이 마킹된 후, found_count = finaliser_count이면, 어떠한 파이널라이즈 가능한 오브젝트들도 이 사이클에서 불필요 정보가 되지 않고, 전체의 마킹 안된 오브젝트들은 안전하게 삭제될 수 있다. 숏컷(shortcut) 변수는 단계(410)에서 이것을 나타내기 위해 '참(true)'으로 설정된다. 그렇지 않으면, 숏컷 변수는 이 사이클에서 처리될 하나의 새롭운 파이널라이즈 가능한 오브젝트가 적어도 있고 어떠한 새롭게 마킹 안된 오브젝트들이 삭제되지 않는 것을 나타내는 '거짓(false)'으로 설정된다.
스위핑 동안, 만약 변수 'shortcut'이 참이면, 어떤 마킹 안된 오브젝트들은 도 3을 참조하여 전술한 바와 같이 처리된다. 파이널라이징은 전과같이 취급되지만, 오브젝트를 위한 파이널라이저 쓰레드를 실행한 후에, F는 'NO 파이널라이저'로 설정되고, 오브젝트는 마킹되며, found_count 및 finaliser_count는 모두 감소된다.
위의 기술이 설명된 바와 같은 증분 불필요 정보 수집기에 적용될 때, finaliser_count는 마킹 트래버설(marking traversal) 동안 변할 수 있다. 카운트가 일관되게 하기 위해서는, found_count는 마크 트래버설 또는 비교로 인해 잘못된 결과를 생산하는 동안 발견된 어떤 오브젝트들을 포함하지 않아야 한다. 이것을 피하기 위해서는, 트래버설 동안 found_count는 만약 마킹된 파이널라이즈 가능한 오브젝트가 만난다면 감산된 1을 가질 것이다. 또는, 제2의 진행중의 카운트인 processed_count는 스윕 동안 만난 마킹된 파이널라이저의 수를 기록하기 위해 유지될 것이며, processed_count는 finaliser_count와 비교하기 전에 found_count로부터 삭제된다.
도 4는 'shortcut' 변수의 사용을 통해 부가적인 재사용을 갖는 이러한 최적의 파이널리제이션 모델을 도시한다: 인지되는 바와 같이, 도 3의 기술과의 비교에서, 도 4의 것은 아무런 파이널라이저가 사용되지 않을 때 1-사이클 재사용을 보증하며, 전체의 논-파이널라이저-도달 가능한 데이터 오브젝트들에 대해 2-사이클 재사용의 최대값을 보증한다.
위에 소개된 방법에 대한 한 변형례는 다음 마크 단계까지 대기하기 보다는 스윕 단계 동안 라이브로서의 마크 파이널라이저 및 그들의 디센던트에 대한 것이다. 이러한 방법으로, 어떤 오브젝트들이 다음 마크 단계의 끝까지 대기하기 보다는 스윕 단계의 끝에서 불필요 정보인지를 말할 수 있다. 이것은 마크 및 스윕 단계가 동시에 실행되었다면 이득이 될 것이다.
하나 이상의 파이널라이즈 가능한 오브젝트가 도달 가능하지 않은 것으로 되는 일반적으로 드문 경우에는, 이 사이클에서 검출된 파이널라이즈 가능한 수는 마킹 처리와 스윕 처리 사이의 드문 조건으로 인해 확실하지 않게 된다. 예를 들면, 파이널리제이션 큐에 부가되고 마킹된, 스윕에 의해 오브젝트(F1)가 발견된다고 가정하면; F1은 다른 파이널라이즈 가능한 오브젝트(F2)를 참조하며, 이것은 또한 이 사이클에서는 도달 가능하지 않은 것이다. 마킹 알고리즘의 작용에 따라, F2는 다음의 사이클내의 스윕이 그것에 도달하기 전후에 마커에 의해 도달될 수 있다. F2는 스위퍼(sweeper)가 처음으로 도달한다면 이 사이클에서 파이널리제이션 리스트에 단지 부가된다. 가능한 해법은 스윕 또는 마킹 처리에 의해 발견되는지 여부에 관계없이 오브젝트에 대해 동일한 작용이 취해지도록 그들이 마킹됨에 따라 파이널라이징 큐상에 오브젝트들을 위치시키는 것이다.
적극적인 마킹 알고리즘은 파이널라이저의 세미-위상적 오더링(ordering)을 이끄는, 톱 레벨의 구성으로서 동일한 사이클 동안 큐를 시작함으로부터 접속된 데이터 구조에서 더 낮은 파이널라이즈 가능한 것을 방지하는데 도움이 될 것이다. 이것은 일반적으로 더 작은 기간보다 더 길게 도달 가능하게 설정하고 그러므로 삭제시에 더 많은오브젝트들을 도달 가능하지 않게 만드는 데이터 구조에서 더 높은 오브젝트들로서의 재이용률을 지원한다.
역으로, 스윕 동안 위치가 정해진 파이널라이즈 가능한 것의 마킹은 스윕이 종료할 때까지 지연되어, 전체의 새로운 도달 가능하지 않은 파이널라이즈 가능하지 안흔 것이 파이널리제이션 큐에 부가될 것이다. 이것은 예측 가능성을 지원하고, 재사용 기간 한정을 강화하는 것을 허용한다: 1-사이클 재사용은 도달 가능하지 않고 파이널라이즈 가능하지 않은 오브젝트들이 이전의 마킹 단계에서 검출되지 않을 때에 보증된다.
도 5는 도 3 및 도 4를 참조하여 설명된 방법의 다른 향상된 것에 의해 처리되는 파이널라이즈 가능한 데이터 구조를 나타내며, 여기에서는 단계(350)에서의 파이널라이저 큐에서 참조된 오브젝트들의 파이널라이저의 실행이 주문된다.
도 5의 데이터 구조(500)는 참조 포인터들에 의해 링크된 다수의 데이터 오브젝트들(510-570)을 포함한다. 데이터 오브젝트들(510,550,560)은 그들과 관련된 파이널라이저 방법을 갖는다. 프로그램 처리의 실행동안 포인트에서, 데이터 구조는 더 이상 필요하지 않으며, 도달 가능하지 않게 된다. 데이터 오브젝트들을 홀딩하는 메모리 힙이 주문되어 있지 않다는 사실 때문에, 스윕이 데이터 오브젝트들을 찾는 순서는 예측가능하지 않다. 데이터 오브젝트(560)이 510 전에 발견된다고 가정하면, 파이널라이저 큐의 순서는 560,510,550일 것이다. 이 순서는 데이터 오브젝트(560)이 데이터 오브젝트(510)의 파이널라이저로부터 도달 가능하게 됨에 따라 바람직하지 않으며, 그러므로 데이터 오브젝트(510)의 파이널라이저의 실행 동안 재생될 수 있으며, 그 고유의 파이널라이저를 실행할 필요성을 무효로 한다.
그러므로, 일단 전체 오브젝트들이 스윕에 의해 처리되면, 파이널라이저 큐는 파이널라이저의 위상적 실행을 제공하도록 주문된다. 브레드쓰 퍼스트(breadth-first) 탐색은 파이널라이저 큐에 참조된 각 오브젝트로부터 그의 디센던트에 까지 포인터들을 수행함으로써 실행된다. 파이널라이저 큐에서 초기에 참조된 다른 데이터 오브젝트가 큐에서 참조된 다른 데이터 오브젝트로부터 도달 가능하게 발견되면, 큐는 데이터 오브젝트가 그의 디센던트 전에 실행된 그의 파이널라이저를 갖지도록 다시 주문된다.
이러한 방법으로, 도 5의 파이널라이저의 큐는 510,560,550으로 다시 주문된다.
파이널라이저 큐에서 참조된 파이널라이즈 가능한 데이터 오브젝트들의 주문은 데이터 오브젝트들에 대한 참조값이 큐에 부가됨에 따라 대안적으로 이루어질 수 있고, 어디에 참조값을 삽입할지를 결정하기 위해 큐를 탐색한다.
상술한 실시예들에서, 이진 상태 변수(G)는 불필요 정보를 확인하기 위해 사용된다. 그러나, 멀티상태 변수가 바람직하게 사용될 수 있다. 예를 들면, 상태(A,B)가 사용될 수 있고, 양쪽은 불필요 정보인 오브젝트들을 확인한다. 한 스윕 단계상에서, 불필요 정보는 상태(A)로 마킹되지만, 삭제되지 않는다. 스윕 단계의 끝에서, 파이널라이즈 가능한 오브젝트들의 파이널라이저들이 실행된다. 다음 스윕 단계에서, 상태(B)는 불필요 정보를 마킹하기 위해 사용된다. 상태(B)로 오브젝트를 마킹할 때, 만일 그것이 상태(A)를 이미 갖는다면 그것은 불필요 정보 자체로 안전하게 삭제될 수 있고 파이널라이저에 의해 재생되지 않는다.
소프트웨어 브라우저 구체화에 의해 대체로 규정되었을지라도, 상술한 많은 기능적 특징들이 하드웨어내에서 또는 하드웨어와 소프트웨어의 조합에서 동일하게 잘 구체화될 수 있다는 것을 숙련된 독자라면 잘 이해할 것이다.
본 명세서를 읽음으로써, 종래 기술에 숙련된 사람들에게 다른 변형례들이 만들어질 것이다. 이와 같은 변형례들은 설계, 제조 및 데이터 처리 및/또는 데이터 네트워크 액세스 장치 및 디바이스들과 그의 구성 요소에서에서 이미 공지되어 있는 다른 특징들을 포함할 수 있고, 다른 특징들은 본 명세서에서 이미 설명된 특징들 대신 또는 그에 부가하여 사용될 수 있다.

Claims (11)

  1. 확인 포인터들에 의해 링크된 데이터 오브젝트들을 포함하는 데이터 구조들에 할당된 메모리 스페이스를 재사용하는 방법으로서,
    액티브 데이터 오브젝트들을 확인하고 마킹(mark)하기 위해 상기 데이터 구조들을 트래버싱(traverse)하는 단계와;
    이전 사이클 동안 불필요 정보(garbage)로서 마킹된 데이터 오브젝트들을 삭제하는 단계와;
    액티브(active)로서 마킹되지 않은 데이터 오브젝트들을 불필요 정보로서 마킹하는 단계; 및
    파이널라이저(finaliser)를 갖는 불필요 정보로서 마킹된 어떤 데이터 오브젝트의 파이널라이저를 실행하는 단계의 반복 사이클을 포함하는 메모리 스페이스 재사용 방법.
  2. 제 1 항에 있어서,
    상기 파이널라이저를 갖는 불필요 정보로서 마킹된 어떤 데이터 오브젝트의 파이널라이저를 실행하는 단계는 실행될 각 파이널라이저를 큐잉(queue)하고 각 큐잉된 파이널라이저를 차례로 실행하는 단계를 포함하고,
    상기 액티브 데이터 오브젝트들을 확인하고 마킹하기 위해 상기 데이터 구조들을 트래버싱하는 단계는 큐잉된 파이널라이저가 실행될 각 오브젝트의 데이터 구조를 트래버싱하고 오브젝트 및 그의 디센던트(descendant)들을 마킹하는 단계를 포함하는 메모리 스페이스 재사용 방법.
  3. 제 1 항 또는 제 2 항에 있어서,
    제 1 마크 및 제 2 마크는 오브젝트들을 불필요 정보로서 마킹하기 위해 다른 사이클에서 교대로 사용되고,
    현재 사이클에서 사용된 마크와는 다른 마크를 갖는 데이터 오브젝트들은 삭제되는 메모리 스페이스 재사용 방법.
  4. 제 1 항 내지 제 3 항중 어느 한 항에 있어서,
    실행 안된 파이널라이저들을 갖는 데이터 오브젝트들의 총계는 파이널라이저들을 갖는 액티브 데이터 구조들의 데이터 오브젝트들의 총계와 비교되고, 상기 총계들이 동일하면 액티브로서 마킹되지 않은 모든 오브젝트들은 삭제되는 메모리 스페이스 재사용 방법.
  5. 제 2 항에 있어서,
    실행을 위해 큐잉될 파이널라이저를 갖는 데이터 오브젝트에 대응하는 데이터 구조는 실행을 위해 큐잉될 파이널라이저를 갖는 데이터 구조의 다른 데이터 오브젝트를 발견하기 위해 처리되고, 상기 다른 데이터 오브젝트가 상기 데이터 구조의 어떤 계층(hierarchy)에서 더 높다면, 상기 파이널라이저는 다른 데이터 오브젝트용 파이널라이저 뒤에 실행을 위해 큐잉되고, 상기 데이터 오브젝트가 상기 다른 데이터 오브젝트보다 상기 데이터 구조의 어떤 계층에서 더 높다면, 상기 파이널라이저는 상기 다른 오브젝트용 파이널라이저 전에 실행을 위해 큐잉되는 메모리 스페이스 재사용 방법.
  6. 확인 포인터들에 의해 링크된 데이터 오브젝트들을 포함하는 데이터 구조를 포함하는 랜덤 액세스 메모리가 연결된 데이터 프로세서를 포함하는 데이터 처리 장치로서,
    액티브 데이터 오브젝트들을 확인하고 마킹하기 위해 상기 데이터 구조들을 트래버싱하는 수단과;
    이전 사이클 동안 불필요 정보로서 마킹된 데이터 오브젝트들을 삭제하는 수단과;
    액티브로서 마킹되지 않은 데이터 오브젝트들을 불필요 정보로서 마킹하는 수단; 및
    파이널라이저를 갖는 불필요 정보로서 마킹된 어떤 데이터 오브젝트의 파이널라이저를 실행하는 수단을, 저장된 복수의 데이터 오브젝트들상에 동작하기 위한 반복 사이클에서 제공하도록 구성되는 데이터 처리 장치.
  7. 제 6 항에 있어서,
    상기 파이널라이저를 갖는 불필요 정보로서 마킹된 어떤 데이터 오브젝트의 파이널라이저를 실행하는 수단은 실행될 각 파이널라이저를 큐잉(queue)하고 각 큐잉된 파이널라이저를 차례로 실행하는 수단을 포함하고,
    상기 액티브 데이터 오브젝트들을 확인하고 마킹하기 위해 상기 데이터 구조들을 트래버싱하는 수단은 큐잉된 파이널라이저가 실행될 각 오브젝트의 데이터 구조를 트래버싱하고 오브젝트 및 그의 디센던트(descendant)들을 마킹하는 수단을 포함하는 데이터 처리 장치.
  8. 제 6 항 또는 제 7 항에 있어서,
    제 1 마크 및 제 2 마크는 오브젝트들을 불필요 정보로서 마킹하기 위해 다른 사이클에서 교대로 사용되고,
    현재 사이클에서 사용된 마크와는 다른 마크를 갖는 데이터 오브젝트들은 삭제되는 데이터 처리 장치.
  9. 제 6 항 내지 제 8 항중 어느 한 항에 있어서,
    실행 안된 파이널라이저들을 갖는 데이터 오브젝트들의 총계를 얻는 수단과,상기 총계를 파이널라이저들을 갖는 액티브 데이터 구조들의 데이터 오브젝트들의 총계와 비교하고 상기 총계들이 동일하면 액티브로서 마킹되지 않은 모든 오브젝트들을 삭제하는 수단을 포함하는 데이터 처리 장치.
  10. 제 7 항에 있어서,
    실행을 위해 큐잉될 파이널라이저를 갖는 데이터 오브젝트에 대응하는 데이터 구조를 처리하여 실행을 위해 큐잉될 파이널라이저를 갖는 데이터 구조의 다른 데이터 오브젝트를 발견하는 수단과, 상기 큐(queue)에서 상기 파이널라이저를 삽입하는 수단을 포함하고;
    상기 다른 데이터 오브젝트가 상기 데이터 구조의 어떤 계층에서 더 높다면, 상기 파이널라이저는 다른 데이터 오브젝트용 파이널라이저 뒤에 삽입되고, 상기 데이터 오브젝트가 상기 다른 데이터 오브젝트보다 상기 데이터 구조의 어떤 계층에서 더 높다면, 상기 파이널라이저는 상기 다른 오브젝트용 파이널라이저 전에 삽입되는 데이터 처리 장치.
  11. 제 1 항 내지 제 5 항중 어느 한 항에 지정된 방법 단계를 실행하기 위한 하나 이상의 프로그램 명령을 부호화하며 장치에 의해 판독 가능한 프로그램 저장 디바이스.
KR1020007013526A 1999-03-31 2000-03-09 메모리 재사용 방법 KR100715638B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GBGB9907283.7A GB9907283D0 (en) 1999-03-31 1999-03-31 Memory reclamation method
GB9907283.7 1999-03-31

Publications (2)

Publication Number Publication Date
KR20010025112A true KR20010025112A (ko) 2001-03-26
KR100715638B1 KR100715638B1 (ko) 2007-05-08

Family

ID=10850625

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020007013526A KR100715638B1 (ko) 1999-03-31 2000-03-09 메모리 재사용 방법

Country Status (9)

Country Link
US (1) US6571260B1 (ko)
EP (1) EP1084472B1 (ko)
JP (1) JP2002541552A (ko)
KR (1) KR100715638B1 (ko)
BR (1) BR0006010A (ko)
DE (1) DE60032694T2 (ko)
GB (1) GB9907283D0 (ko)
IL (1) IL139985A (ko)
WO (1) WO2000060470A1 (ko)

Families Citing this family (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
IL151740A0 (en) * 2000-03-24 2003-04-10 Ibm Method and apparatus for distinguishing reachable objects and non-reachable objects in an object-based application
US6823351B1 (en) * 2000-05-15 2004-11-23 Sun Microsystems, Inc. Work-stealing queues for parallel garbage collection
US7082597B2 (en) 2001-06-20 2006-07-25 Sun Microsystems, Inc. Representation of objects in a Java programming environment
US7103887B2 (en) * 2001-06-27 2006-09-05 Sun Microsystems, Inc. Load-balancing queues employing LIFO/FIFO work stealing
US6934741B2 (en) * 2001-06-27 2005-08-23 Sun Microsystems, Inc. Globally distributed load balancing
US7036120B2 (en) * 2001-07-31 2006-04-25 Sun Microsystems, Inc. Two tier clusters for representation of objects in Java programming environments
US7155509B1 (en) * 2002-02-26 2006-12-26 Bellsouth Intellectual Property Corp. System and method for reliably purging a fault server
EP1387253B1 (en) * 2002-07-31 2017-09-20 Texas Instruments Incorporated Dynamic translation and execution of instructions within a processor
EP1387273B1 (en) * 2002-07-31 2010-07-21 Texas Instruments Incorporated Conditional garbage collection based on monitoring to improve real time performance
EP1387252B1 (en) * 2002-07-31 2019-02-13 Texas Instruments Incorporated Instruction prefix to indicate system commands
EP1387254B1 (en) * 2002-07-31 2012-12-12 Texas Instruments Incorporated Skip instruction carrying out a test with immediate value
EP1391820A3 (en) * 2002-07-31 2007-12-19 Texas Instruments Incorporated Concurrent task execution in a multi-processor, single operating system environment
EP1503291B1 (en) * 2003-07-30 2009-07-15 Texas Instruments Incorporated Reformat logic to reformat a memory access to a device
EP1387251B1 (en) * 2002-07-31 2017-09-06 Texas Instruments Incorporated Instruction for copying data of a stack storage
EP1387248B1 (en) 2002-07-31 2017-08-16 Texas Instruments Inc. A processor with a split stack
US20040024969A1 (en) * 2002-07-31 2004-02-05 Texas Instruments Incorporated Methods and apparatuses for managing memory
EP1387247A3 (en) * 2002-07-31 2007-12-12 Texas Instruments Inc. System and method to automatically stack and unstack java local variables
EP1387255B1 (en) * 2002-07-31 2020-04-08 Texas Instruments Incorporated Test and skip processor instruction having at least one register operand
EP1387274A3 (en) * 2002-07-31 2004-08-11 Texas Instruments Incorporated Memory management for local variables
EP1387258A3 (en) * 2002-07-31 2008-01-02 Texas Instruments Incorporated Processor-processor synchronization
EP1387279B1 (en) * 2002-07-31 2008-05-14 Texas Instruments Inc. Cache coherency in a multi-processor system
EP1387250B8 (en) * 2002-07-31 2012-02-29 Texas Instruments Inc. Processor that accomodates multiple instruction sets and multiple decode modes
EP1387277B1 (en) * 2002-07-31 2009-07-15 Texas Instruments Incorporated Write back policy for memory
EP1387275B1 (en) * 2002-07-31 2009-06-17 Texas Instruments Inc. Memory management of local variables upon a change of context
EP1391821A3 (en) * 2002-07-31 2007-06-06 Texas Instruments Inc. A multi processor computing system having a java stack machine and a risc based processor
EP1387249B1 (en) * 2002-07-31 2019-03-13 Texas Instruments Incorporated RISC processor having a stack and register architecture
EP1387259B1 (en) 2002-07-31 2017-09-20 Texas Instruments Incorporated Inter-processor control
EP1387278A3 (en) * 2002-07-31 2005-03-23 Texas Instruments Inc. Methods and apparatuses for managing memory
US7631593B2 (en) * 2002-07-31 2009-12-15 Food Equipment Technologies Company, Inc. Food processing apparatus with auto-directive controller and method
EP1387256B1 (en) * 2002-07-31 2018-11-21 Texas Instruments Incorporated Program counter adjustment based on the detection of an instruction prefix
EP1387257B1 (en) * 2002-07-31 2017-08-23 Texas Instruments Inc. System to dispatch multiple instructions to available hardware resources
US7827212B2 (en) * 2003-05-22 2010-11-02 International Business Machines Corporation System and method for improved clearing of JAVA object's variables
DE60318993T2 (de) * 2003-06-19 2009-01-29 Texas Instruments Inc., Dallas Eingebettete Speicherbereinigung
US7032126B2 (en) * 2003-07-08 2006-04-18 Softek Storage Solutions Corporation Method and apparatus for creating a storage pool by dynamically mapping replication schema to provisioned storage volumes
US7321908B2 (en) * 2003-07-23 2008-01-22 International Business Machines Corporational Mostly concurrent garbage collection
US20060106880A1 (en) * 2004-11-18 2006-05-18 Jeffrey Wang Managing free space in file systems
US7313566B1 (en) * 2004-12-23 2007-12-25 Sun Microsystems, Inc. Method and apparatus for isolating selected heap objects using a faulting address trap
US9454536B1 (en) 2006-09-28 2016-09-27 Emc Corporation Space compaction and defragmentation mechanisms in data space
US7756831B1 (en) * 2006-09-28 2010-07-13 Emc Corporation Cooperative locking between multiple independent owners of data space
US8862639B1 (en) * 2006-09-28 2014-10-14 Emc Corporation Locking allocated data space
US8533158B1 (en) 2006-09-28 2013-09-10 Emc Corporation Reclaiming data space by rewriting metadata
US7526623B1 (en) * 2006-09-28 2009-04-28 Emc Corporation Optimizing reclamation of data space
US7647466B1 (en) * 2006-09-28 2010-01-12 Emc Corporation Linear space allocation mechanisms in data space
US7783681B1 (en) * 2006-12-15 2010-08-24 Oracle America, Inc. Method and system for pre-marking objects for concurrent garbage collection
US8224874B2 (en) * 2010-01-05 2012-07-17 Symantec Corporation Systems and methods for removing unreferenced data segments from deduplicated data systems
US8224875B1 (en) * 2010-01-05 2012-07-17 Symantec Corporation Systems and methods for removing unreferenced data segments from deduplicated data systems
US9251184B2 (en) * 2011-01-07 2016-02-02 International Business Machines Corporation Processing of destructive schema changes in database management systems
GB2502076A (en) 2012-05-15 2013-11-20 Ibm Managing memory in a computer system
US9489293B2 (en) * 2012-08-17 2016-11-08 Netapp, Inc. Techniques for opportunistic data storage

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4914586A (en) * 1987-11-06 1990-04-03 Xerox Corporation Garbage collector for hypermedia systems
NL9001262A (nl) * 1990-06-05 1992-01-02 Oce Nederland Bv Werkwijze voor het in een logisch georganiseerd systeem, van door digrafen te representeren groepen van met elkaar in relatie staande entiteiten, distribueren van status-informatie betreffende een digraaf en een inrichting voor het toepassen van een dergelijke werkwijze.
US5392432A (en) * 1991-08-27 1995-02-21 At&T Corp. Method for automatic system resource reclamation for object-oriented systems with real-time constraints
US5274804A (en) * 1991-11-20 1993-12-28 Parcplace Systems Automatic storage-reclamation postmortem finalization process
US5577246A (en) * 1992-09-25 1996-11-19 Lucent Technologies Inc. Database memory compaction and reclamation method
US5544320A (en) * 1993-01-08 1996-08-06 Konrad; Allan M. Remote information service access system based on a client-server-service model
US6029195A (en) * 1994-11-29 2000-02-22 Herz; Frederick S. M. System for customized electronic identification of desirable objects
US5758257A (en) * 1994-11-29 1998-05-26 Herz; Frederick System and method for scheduling broadcast of and access to video programs and other data using customer profiles
JP2888164B2 (ja) * 1995-04-03 1999-05-10 ヤマハ株式会社 自動伴奏データの処理方法および自動伴奏装置
US5812134A (en) * 1996-03-28 1998-09-22 Critical Thought, Inc. User interface navigational system & method for interactive representation of information contained within a database
US5675382A (en) * 1996-04-08 1997-10-07 Connectix Corporation Spatial compression and decompression for video
US6332129B1 (en) * 1996-09-04 2001-12-18 Priceline.Com Incorporated Method and system for utilizing a psychographic questionnaire in a buyer-driven commerce system
US5974398A (en) * 1997-04-11 1999-10-26 At&T Corp. Method and apparatus enabling valuation of user access of advertising carried by interactive information and entertainment services
US6049779A (en) * 1998-04-06 2000-04-11 Berkson; Stephen P. Call center incentive system and method
US6098080A (en) * 1998-05-05 2000-08-01 International Business Machines Corporation Computer system, program product and method of collecting interned data with a mark sweep collector
GB9813264D0 (en) * 1998-06-20 1998-08-19 Koninkl Philips Electronics Nv Finalisation in incremental garbage collection
US6463432B1 (en) * 1998-08-03 2002-10-08 Minolta Co., Ltd. Apparatus for and method of retrieving images
US6327594B1 (en) * 1999-01-29 2001-12-04 International Business Machines Corporation Methods for shared data management in a pervasive computing environment

Also Published As

Publication number Publication date
JP2002541552A (ja) 2002-12-03
GB9907283D0 (en) 1999-05-26
WO2000060470A1 (en) 2000-10-12
DE60032694D1 (de) 2007-02-15
US6571260B1 (en) 2003-05-27
EP1084472A1 (en) 2001-03-21
BR0006010A (pt) 2001-03-06
DE60032694T2 (de) 2007-10-11
IL139985A0 (en) 2002-02-10
IL139985A (en) 2005-08-31
EP1084472B1 (en) 2007-01-03
KR100715638B1 (ko) 2007-05-08

Similar Documents

Publication Publication Date Title
KR100715638B1 (ko) 메모리 재사용 방법
US6393439B1 (en) Stored data object marking for garbage collectors
US6314436B1 (en) Space-limited marking structure for tracing garbage collectors
US7308466B2 (en) Memory reclamation method
KR100541174B1 (ko) 로컬화된 메모리 재이용을 가진 데이터 처리기
US9116798B2 (en) Optimized memory management for class metadata
US6338073B1 (en) Finalization in incremental garbage collectors
US6502110B1 (en) Memory reclamation method and apparatus
US20090228537A1 (en) Object Allocation System and Method
Armstrong et al. One pass real-time generational mark-sweep garbage collection
JP2004295889A (ja) データ処理システム内での処理タスクの実行を制御する方法および装置
US7058781B2 (en) Parallel card table scanning and updating
Moreau et al. Gc2: a generational conservative garbage collector for the ATerm library
Schatzl et al. Optimized memory management for class metadata in a JVM
Kazempour Garbage Collection in Object-Oriented Languages Dennis P. Smithers
Colnet et al. Using Type Inference to Customize the Garbage Collector in an Object-Oriented Language. The Smalleiffel Compiler
Stefan et al. Region-based Memory for CLI

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
LAPS Lapse due to unpaid annual fee