KR20010020494A - 일부 재배치된 오브젝트의 인스턴스와 연관된 판독 및기록 배리어를 포함하는 바운드된 정지 시간 가비지 영역수집 시스템 및 방법 - Google Patents

일부 재배치된 오브젝트의 인스턴스와 연관된 판독 및기록 배리어를 포함하는 바운드된 정지 시간 가비지 영역수집 시스템 및 방법 Download PDF

Info

Publication number
KR20010020494A
KR20010020494A KR1019997012181A KR19997012181A KR20010020494A KR 20010020494 A KR20010020494 A KR 20010020494A KR 1019997012181 A KR1019997012181 A KR 1019997012181A KR 19997012181 A KR19997012181 A KR 19997012181A KR 20010020494 A KR20010020494 A KR 20010020494A
Authority
KR
South Korea
Prior art keywords
instance
storage
access
barrier
memory
Prior art date
Application number
KR1019997012181A
Other languages
English (en)
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
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=25381360&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=KR20010020494(A) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by 선 마이크로시스템즈 인코포레이티드 filed Critical 선 마이크로시스템즈 인코포레이티드
Publication of KR20010020494A publication Critical patent/KR20010020494A/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
    • 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
    • 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

본 발명은 일부 재배치된 오브젝트의 인스턴스와 연관된 판독 및 기록 배리어를 포함하는 바운드된 정지 시간 가비지 수집 시스템 및 방법에 관한 것으로서, 기록 및 판독 배리어 논리에 액세스할 수 있는 "copy from" 및 "copy to" 식별자 저장부를 포함하는 일부 재배치된 오브젝트 식별자 저장부는 기록 및 판독 배리어 논리가 메모리 오브젝트의 일부 재배치 상태에 따라, 일부 재배치된 메모리 오브젝트의 적절한 FromSpace 또는 ToSpace 인스턴스에 대한 저장지향 및 적재지향 액세스를 선택적으로 다이렉트하게 하고, 어떤 실시예에서는, 상기 배리어가 일부 재배치된 오브젝트 트랩 핸들러에 트랩하고, 다른 실시예에서, 상기 기록 배리어는 소프트 핸들러 트랩 오버해드없는 액세스를 다이렉트하고, 선택적인 "how far" 지시 저장장치는 배리어 논리에 의해, 또는 상기 부분적으로 재배치된 오브젝트 트랩 핸들러에 의해, 상기 부분적으로 재배치된 메모리 오브젝트의 카피된 부분과 카피되지 않은 부분의 구별을 용이하게 하는 것을 특징으로 한다.

Description

일부 재배치된 오브젝트의 인스턴스와 연관된 판독 및 기록 배리어를 포함하는 바운드된 정지 시간 가비지 영역 수집 시스템 및 방법{BOUNDED-PAUSE TIME GARBAGE COLLECTION SYSTEM AND METHOD INCLUDING READ AND WRITE BARRIERS ASSOCIATED WITH AN INSTANCE OF A PARTIALLY RELOCATED OBJECT}
종래에는, 메모리의 동적할당 및 할당해제는 대부분의 프로그래핑 언어들로 행해졌다. 예를 들어, C프로그래밍 언어에서 메모리는 말록(malloc) 처리(또는 변수)에 의해 히프(heap)로부터 할당된다. 포인터 변수(pointer variable; p)가 주어져, 선언문 p=malloc(sizeof(SomeStruct))에 해당하는 머신의 명령 실행은 포인터 변수 p가 SomeStruct 데이터 구조를 나타내기 위해 필요한 크기의 메모리 오브젝트를 위하여 새롭게 할당된 저장장치(storage)를 지시하도록 한다. 사용후에, 지시 변수 p에 의해 식별된 메모리 오브젝트는 free(p)를 호출하므로써 할당해제되거나 또는 자유롭게 될 수 있다. 파스칼 및 C++ 언어는 메모리의 뚜렷한 할당 및 할당해제를 위한 유사한 기능을 제공한다.
불행하게도, 만약 저장장치에 대한 어떤 참조 또는 포인터가 임의의 연산을 위한 루트 참조 배치의 세트에 남아 있지 않다면, 동적으로 할당된 저장장치는 접근가능(reachable) 할 수 있다. 더 이상 접근가능할 수 없으며, 자유롭지도 않은 메모리 오브젝트(memory object)를 가비지(garbage)라 지칭한다. 유사하게, 메모리 오브젝트와 연관된 저장장치는 참조되는 동안 할당해제될 수 있다. 이러한 경우에, 댕글링 참조(dangling reference)가 생성된다. 일반적으로 동적 메모리는 정확하게 관리하기가 어려울 수 있다. 대부분의 프로그래밍 언어들에서, 히프 할당은 데이터구조를 생성하는 처리를 유지하기 위하여 요구된다. 이러한 데이터 구조가 또 다른 처리 또는 기능을 통과할 때, 프로그래머 또는 컴플라이어가 데이터 구조를 할당해제하기에 안전한 지점을 결정하는 것이 어렵거나 또는 불가능하다.
이러한 어려움으로 인해, 가비지 수집, 즉 프로그램에 의해 마지막으로 사용된 후, 히프-할당된 저장장치의 자동 재생은 동적 메모리 관리의 매력적인 또다른 모델이다. 가비지 수집은 JAVATM언어(JAVA는 Sun Microsystems, Inc.의 상표명이다), Prolog, Lisp, Smalltalk, Scheme, Eiffel, Dylan, ML, Haskell, Miranda, Oberon 등과 같은 데이터 공유, 지연 실행 및 처리 언어보다 덜 예측가능한 실행 명령을 나타내는 기능 언어용으로 매력적이다. 가비지 수집 및 그들을 위한 고전적 알고리즘에 대하여, 존스와 린스(Jones & Lins)에 의한, Garbage Collection: Algorithms for Automatic Dynamic Memory Management, pp. 1-41, Wiley(1996)를 참조한다.
세 개의 고전적인 가비지 수집 방법은 참조 카운팅(reference counting), 마크-스윕(mark-sweep) 및 카핑 저장 재생(copying storage reclamation) 방법이다. 첫째로 참조 카운팅 방법은 액티브 메모리 오브젝트 또는 루트 참조 배치로부터 각각의 메모리 오브젝트로의 참조수(예를 들어 포인터 수)의 카운트를 유지하는데 근거를 두고 있다. 새로운 메모리 오브젝트가 할당되고, 거기로 포인터가 배분될 때, 메모리 오브젝트의 참조 카운터는 하나로 설정된다. 그런 후, 포인터가 메모리 오브젝트로 참조하도록 설정될때마다, 메모리 오브젝트의 참조 카운트는 증분된다. 메모리 오브젝트에 대한 참조가 삭제되거나 또는 과기록될 때, 참조 카운트는 감소된다. 제로의 참조 카운트를 갖는 메모리 오브젝트는 접근이 불가능하며, 가비지로 수집될 수 있다. 참조수 카운팅 가비지 수집기 실행은 전형적으로 부가적 필드, 즉, 참조수 카운트를 각각의 메모리 오브젝트에 포함하고 있으며, 새로운 오브젝트, 삭제 오브젝트의 부분으로서 증가 및 감소 지원부 및 업데이트 포인터 기능을 포함하고 있다.
대조적으로, 트레이싱 수집기 방법은 유효한, 즉, 참조가능한 메모리 오브젝트를 식별하기 위해 메모리를 통해 참조 체인을 트래버스(traverse)하는 법을 포함하고 있다. 그러한 트레이싱 수집기 방법의 일례는 메모리를 통한 참조 체인이 유효한 메모리 오브젝트를 식별하고, 마크(mark)하기 위해 트래버스되는 마크-스윕 방법이다. 마크되지 않은 메모리 오브젝트는 가비지로서 수집되고, 분리된 스윕 단계 동안 프리 풀(free pool)로 되돌아간다. 마크 스윕 가비지 수집기 실행은 전형적으로 부가적 필드, 즉, 마크 비트(mark bit)를 각 메모리 오브젝트에 포함하고 있다. 마크 압축(mark-compact)수집기는 압축성(compaction)을 종래의 마크-스윕 방법에 포함시킨다. 컴팩션은 단편화(fragmentation)에 있어서, 유리한 감소를 달성하도록 유효 오브젝트를 재배치한다. 또한, 참조수 카운트 방법도 압축성을 포함할 수 있다.
또다른 트레이싱 방법인 카핑 수집(copying collection)은 메모리(또는 메모리의 일부분)를 두 개의 세미스페이스, 즉, 하나는 현재의 데이터를 포함하고, 다른 하나는 과거의 데이터를 포함한 세미스페이스로 분할한다. 카핑 가비지 수집은 두 개의 세미스페이스의 역할을 역전시킴으로써 시작한다. 그런 후, 카핑 수집기는 접근 가능한 오브젝트를 카핑한 오래된 세미스페이스인 "FromSpace"에서 새로운 세미스페이스인 "ToSpace"로 유효 오브젝트를 트래버스시킨다. FromSpace 내의 모든 라이브 오브젝트를 트래버스하고 카피한 후에 , 데이터 구조의 카핑은 ToSpace에 존재하게 된다. 본질적으로, 카핑 수집기는 가비지로부터 유효 오브젝트를 찾는다. 카핑 수집의 유효한 효과는 유효 오브젝트가 ToSpace로 압축되어, 단편화를 방지한다는 점이다.
세대별 접근(generational approaches)은 (1) 메모리 오브젝트가 전형적으로 일찍 소멸하고, (2) 트레이싱 방법이 비교적 오랜 수명의 오브젝트를 트래버스시키고, 카핑하거나 또는 재배치시켜서 많은 자원을 소모한다는 사실에 주목함으로써 접근할 수 있다. 세대별 가비지 수집 구성은 히프를, 연대별로 오브젝트를 분리하는 두 개 이상의 세대로 분할하고, 더 어린 세대에 대한 수집 노력(또는 적어도 더욱 활발한 수집 노력)을 집중시킨다. 가장 어린 세대가 작기 때문에, 정지 시간(pause time)과 연관된 가비지 수집은 평균적으로 짧게 유지될 수 있다. 세대내의 가지비 수집은 카핑 또는 마크 스윕 수집에 의해 이루어질 수 있다. 어린 세대로부터 나이든 세대까지의 메모리 오브젝트의 증진은 전형적으로 카핑을 포함하고 있다.
대형 오브젝트의 카핑 비용으로 인해, 몇몇 세대별 접근은 대형 오브젝트 영역에 포함된다. 운가 및 잭슨(Ungar and Jackson)에 의한, Tenuring Policies for Generation-based Storage Reclamation, ACM SIGPLAN Notices, 23(11), pp. 1-17(1988); 운가 및 잭슨에 의한, An Adaptive Tenuring Policy for Generation Scavengers, ACM Transactions on Programming Languages and Systems, 14(1), pp. 1-17(1992)를 참조하라. 통상, 이러한 기술은 대형 오브젝트를 히프의 세대별 부분에 저장된 헤더부(header portion) 및 대형 오브젝트 영역에 저장된 보디부(body portion)로 분리한다. 헤더부는 다른 오브젝트처럼 이용되지만, 자원은 보디부를 카피할 만큼 확장되지 않는다. 운가 및 잭슨은, 330킬로바이트를 대형 오브젝트로 배분하므로써 정지시간을 4인자만큼 감소시킬 수 있었다.
대화식 또는 실시간 애플리케이션에서는, 가비지 수집 정지의 단축이 중요한 장점이다. 트레이싱 가비지 수집기의 통상적 구현은 더 이상 사용되지 않는 메모리 영역을 찾아 메모리를 운행시키기 위해 애플리케이션 프로그램의 실행은 주기적으로 방해한다. 공교롭게도, 엄격한 실시간 시스템은 정기적으로 연산될 결과를 최악의 상황에서도 보장받기를 요구한다. 대화식 시스템에서 조차도, 정지 시간은 한정되고 짧아야 한다. 소위 증분 가비지 수집 방법은 시작 및 정지 재생에 기인한 오랜 중단을 피하고, 그 대신에 애플리케이션 프로그램 싸이클과 함께 수집 삽입 방법이 시도되었다. 이러한 목표를 달성하기 위해, 증분 수집기는 수집기 및 애플리케에션 프로그램(뮤테이터로 지칭됨)에 의해 히프 액세스를 간섭적으로 관리한다. 동시에 사용되는 수집기들, 예를 들어 멀티프로세서내의 수집기들도, 비록 좀 더 엄격하고 정밀한 동시성이 요구되기는 하나 비슷하다.
통상, 대화식 또는 동시 사용 재배치 수집기들은 다중판독기, 다중기록기 동기화 문제가 있다. 판독 및 기록 배리어(barrier) 방법은 수집기의 운행을 방해하는 식으로 뮤테이터가 그래프를 참조하는 메모리 오브젝트의 접속성을 변경함으로써 가비지 수집을 방해하는 것을 방지하도록 사용된다. 스틸(Steele)에 의한, Multiprocessing Compactifying Garbage Collection, Communications of the ACM, 18(9), pp. 495-508 (1975)(기록 배리어, 마크 스윕 압축 수집기); 디즈스트라(Dijkstra et al.) 등에 의한, On-the-fly Garbage Collection: An Exercise in Cooperation, Communications of the ACM, 21(11), pp. 965-975 (1978)(기록 배리어); 쿵 및 송(Kung & Song)에 의한, An Efficient Parallel Garbage Collection System and its Correction Proof, IEEE Symposium on Foundations of Computer Science, pp. 120-131 (1997) (기록 배리어); 베이커(Baker)에 의한, List Processing in Real-Time on a Serial Computer, Communications of the ACM, 21(4), pp. 280-93 (1978) (판독 배리어, 카핑 수집기); 브룩스(Brooks)에 의한, Trading Data Space for Reduced Time and Code Space in Real-Time Garbage Collection on Stock Hardware, in Conference Record of the 1984 ACM Symposium on Lisp and Functional Programming, Austin, Texas, pp. 256-62 (1984) (기록 배리어, 카핑 수집기); 및 다우슨(Dawson)에 의한, Improved Effectiveness from a Real-Time Lisp Garbage Collector, Conference Record of 1992 ACM Symposium on Lisp and Functional Programming, Sanfransisco, California, pp. 159-67 (1982) (기록 배리어, 카핑 수집기)를 참조하라.
하드웨어 판독 배리어 및 기록 배리어가 제공된 심볼릭 3600은 베이커형 카핑 수집기와 트래핑 상호세대별 포인터 저장에 대하여 지원한다. 문(Moon)에 의한, Architecture of the Symbolic 3600, Proceeding of the 12th Annual International Symposium on Computer Architecture, pp. 76-83 (1985)를 참조한다. MIT 리스트(Lisp) 머신 및 T1 익스플로러는 또한 베이커형 카핑 수집기를 지원하는 하드웨어 판독 배리어가 제공된다. 닐센 및 슈미트는 미국 특허5,560,003에서 하드웨어 판독 및 기록 배리어를 구현하는 가비지 수집된 메모리 모듈을 설명한다.
수집기의 운행을 방해하는 방식으로 메모리 오브젝트 참조 그래프의 접속성의 변경을 방지하도록 뮤테이터 액세스를 관리하는 기본적인 도전에 더하여, 바운드된 정지 시간 재배치 수집기는 대형 메모리 오브젝트 및/또는 보급형 메모리 오브젝트를 재배치하는데 요구되는 실제 기간을 어드레서하여야 한다. 메모리 오브젝트가 비재배치법(Ungar and Jackson, Tenuring Policies for Generation-based Storage Reclamation, ACM SIGPLAN Notices, 23 (11), pp. 1-17 (1988))에 의해 수집되거나 수집되지 않을 수도 있는 대형 오브젝트 영역으로 바운드 간격과 양립하는 대형 오브젝트를 분류함으로써, 바운드된 간격내에서 완전히 재배치될 수 있는 것을 가비지 수집기가 보장한다. 그러나, 레이지(lazy) 혹은 증분 카핑법이 바람직하다.
베이커의 해결책은 대형 오브젝트의 헤더(header)내에 부가적인 링크 워드를 포함하는 것이다. 오브젝트의 FromSpace 인스턴스에서, 링크 워드는 오브젝트의 ToSpace 인스턴스에서, 링크 워드는 오브젝트의 FromSpace 인스턴스로 역방향 링크를 저장한다. 순방향 및 역방향 링크가 세트된 후, 오브젝트는 증분 카피된다. 작은 오브젝트에서와 같이, 대형 오브젝트의 필드가 카피되고 아직 카피되어 있지 않은 FromSpace 오브젝트로 포인터를 되돌리기 위해서 스캔된다. 베이커는 일부 카피된 대형 오브젝트에 대한 판독 액세스를 조정하기 위해서, 가비지 수집 변수인 스캔(scan)에 의해 정의된 스캔/언스캔 경계를 사용하였다. 베이커의 설계비는, 부가적인 헤더 워드와는 별개로, 대형 오브젝트의 ToSpace 인스턴스로의 기록들에 대한 소프트웨어 기록-배리어였다. 만약 어드레스가 scan 보다 크다면, 기록은 역방향 링크를 사용하는 OldSpace 인스턴스에서 행해진다. 그렇지 않다면, 기록은 NewSpace 인스턴스에서 행해진다.
닐센 및 쉬미트는 베이커의 카피 수집기를 기초로하여 하드웨어 해결책을 제시하였다. 특히, 닐센 및 쉬미트는, 하드웨어 판독-배리어가 수집이 완료된 일루션(illusion)을 유지하는 가비지 수집 메모리 모듈을 제공하였다. 가비지 수집된 메모리 모듈내의 하드웨어 조정자는 하드웨어 베이커형 판독-배리어를 제공하고, 또한 추가적으로 ToSpace 내의 아직 오브젝트의 카피되지 않은 부분으로의 액세스에 대한 판독 및 기록 배리어를 제공한다. 가비지 수집된 메모리 모듈은 카피되지 않은 영역의 처음과 끝을 표시하기 위해서 메모리 에드레스 레지스터를 유지한다. 카피되지 않은 영역에 접근하는 판독 및 기록은 FromSpace 인스턴스 영역으로 명령한다.
발명의 요약
따라서, 일부 재배치된 대형 및/또는 보통의 메모리 오브젝트로의 저장에 대한 기록 배리어와 그것으로부터의 로드에 대한 판독 배리어는 재배치 가비지 수집기, 예를 들어, 카핑 수집기, 세대별 수집기 및 압축을 제동하는 수집기를 포함하는 바운드된 정지 시간 구현을 용이하게 한다. 일부 재배치된 오브젝트 식별자 저장장치와 거기에 응답하는 기록 배리어는 가비지 수집기구현에 의한 대형 혹은 보통의 메모리 오브젝트의 재배치를 중단하도록 하여 뮤테이터 프로세스에 대한 바운드된 정지 시간을 보증하게 한다. 특히, 그러한 배열은 오버랩핑된 소스 및 타겟 인스턴스를 지원하는 동안에 증분 오브젝트 카핑 및 포인터의 증분 업데이터를 용이하게 한다.
기록 및 판독 배리어 논리에 액세스할 수 있는 "카피-프롬" 및 "카피-투" 식별자 저장장치를 포함하는 일부 재배치된 오브젝트 식별자 저장부는 메모리 오브젝트의 일부 재배치된 상태에 따라 일부 재배치된 메모리 오브젝트의 적절한 FromSpace 및 ToSpace 인스턴스에 액세스기록 및 판독 배리어 논리가 선택적으로 다이렉트 저장액세스 및 로드-오리엔트 액세스되게 한다. 어떤 실시예에서, 배리어는 일부 재배치된 오브젝트 트랩 핸들러에 트랩한다. 다른 실시예에서, 기록 배리어는 소프트웨어 트랩 핸들러 오버헤드없이 그 자체가 액세스를 다이렉트한다. 옵션으로 "how far" 지시 저장장치는, 일부 재배치된 메모리 오브젝트의 카피부 및 카피되지 않은 부분 사이에서, 기록 배리어 논리에 의해서 혹은 일부 재배치된 오브젝트 트랩 핸들러에 의한 구별을 용이하게 한다. 임의의 실시예에서는 일부 재배치된 오브젝트의 카피부 및 카피되지 않은 부분사이의 차이를 구별하지 않기도 한다. 더욱이, 비록 유리하게 기록 배리어로 액세스 할 수 있는 "카피-투"와 "카피-프롬" 식별자 저장장치는 기록 배리어 논리가 소프트웨어 크랩 핸들러 오버헤드없이 일부 재배치된 메모리 오브젝트의 FromSpace 및 ToSpace 사이에서 일관성을 유지할 수 있도록 한다고 할지라도, 임의의 실시예는 그런 소프트웨어 트랩 핸들러를 포함할 수도 있다. 기록 배리어 논리 및 일부 재배치된 오브젝트 트랩 핸들러 사이에서의 다양한 또다른 기능의 할당이 가능하며, 청구항의 범위에서 벗어나지 않는다.
본 발명은 가비지 수집에 관한 것으로, 특히 바운드된 정지 시간 가비지 수집을 용이하게 하기 위한 방법 및 장치에 관한 것이다.
본 발명은 첨부된 도면을 참조하여 더 잘 이해될 수 있으며, 다양한 목적과 특성 및 장점이 당업자에게는 자명하게 될 것이다.
도 1A 및 도 1B(총괄하여 도 1로서 언급함)는 본 발명에 따른 바운드된 정지 시간 가비지 수집기 구현에 대한 지원부를 포함하는 가상 머신 하드웨어 프로세서의 대표적인 일례의 블록 다이어그램,
도 2는 전형적인 JAVA 가상 머신 구현 하드웨어 프로세서(도 1 참조) 및 소프트웨어 구성요소를 포함하는 JAVA 애플리케이션 환경의 소프트웨어 및 하드웨어 구성요소간의 "조립"관계를 나타낸 도면,
도 3은 도 1의 하드웨어 프로세서에 추가 가능한 것을 도해한 도면,
도 4A 및 도 4B(총괄적으로 도 4로서 언급함)는 카피(copy)전에 카피 가비지 수집기용 세미스페이스(semispace) 메모리 조직에 따르는, 전형적인 메모리 오브젝트 참고 그래프 및 일부 재배치된 오브젝트 식별자 저장부의 일례를 나타낸 도면,
도 5는 FromSpace에서 ToSpace로 대혁 오브젝트를 카피하는 동안, 도 4의 세미스페이스 메모리 조직 및 일부 재배치된 오브젝트 식별자 저장부를 나타낸 도면,
도 6은 일부 재배치된 대형 오브젝트를 포함하는 수집된 메모리 영역의 FromSpace 및 ToSpace 부분에 대한 카피 수집기 프로세스 및 뮤테이터(mutator) 프로세서의 액세스를 나타낸 도면이고, 도 4 및 도 5의 일부 재배치된 오브젝트 식별자 저장부와 결합된 도 1의 하드웨어 프로세서의 저장부 배리어의 작동을 도해한 도면,
도 7은 일부 재배치된 오브젝트 및 그에 대한 트랩 핸들러의 카피-프롬 인스턴스(copy-from instance)로의 저장에 대한 배리어를 포함하는 바운드된 정지 시간 가비지 수집 시스템의 일례를 도시한 도면,
도 8은 일부 재배치된 오브젝트의 카피-프롬 인스턴스로의 저장에 대한 하드웨어 배리어 및 카피-프롬 및 카피-투 인스턴스(copy-to instance) 식별자를 갖는 일부 재배치된 오브젝트 식별자 저장부를 포함하는 유계 정지 시간 가비지 수집 시스템의 일례를 도시한 도면이며, 도 8의 실시예는 일부 재배치된 오브젝트의 카피-프롬 인스턴스 및 카피-투 인스턴스 양자로의 저장을 선택적으로 방송한다.
도 9는 일부 재배치된 오브젝트의 카피-프롬 인스턴스로의 저장에 대한 하드웨어 배리어를 포함하며, 카피-프롬 인스턴스 식별자, 카피-투 인스턴스 식별자 및 카피/카피되지 않은 것의 경계 식별자를 갖는 일부 재배치된 오브젝트 식별자 저장부를 포함하는 바운드된 정지 시간 가비지 수집 시스템의 일례를 도시한 도면이고, 도 9의 실시예는 증분 카피를 허용하기 위하여 일부 재배치된 오브젝트의 일부 재배치 상태에 의존하여 저장을 선택적으로 다이렉트하고 방송한다.
도 10은 일부 재배치된 오브젝트의 카피-프롬 및 카피-투 인스턴스로의 저장에 대한 배리어 및 카피-프롬 및 카피-투 인스턴스 식별자를 갖는 일부 재배치된 오브젝트 식별자 저장을 포함하는 바운드된 정지 시간 가비지 수집 시스템의 일례를 도시한 도면이고, 도 9의 실시예는 증분 카핑 및 증분 포인터 업데이트의 양자를 허용한다.
도 11은 일부 재배치된 오브젝트의 카피-프롬 및 카피-투 인스턴스로의 저장에 대한 배리어 및 카피-프롬 인스턴스 식별자, 카피-투 인스턴스 식별자, 카피/카피되지 않은 것의 경계 식별자, 또한 바운드된 수집 단계 지시기를 갖는 일부 재배치된 오브젝트 식별자 스토어를 포함하는 바운드된 정지 시간 가비지 수집 시스템의 일례를 도시한 도면이고, 도 11의 실시예는 증분 카핑 및 증분 포인터 업데이트의 양자를 허용하는 일부 재배치된 오브젝트의 일부 재배치 상태 및 바운드된 수집 단계에 의존하여 저장을 선택적으로 다이렉트하고 방송한다.
도 12는 일부 재배치된 오브젝트의 카피-프롬 인스턴스로부터의 적재와, 카피-프롬 인스턴스로의 저장에 대한 배리어를 포함하여, 카피-프롬 인스턴스 식별자, 바운드된 수집 단계 지시자, 및 일부 재배치된 트랩 핸들러를 갖는 일부 재배치된 오브젝트 식별자 저장부를 포함하는 바운드된 정지 시간 가비지 수집 시스템의 일례를 도시한 도면이고, 도 12의 실시예는 증분 카핑 및 증분 포인터 업데이트의 양자를 허용하도록 하며, 어떤 변화에서는 카피프롬 및 카피투를 오버랩하기 위하여 저장을 선택적으로 다이렉트하거나 방송하며, 적재를 선택적으로 리다이렉트한다.
도 13은 일부 재배치된 오브젝트의 카피-프롬 인스턴스로부터의 적재와, 카피-프롬 인스턴스로의 저장에 대한 배리어를 포함하고, 카피-프롬 인스턴스 식별자, 카피-투 인스턴스 식별자 및 가비지 수집 단계 지시자를 갖는 일부 재배치된 오브젝트 식별자 저장부를 포함하는 바운드된 정지 시간 가비지 수집 시스템의 일례를 도시한 도면이고, 도 13의 실시예는 증분 카핑 및 증분 포인터 업데이트의 양자를 허용하도록, 저장을 선택적으로 리다이렉트하거나 동보통신하며, 적재를 선택적으로 리다이렉트(redirect)한다.
도 14는 일부 재배치된 오브젝트의 카피-프롬 인스턴스로부터의 적재와, 카피-프롬 인스턴스로의 저장에 대한 배리어를 포함하며, 카피-프롬 인스턴스 식별자, 카피-투 인스턴스 식별자, 카피/카피되지 않은 것의 경계 식별자 및 가비지 수집 단계 지시자를 갖는 일부 재배치된 오브젝트 식별자 저장을 포함하는 바운드된 정지 시간 가비지 수집 시스템의 일례를 도시한 도면이고, 도 14의 실시예의 증분 카핑, 증분 포인터 업데이트 양자를 허용하기 위하여, 또한 카피-프롬 및 카피-투 인스턴스를 오버랩핑하도록 하기 위하여 저장을 선택적으로 리다이렉트하고, 적재를 선택적으로 리다이렉트한다.
도 15는 일부 재배치된 대형 오브젝트의 FromSpace 및 ToSpace부를 오버랩핑하는 바운드된 정지 시간 가비지 수집 시스템을 작동한 도면,
도 16은 본 발명의 실시예에 따르는 오브젝트 참조(objectref) 포멧을 도시한 도면,
도 17A는 본 발명의 실시예에 따르는 오브젝트 포멧을 도시한 도면,
도 17B는 본 발명의 실시예에 따르는 또다른 방법으로 핸들링된 오브젝트 포멧을 도시한 도면이다.
이하는 본 발명을 실행하기 위한 가장 바람직한 방법을 상세히 설명한다. 설명은 본 발명을 실증하도록 의도되었으며, 제한을 위해 채택되어서는 안된다.
재배치 가비지 수집기의 바운드된 정지 시간 구현을 위한 아키텍쳐 지원부는, 대형 및 보급형 메모리 오브젝트가 재배치되는 것으로부터(또는 그 곳으로), 배치를 식별하기 위한 저장장치를 포함한다. 여기에서 사용된 오브젝트는, 부분적으로 참조의 업데이트를 포함하는, 메모리 오브젝트 전체의 재배치(잠재적으로, 참조업데이트를 포함한다)가, 최악의 경우에, 가비지 수집기의 바운드된 정지시간을 보증하지 않는, 임의의 크기, 구조, 또는 내용(content)의 메모리 오브젝트이다. 본 발명에 따른 실시예에서는, 대형 오브젝트의 실제적 정의에 대한 보수성 경향의 정도 변화를 보여줄 것이다. 예를 들어, 어떤 실시예에서는 크기문턱(size threshold)을 채용할 수도 있고, 반면에 다른 실시예에서는 대형 오브젝트내에 참조계수를 포함하기도 한다. 그러나, 다른 실시예에서는 메모리 오브젝트 크기와는 상관없이 여기에서 설명된 아키텍쳐 지원부를 이용하기도 한다. 여기에서 사용된 보급형 오브젝트는, 참조의 업데이트를 포함하는 메모리 오브젝트의 재배치가, 최악의 경우에, 가비지 수집기 구현의 바운드된 정지 시간을 보증하지 못하는, 참조계수를 갖는 임의의 메모리 오브젝트이다. 위에서와 같이, 본 발명에 따른 실시예에서는, 보급형 오브젝트의 실제적 정의에 관한 보수성 경향의 정도 변화를 보여줄 것이다.
일반적으로, 본 발명에 따른 실시예에서는, 대형 오브젝트, 보급형 오브젝트, 대형 그리고 보급형 오브젝트, 모든 오브젝트(대형 및/또는 보급형 오브젝트를 포함하지만 그것이 제한되지는 않는다)등의 재배치를 위해 설명된 아키텍쳐 지원부를 사용할 수도 있다. 그런 아키텍쳐 지원부가 하드웨어에, 소프트웨어에, 또는 하드웨어와 소프트웨어의 조합내에 제공될 수도 있을지라도, 아키텍쳐 지원부가 식질적으로 하드웨어에 제공되는 실시예는, 성능향상과 요구 메모리 감소라는 잇점을 제공할 것이다. 이러한 이유로, 전형적인 하드웨어 프로세서 실시예가 여기서 설명된다. 그러나 이 설명에 기초하여, 당업자는 다음의 청구항 영역내에 또다른 실시예들을 인식할 것이다.
여기에서 사용된 것처럼 재배치 가비지 수집기는, 오퍼레이션의 일부분으로써 메모리 오브젝트를 재배치하는 임의의 가비지 수집기, 예를 들어, 카핑 수집기, 새대별 수집기, 그리고 단편화를 줄이고 및/또는 집약성을 향상시키기 위한 압축이나 오브젝트의 재배치를 제공하는 수집기를 포함한다. 그러한 재배치 가비지 수집기의 실시간 또는 바운드된 정지 시간 구현은, 증분 가비지 수집 소프트웨어 프로세스로써 구현되는데, 증분 가비지 수집 소프트웨어 프로세스 연산은 사용자 프로세스 액티비티로 교환배치된다. 그러나 당업자는 여기에서의 설명에 기초를 둔 병행 가비지 수집 구현을 인지할 것이다. 또한 당업자는 분할 재배치된 다수의 오브젝트를 식별하고, 병렬 수집 구현의 지원을 위한 저장장치의 제공을 포함하여, 적절한 변형예를 인지할 것이다.
JAVA 가상 머신 명령 프로세서 실시예
도 1은 가상 머신 명령 프로세서(100)(이하 하드웨어 프로세서(100))라고 한다)의 바람직한 하드웨어 실시예를 도시하고, 그것은 본 발명에 따르는 바운드된 정지 시간 재배치 가비지 수집기를 위한 지원부를 포함하고, JAVA 가상 머신 명령에 독립적인 프로세서 아키텍쳐를 직접 실행한다. 가상 머신 명령을 실행하는 하드웨어 프로세서(100)의 성능은 전형적으로, 소프트웨어 JAVA 기계번역기 또는 JAVA 저스트 인 타임(just-in-time, JIT) 컴파일러로써 동일한 가상 머신 명령을 기계 번역하는, 인텔 펜티엄(Intel PENTIUM) 마이크로프로세서 또는 썬 마이크로시스템즈(Sun Microsystems)의 ULTRASPARC 프로세서(ULTRASPARC는 Mountain View, CA에 있는 Sun Microsystems사의 등록상표이고, PENTIUM은 Summyvale, CA에 있는 Intel사의 등록상표이다)와 같은 하이 엔드(high-end) CPU보다 우수하다. 또한 하드웨어 프로세서(100)는 저가이며 전력소모가 적다. 결국, 하드웨어 프로세서(100)는 휴대용으로 적당하다.
하드웨어 프로세서(100)가 하드웨어에 실질적으로 JAVA 가상 머신 명령 구현체를 제공하기 때문에, 20 내지 25 킬로바이트의 메모리 저장장치(예로서 ROM 또는 RAM, 그밖의 소프트웨어에 요구되는 것)가 제거되거나 또는 대체로써 할당된다. 가비지 수집기를 위한 하드웨어 지원부는 가비지 수집기(예로서, 컴파일러 제공 판독 및/또는 기록 배리어 지원부)를 위한 인-라인 코드를 축소시키고, 제한된 메모리의 향상된 이용을 용이하게 하고, 가비지 수집기 오버헤드 및 정지 시간을 축소시킴으로써, 제한된 메모리의 JAVA 가상 머신 명령 구현에 대하여 이점을 더욱 제공한다. 대용량 메모리에 대한 지출이 제한된 환경(예로서, 네트워트 에플리언스(appliance)를 위한 인터넷 칩, 휴대폰 프로세서, 다른 무선통신 집적회로, 또는 내장 프로세서 및 포터블 장치와 같은 그 밖의 저전력 저비용 응용분야)있어서, 하드웨어 프로세서(100)는 이점이 있다.
대용량 메모리가 실행할 수 있는 환경에서도, 가비지 수집기를 위한 하드웨어 지원부는 배리어 구현체와 연계된 오버헤드를 감소시키고, 메모리의 향상된 이용을 용이하게 하고, 가비지 수집기 구현체를 재배치하기 위한 정지 시간을 감소시킨다. 특히, 하드웨어 프로세서(100)는 바람직한 JAVA 가상 머신 명령 구현의 내용에서 가비지 수집기 방법 및 구현에 대해 이점을 제공한다. 하지만, 여기의 상세한 설명에 기초하여 당해 기술분야의 전문가는 여타 JAVA 가상 머신 명령 구현에 대한 변형(예로서, 여타 비-JAVA(non-JAVA) 가상 머신 명령 구현체뿐만아니라 인터프리트된 및 JIT 컴파일러 JAVA 가상 머신 명령 구현체)을 인식할 것이다.
여기서 사용되는, 가상 머신은, 하나의 명령 세트를 구비하고 다양한 메모리 영역을 이용하는 실제의 연산 머신과 같은 추상적인 연산 머신이다. 가상 머신 사양은 가상 머신 구현에 의해 실행되는 프로세서 아키텍쳐 독립 가상 머신의 세트를 정의한다. 일반적으로, 가상 머신 구현은 하드웨어(예로써, 하드웨어 프로세서(100)의 경우처럼)내에, 소프트웨어(예로서, 인터프리트된 및 JIT 컴파일러 JAVA 가상 머신 명령 구현체)내에, 또는 하드웨어 및 소프트웨어내에 존재할 수도 있다. 각각의 가상 머신 명령을 생성시키는데 사용되는 컴퓨터 언어 또는 가상 머신의 기초의 구현은 이해할 필요는 없다. 가상 머신 명령에 대한 특별한 포멧만이 이해될 것이 필요할 뿐이다. 바람직한 실시예에 있어서, 가상 머신 명령은 JAVA 가상 머신 명령이다. 각각의 JAVA 가상 머신 명령은 정보, 오퍼랜드 및 그 밖의 다른 요구되는 정보를 식별하는 명령을 인코딩(encoding)하는 하나 또는 그 이상의 바이트를 포함한다.
이 실시예에 있어서, 하드웨어 프로세서(100)(도1)는 바이트코드를 포함하는 JAVA 가상 머신 명령을 처리한다. 하드웨어 프로세서(100)는 대부분의 바이트 코드를 직접 실행한다. 하지만, 어떤 바이트코트의 실행은 마이크로코드에 의해서 구현된다. Lindholm & Yellin, The JAVATMVirtual Machine Specification(Addition-Wesley, 1996), ISBN 0-201-63452-X (여기에서의 참고문헌)는 JAVA 가상 머신 명령의 바람직한 세트를 포함한다. 하드웨어 프로세서(100)에 의해 지원되는 가상 머신 명령의 특별한 세트는 본 발명의 본질적인 면이 아니다. 하지만, 가상 머신 명령의 관점에서, 당해 기술 분야의 전문가는 가상 머신 명령의 특별한 세트를 위해 또는 JAVA 가상 머신 사양서로 변경하기 위해 본 발명을 변형할 수 있다.
한 실시예에서, 하드웨어 프로세서(100)는 I/O 버스-메모리 인터페이스부(110), 명령 캐시(125)를 포함하는 명령 캐시부(120), 넌퀵-퀵(non-quick to quick) 변환 캐시(131)를 포함하는 명령 디코딩 장치(130), 통합된(unified) 실행부(140), 스택 캐시(155)를 포함하는 스택 관리부(150), 데이터 캐시(165)를 포함하는 데이터 캐시부(160) 및 프로그램 카운터-트랩 제어 논리부(170)를 포함한다. 여기에서 설명되는 가비지 수집기의 지원부는 우선적으로 프로그램 카운터-트랩 제어 논리(170)내의 몇몇 추가적인 지원부(예로서, 프로그램 카운터에게 트랩핑 저장을 따르는 다음 JAVA 가상 머신 명령을 하게 하기 위한 지원부)와 함께 실행부(140)의 레지스터(144) 및 정수(integer)부(142)에 상주한다. 이들 장치 각각에 대해 이하에서 설명한다. 또한, 하드웨어 프로세서(100)에 대한 바람직한 실시예는 공동출원 계류중인 미국특허출원번호 08/786,351(발명의 명칭 "INSTRUCTION FOLDING FOR A STACK-BASED MACHINE", 발명자 James Michael O'connor와 Mac Tremblay, 출원일1997년 1월 23일, 여기에서 참고문헌으로 채용됨)에 상세히 설명되어 있다.
도 2는 예로서 하드웨어 프로세서(100)에 의해 부분적으로 정의되거나 그 위에서 부분적으로 실행할 수 있는 애플리케이션 환경과 같은 JAVA 애플리케이션 환경의 소프트웨어 컴포넌트와 하드웨어 컴포넌트 사이의 "build upon" 상관관계를 도시한다. JAVA 애플리케이션/애플릿 소프트웨어(210)는 AWT 클래스(241), 네트 및 I/O 클래스(242), JAVA OS 윈도우즈(243), JAVA OS 그래픽스(248), TCP(244), NFS(245), UDP(246) IP(247), 이더네트(222), 키보드(249) 및 마우스(221) 등의 소프트웨어 컴포넌트를 포함하는 애플리케이션/애플릿 프로그래밍 인터페이스(220)(한 실시예에서는 JAVA 바이트코드를 포함한다)를 정의하는 소프트웨어 컴포넌트를 이용한다. 도 2에 도시된 실시예에 있어서, JAVA OS 그래픽스(248) 및 이더네트(222) 소프트웨어 컴포넌트는 또한 베이스라인 JAVA 가상 머신 사양에 의해 정의되는 것을 넘어서는 확장바이트코드를 포함한다. 내장 애플리케이션 프로그래밍 인터페이스(EAPI)(230)의 컴포넌트는 파운데이션(foundation) 클래스(231) 및 JAVA 가상 머신 사양에 따르는 JAVA 가상 머신 구현의 하드웨어 컴포넌트 및 소프트웨어 컴포넌트를 포함한다.
JAVA 가상 머신 구현체(250)는 JAVA 가상 머신 명령을 평가하기 위하여 하드웨어 프로세서(100)와 그위에서 실행할 수 있는 트랩 코드를 포함한다. 또한, JAVA 가상 머신 구현체(250)는 확장 바이트코드(예로써, 가비지 수집기의 내용으로 이하에서 설명될 포인터 저장 바이트 코드 및 메모리 액세스 배리어를 포함한다)를 위한 하드웨어 지원부로써; 클래스 로더(252), 바이트 코드 확인부(VERIFIER)(253) 스레드 관리부(254) 및 가비지 수집기(251) 소프트웨어 및 마이크로커넬(255)을 포함한다. JAVA 가상 머신 구현체(250)는 구현체 종속부뿐만아니라 JAVA 가상 머신 사양서 컴플리언트(compliant) 부분(250a)도 포함한다. 비록 JAVA 가상 머신 사양서가 가비지 수집이 제공된다는 사실을 설명하고 있을지라도, 채용된 특별한 가비지 수집 방법은 구현체에 종속된다.
JAVA 가상 머신 구현체(250)의 바람직한 하드웨어 프로세서(100)의 실시예의 내용으로 여기에서 설명되는 가비지 수집기에 대한 아키텍쳐 특징은 세대별 가비지 수집 방법을 위하여 특별히 채용된다. 하지만, 이 설명에 기초하여, 당해 기술분야의 전문가는 예로서, 비세대별 수집기 구현체, 증분 마크-압축 수집기, 카핑 수집기 등을 포함하는 일반적인 수집기를 재배치하기 위한 본 발명의 바운드된 정지 시간 지원부의 응용을 인식할 것이다.
도 3은 더욱 복잡한 시스템을 구성하기 위한 하드웨어 프로세서(100)에 대해 여러 가지의 가능한 에드온을 도시한다. 도시된 8개의 함수(즉, NTSC 인코더(501), MPEG(502), 이더네트 제어기(503), VIS(504), ISDN(505), I/O 제어기(506), ATM 어셈블리/리어셈블리(507) 및 무선 링크(508)를 지원하는 회로는 본 발명의 하드웨어 프로세서(100)로서 동일한 칩내에 집적될 수 있다.
또한, 당해 기술분야의 전문가는, 상술한 어떤 에드온 회로를 가진 하드웨어 프로세서(100)의 실시예를 포함하여, 하드웨어 프로세서(100)를 채용하는 매우 다양한 컴퓨터 시스템을 인식할 것이다. 바람직한 컴퓨터 시스템 실시예는 물리적 메모리 저장장치(예로서, RAM 및/또는 ROM), 컴퓨터 판독가능 매체 접근 장치(예로서, 디스크, CD-ROM, 테이프, 및/또는 메모리 기술형 컴퓨터 판독가능 매체 접근 장치 등), 입출력 장치 인터페이스(예로서, 키보드 및/또는 포인팅 장치를 위한 또는 디스플레이 장치를 위한 인터페이스 등) 및 통신장치 및/또는 인터페이스를 포함한다. 적절한 통신장치 및/또는 인터페이스는 네트워크(또는 전화) 기반 통신을 위한 것, 공중 회선 교환 네트워크, 전용망 등의 지상 또는 무선 부분을 포함하는 통신망과 인터페이스하기 위한 것을 포함한다. 본 발명의 어떤 실시예에 있어서, 명령 스트림(예로서, JAVA 바이트코드를 포함)은 이러한 통신 장치 내지 인터페이스를 통하여 하드웨어 프로세서(100)에 의해서 실행되기 위하여 전송 및/또는 수신된다.
가비지 수집기를 위한 아키텍쳐 지원부
하드웨어 프로세서(100)는 그 위에서 실행할 수 있는 가비지 수집기 소프트웨어로서 구현된 재배치 수집기 방법을 포함하는 다양한 가비지 수집 방법을 위한 하드웨어 서포트를 제공한다. 특히, 하드웨어 프로세서(100)가 부분적으로 재배치된 오브젝트 식별자 저장장치와 장벽 서포트를 포함한다. 임의의 실시예에서, 그런 장벽 서포트는 저장의 필터링을 선택할 수 있는 프로그래머를 위한 기록 장벽 서포트, 바이트코드를 포인터 특정 바이트코드로의 저장의 실행시간 분해능을 위한 서포트 혹은 그 양자를 포함하여서 포인터 저장 트래핑을 용이하게 한다. 이것은 현재 공동 출원 계류중이며, James Michael O'Connor, Marc Tremblay, Sanjay Vishin의 발명자에 의해서 1997년 4월 23일에 출원되었으며, "세대분리 시스템 및 가비지 수집을 위한 방법(GENERATION OSOLATION SYSTEM AND METHOD FOR GARBAGE COLLECTION)"의 발명의 명칭을 갖는 미국 특허 출원 08/841,543호에서 상세하게 설명된다.
부분적으로 재배치된 오브젝트 식별자 저장장치
도 4A는 FROM 필드(411), TO 필드(412) 및 HOWFAR 필드(413)를 포함하는 일부 재배치된 오브젝트 식별자 저장부(410)의 한 실시예를 설명한다. 도 4b는 카핑 수집기 방법에 따라서 메모리 저장장치의 FromSpace(420) 및 ToSpace(430)를 도시한다. 세대별 수집기 구현에서, FromSpace(420) 및 ToSpace(430) 부분은 싱글 세대의 세미 스페이스(semi-space)일 수 있으며, 각각 젊고 오래된 세대 스페이스의 부분일 수도 있다. 또한, FromSpace(420) 및 ToSpace(430)부는 비세대별 수집기 스페이스 내에 있는 세미 스페이스일 수도 있다. 더욱이, FromSpace(420) 및 ToSpace(430)부가 오버랩될 수도 있으며, 서로 인접해 있거나 혹은 인접해 있지 않을 수도 있으며, 메모리 저장장치 내에 고정된 크기 혹은 고정된 배치를 갖는 것은 필연적인 것은 아니다. 부가적으로, 임의의 실시예에서, 다수의 FromSpace 및 ToSpace부는 일부 재배치된 오브젝트 식별자 저장부(410)와 그 안의 배리어에 대한 적절한 변형으로 지원된다. 도 4B는 유효한 메모리 오브젝트 A, B 및 C의 제 1 참조 상태와 ToSpace(430)으로의 카핑전에 대형 오브젝트(45)를 설명한다. 루트 프린터 세트(440)는 예를 들어 오퍼랜드 스택의 전체로부터 시작하는 포인터 및/혹은 스택 캐시(155)내에 설명된 부분 변수 저장장치를 포함하는 참조구조로 설정된다.
도 5는 대형 오브젝트(45) 재배치의 인터럽션에서 부분적으로 재배치된 오브젝트 식별자 저장장치(410), FromSpace(420) 및 ToSpace(430)의 제 2 참조 상태를 설명한다. 유효 메모리 오브젝트(A 및 B)는 ToSpace(430)에서 대응하는 인스턴스(A' 및 B')로 카피된다. 카핑의 인터럽션시에, 대형 오브젝트(450)의 카피부(551)의 내용은 대형 오브젝트(450)의 ToSpace(430)의 대응하는 부분(551a)에 카피된다. 대형 오브젝트(450)의 완전히 카피되지 않은 부분을 유지하기 위한 ToSpace(430) 저장장치가 영역 552a로서 도시되어 있다. "From" 필드(411)는 FromSpace(420)내의 대형 오브젝트(450)를 식별하며, "to" 필드(412)는 대형 오브젝트(450)의 대응하는 부분적으로 재배치된 인스턴스(450a)를 식별하며, 그리고 "HOWFAR" 필드(413)는 대형 오브젝트(450)의 카피된 부분(551)과 완전히 카피되지 않은 부분(552) 사이의 경계를 식별한다. 오버랩핑 카피 다이렉션 필드(도시되지 않음)는 옵션이다. 한 실시예에서, 그런 카피 다이렉션 필드는, 그의 상태가 오버랩된 FromSpace 및 ToSpace의 카핑을 위한 순방향 및 역방향 다이렉션을 지시하는 카피 다이렉션 비트를 포함한다. 다른 실시예에서, 당업자에 의해서 이해될 수 있는 것처럼, 카피 다이렉션 "FROM 필드"(411)와 "TO 필드"(412)의 상대적인 값으로부터 유도된다.
"HOWFAR 필드"(413)는 대형 오브젝트 카핑의 프로세스를 지시하고 혹은 기록 배리어 하드웨어 및 일부 재배치된 오브젝트 트랩 핸들러가 일부 카피된 대형 오브젝트에 대한 뮤테이터 액세스를 적적하게 핸들링하도록 한다. 도 5의 실시예에서, HOWFAR 필드(413)는 카피부(551)와 카피되지 않은 부분(552) 사이의 경계의 메모리에서 어드레스를 지시한다. 그럼에도 불구하고, 당업자는, 본 설명을 기초로 하여, 예를 들어, FROM 필드(411)에 의해서 지시된 메모리 배치의 인덱스 오프, 대형 오브젝트(450)의 ToSpace 인스턴스(550a)에서 대응하는 경계의 지시등을 포함하는 다양한 적절한 또다른 인코딩을 인식할 것이다. HOWFAR 필드(413)는 임의의 그런 적절한 지시를 인코딩한다.
도 6에 대하여, 일부 재배치된 오브젝트 식별자 저장장치(410)가 뮤테이터 프로세스(610) 및 가비지 수집기 프로세스(620)의 내용내에 도시된다. 도 6의 실시예에서, 뮤테이터(610) 및 가비지 수집기 프로세스(620)는 하드웨어 프로세서에 의해서 실행할 수 있는 JAVA 가상 머신 명령에 의해서 각각 한정된다. 가비지 수집기 프로세스(620)는 임의의 재배치 수집기를 포함한다. 비록 상기 설명이 도 5를 참조하여 상기된 세미 스페이스 카핑 수집기를 위한 것일지라도, 당업자는 다른 재배치 수집기에 적용할 수 있다는 것을 인식할 것이다. FromSpace(420)에서 ToSpace(430)로의 대형 오브젝트(450) 카핑중에, 가비지 수집기 프로세스(620)는 수집된 스페이스(630)로부터 판독하고 그곳에 기록한다.
한 실시예에서, 가비지 수집기 프로세스(620)는 대형 오브젝트(450)의 카핑 시작시에, FROM 필드(411)와 TO 필드(412)를 업데이트하며, 뮤테이터 프로세스(610)에 의해서 중단될 때, HOWFAR 필드(413)가 카피된 부분(551)과 카피되지 않은 부분(552) 사이의 경계를 지시하도록, 카핑중에 HOWFAR 필드(413)를 업데이트한다. 동시에 뮤테이터 프로세스(610) 및 가비지 수집기 프로세스(620)를 실행하기 위한 실시예에서, HOWFAR 필드(413)의 잠금(locking)이 제공되며 적절한 방법이 당업자에 의해서 인지되어 있다. 또한 실시예는 중단시의 업데이트를 위하여 HOWFAR 필드(413)의 증분 업데이트를 보류할 수도 있다.
뮤테이터 프로세스(610)는 수집된 스페이스(630)를 포함하는 메모리로부터 판독하고 메모리에 기록한다. 한 실시예에서, 하드웨어 프로세서(100)는 오브젝트 참조 정보(즉, objectref)를 FROM 필드(411), TO 필드(412)의 내용 또는 이 양 내용과 비교하는 배리어(660)를 위한 정수부(142) 지원부를 포함한다. FROM 필드(411)의 내용과의 일치는 참조된 오브젝트가 일부 재배치된 대형 오브젝트(450)의 FromSpace(420) 인스턴스인 것을 나타낸다. TO 필드(412)의 내용과의 일치는 참조된 오브젝트가 일부 카피된 ToSpace(430) 인스턴스(450a)인 것을 나타낸다. 어떤 실시예에서는, 참조 오브젝트로 오프셋트된 특정 필드의 평가는 참조된 오브젝트의 카피되고 카피되지 않은 부분의 배리어(660) 핸들링을 정확하게 하기 위하여 HOWFAR 필드(413)의 내용에 대해 비교된다.
아래에 더욱 자세히 설명된 여러 가지 실시예에서, 배리어(660)는 일부 재배치된 오브젝트 식별자 저장부(410)에 응답하는 기록 배리어 지원부(write barrier support)를 포함한다. 어떤 실시예에서는, 배리어(660)는 일부 재배치된 오브젝트 식별자 저장부(410)에 응답하는 판독 배리어 지원부(read barrier support)를 포함한다. 어떤 실시예에서는, 배리어(660)는 트래핑 액세스(즉, 기록 액세스를 방송하고, 기록 액세스를 리다이렉트하고, 판독 액세스를 리다이렉트하고, 혹은 완전히 정상적으로 액세스하게 하는 것)을 적절하게 다루는 소프트웨어 일부 재배치된 오브젝트 트랩 핸들러에 대한 트래핑을 위하여 하드웨어 판독 및/또는 기록 배리어 지원부를 포함한다. 어떤 실시예에서는, 하드웨어 판독기 및/또는 기록 배리어 자체가 소프트웨어에 트랩 핸들러 오버헤드없이 그와 같은 적절한 핸들링을 제공한다.
어떤 실시예에서는, 바운드된 정지 시간 재배치가 대형 혹은 보급형 오브젝트의 증분 카피를 하는 배리어(660) 구성요소에 의해서 제공되며, 그곳으로의 포인터 업데이트는 오브젝트 참조 핸들을 경유한다. 어떤 실시예에서는, 파뮬러 오브젝트에 대한 포인터 업데이트는, 예를 들어 오브젝트 참조 핸들의 싱글 포인터의 업데이트에 의해서 제공된다. 어떤 실시예에서는, 배리어(660)의 소자에 의해 제공된 바운드된 정지 시간 재배치는 보급형 및 가능한 대형 오브젝트에 포인터의 증분 업데이트를 위한 지원부를 포함한다. 여기에 사용된 바와 같이, 바운드된 정지 시간 재배치는 카피와 포인터 업데이트를 포함한다. 당업자는 즉, 대형 오브젝트의 바운드된 정지 시간 재배치, 보급형 오브젝트의 바운드된 정지 시간 재배치, 대형 및 보급형 오브젝트의 바운트 정지 시간 재배치에 대한 실시예의 가능성을 이해할 수 있다. 핸들링된 및 핸들링되지 않은 오브젝트 참조는 아래에서 상세하게 기술될 것이다.
하드웨어 프로세서(100)의 특정 실시예에 의해 지원된 가비지 수집 방법에 따라서, 기록 및/또는 판독기 배리어 지원부는 수집기 트래버설(traversal)과 간섭하는 방식으로 메모리 오브젝트 참조 그래프의 연결을 바꿈에 의해 뮤테이터 프로세스(610)가 가비지 수집 프로세스(620)와 인터페이스하는 것을 방지하기 위해 제공될 수도 있다. 예를 들어, 하드웨어 프로세서(100)의 한 실시예에서, 세대별 상호간의 포인터 저장부, 모든 포인터 저장부 및 모든 저장부(각각의 필터링된 배리어 변형을 위한 지원부를 포함한다)에 대한 프로그래머가 선택할 수 있는 하드웨어 기록 배리어는 상기와 결합되어 공동 출원 계류중인 U.S. 특허출원(Serial No.: 08/841,543, 발명의 명칭:세대별 분리 시스템과 가비지 수집 방법(GENERATION ISOLATION SYSTEM AND METHOD FOR GARBAGE COLLECTION)에 상세히 기술되어 제공된다. 이 발명의 발명자는 James Michael O'Connor, Marc Tremblay, Sanjay Vishin이고, 1997년 4월 23일에 출원되었다. 배리어(660)의 한 실시예에서, 추가적인 배리어를 위한 지원부는 상기 서술된 일부 재배치된 대형 오브젝트로의 저장에 대한 배리어와 결합한다.
도 1에 따른 실시예에서, 일부 재배치된 오브젝트 트랩 핸들러는 하드웨어 프로세서(100)에서 실행가능하고 프로그램 카운터와 트랩 제어 논리(170)에 의해 초기 실행되는 JAVA 가상 머신 명령 바이트 코드를 포함한다. 예를 들어, 일부 재배치된 오브젝트 트랩이 포함된 가비지 수집 트랩은 트래핑 기록이 평가되어지기전에 트리거된다. 따라서, 프로세서가 무한정 트래핑되는 것을 방지하기 위해, 일부 재배치된 오브젝트 트랩 핸들러(650)는 추가적인 가비지 수집 연관 기능과 함께 트래핑 기록을 에뮬레이트한다. 한 실시예에서, 프로그램 카운터와 트랩 제어 논리(170)는 프로그램 카운터를 다음의 JAVA 가상 머신 명령에 있게 하여 트랩핑 기록을 따르게 한다. 다음의 더 상세한 설명에 기초하여, 당업자는 강제된 일관성 정책에 의존하는 일부 재배치된 오브젝트 트랩 핸들러를 위한 여러가지 유효 행동을 식별할 것이다.
비록 가비지 수집이 FROM 필드(411), TO 필드(412), HOWFAR 필드(413) 및 일부 재배치된 오브젝트 트랩 핸들러를 잠재적으로 포함하는 배리어(660)의 내용을 포함하는 일부 재배치된 오브젝트 식별자 저장부(410)의 도 6의 실시예에 관하여 기술되었다할지라도, 여러가지 선택적인 실시예들이 또한 적절하다. 여러가지 선택적인 실시예들에서, 일부 재배치된 오브젝트 트랩 핸들러는 제거될 수 있고 뮤테이터 프로세스 액세스는 하드웨어 배리어 지원부에 의해 적절하게 핸들링될 수 있어서, 트랩 핸들러와 연관된 오버헤드를 줄일 수 있다. 다음의 예시적인 실시예의 기술에 기초하여, 당업자는 청구범위의 영역에 해당하는 여러가지 추가적인 조합과 변화를 이해할 것이다.
Copt-From 인스턴스 식별기 저장기와 관련된 기록 배리어
도 7은 관련된 기록 배리어가 있는 Copy-From 레지스터를 가진 실시예를 나타낸다. 특히, 도 7의 실시예에는 부분적으로 재배치된 오브젝트 식별기 저장기(410)의 FROM 필드(411)(도 4 참조), 하드웨어 기록 배리어(740) 및 부분적으로 재배치된 오브젝트 트랩 핸들러(750)가 포함되어 있다. 도 7의 실시예에서, FROM 필드(411)는 하드웨어 프로세서(100)의 레지스터(144) 내에 있다. 뮤테이터 프로세스(610), 가비지 수집기 프로세스(620) 및 부분적으로 재배치된 오브젝트 트랩 핸들러(650)에는 하드웨어 프로세서(100)상에서 실행가능한 소프트웨어가 포함되어 있다. 이 실시예는 대형 오브젝트의 증분 가피를 촉진한다. 그러나, 추가적인 지원이 없다면, 이 실시예는 보급형으로 재배치된 오브젝트의 ToSpace(430) 인스턴스에 대한 다수개의 포인터의 증분 업데이트에는 그리 적절하지 못하다. 그럼에도 불구하고, 예를들어, 도 17B 를 참조하여 아래에 설명된 것과같이, 핸들러를 통해 참조된 오브젝트가 있는 가비지 수집 시스템을 위해서는, 하나의 처리를 ToSpace(430) 인스턴스로 업데이트하는 것이 사소한 것일 수 있으므로, 그와같은 실시예는 하드웨어 요구를 줄이고 바운드된 정지 시간 재배치를 위해 실행가능하다.
뮤테이터 프로세스(610)는 수집된 스페이스(630)로부터 및 스페이스로 판독기 및 기록 액세스를 한다. 판독 액세스는 가비지 수집 지원을 받지 않는다. 그러나, 기록 액세스는 하드웨어 기록 배리어(740)에 의해 선택적으로 트랩된다. 하드웨어 기록 배리어(740)는 FROM 필드(411)의 내용과 기록 액세스(701)와 관련된 타겟 objectref 간의 일치에 응답하여 부분적으로 재배치된 오브젝트 트랩 핸들러(750)를 트리거한다. 이 실시예에서, 부분적으로 재배치된 오브젝트 트랩 핸들러(750)는, 그렇지 않으면 TO 필드(412)에 저장되는 Copy-To 목적지 정보를 결정하거나 또는 메모리 스토리지를 선택적으로 유지한다. 또한, 가비지 수집 소프트웨어가 그렇지 않으면 HOWFAR 필드(413)에 저장되는 HowFar 정보를 위한 스토리지를 선택적으로 유지하기도 한다. 뮤테이터 프로세스(610)가 대형 오브젝트의 FromSpace(420) 인스턴스에 저장할 때, 저장 데이터는 Copy-From 인스턴스(450) 및 Copy-to 인스턴스(450A)에 모두 방송되거나, 또는 HOWFAR 정보를 위한 스토리지를 제공하는 실시예에서는, HowFar 스토리지는 검사되고 만일 대형 오브젝트의 필드로 저장된 것이 이미 카피되었다면 그 저장은 방송되며, 그렇지 않다면 Copy-From 인스턴스(450)로 지시된다. 당 기술분야의 통상의 지식을 가진 자는 가비지 수집기 프로세스(620)가 부분적으로 재배치된 오브젝트 트랩 핸들러(750)에 이용가능한 TO 필드 및 HOWFAR 필드 저장변수(751)를 업데이트할 수도 있는 여러 방법을 이해할 것이다. 업데이트(701)는 그러한 적절한 방법으로 이루어진다.
앞서 설명한 바와 같이, 가비지 수집기 프로세스(620)는 대형 오브젝트의 Copy-From 인스턴스(450)를 식별하기 위해 부분적으로 재배치된 오브젝트 식별기 저장부(410)의 FROM 필드(411)를 업데이트한다. 이 실시예에서, Copy-To 인스턴스로의 포인터는, 카피가 완료된 후 대형 오브젝트를 위한 처리가 업데이트될 때 까지 뮤테이터 프로세스(610)에서는 사용가능하지 않다. 따라서, Copy-To 인스턴스(450A)로의 액세스에 대한 배리어는 유지될 필요가 없다. 이 실시예는 오러랩된 Copy-From 및 Copy-To 인스턴스를 위한 구성은 아니다; 그러나, 오버랩된 인스턴스를 위한 지원은 많은 재배치 수집 방법, 예를들어 세대별 이용 또는 카피 수집기 방법 등에서는 필요하지 않다.
한 실시예에서, 하드웨어 기록 배리어(740)는 저장-지향 바이트코드(예를들어, putfield_quick, putfield, aastore, 등)를 평가하는 정수유닛(142)(도 1) 논리에 의해 제공된다. 이와같은 실시예에서, 논리 구현 하드웨어 기록 베리어(740)는 FROM 필드(411)의 내용에 의해 식별된 Copy-From 인스턴스로의 기록을 트랩한다. 예를들어, 하드웨어 기록 배리어(640A)의 바람직한 동작은 아래의 논리 식으로 설명된다.
if (objectref == FROM) then
generate gc_notify
여기서, gc_notify 는 예시적인 트랩 핸들러이다. 당업자는 위에 기술된 세대간 포인터 저장 트래핑 등의 다른 기록 배리어 기능을 조합하는 논리 구현을 포함하는 여러 적절한 논리 구현을 이해할 수 있을 것이다. How far 정보는 하드웨어 기록 배리어(740)에 의해 더 나은 테일러 트래핑을 위해 레지스터(144)(도 4 참조, 도 7에는 도시하지 않음)의 HOWFAR 필드(413)로서 방송이 필요한 경우에만 선택적으로 제공되어서, 부분적으로 재배치된 오브젝트 트랩 핸들러(750) 호출과 관련된 오버헤드를 줄인다.
도 8은 관련된 기록 배리어(840)가 있는 Copy-From 레지스터 필드(예를들어 FROM 필드(411))에 더하여 Copy-To 레지스터 필드(예를들어 TO 필드(412))를 포함하는 실시예를 나타낸다. 도 8의 실시예에는 FROM 필드(411)의 내용에 의해 식별된 오브젝트의 필드로 저장하기 위해 기록 배리어가 제공되는데, 부분적으로 재배치된 오브젝트 트랩(750) 및 이와 관련된 오버헤드가 제거되는 장점이 있다. 이 실시예는 대형 오브젝트의 증분(바운드된 정지 시간) 카피를 촉진시키긴 하지만, 도 7과 같이, 카피된 오브젝트의 ToSpace(430) 인스턴스로 여러 포인터의 바운드된 정지 시간 업데이트에는 적합하지는 않다. 앞서 설명한 바와 같이, 처리된 오브젝트 참조는 이러한 제한을 줄일 수 있고, 심지어 보급형의 대형 오브젝트의 전체적인 바운드된 정지시간 재배치를, 추가적인 수단 레벨의 비용을 들여서 하게한다.
하드웨어에, 레지스터(144)내의 to 필드(412)와 같은 Copy-To 레지스터 필드를 유지함으로써, Copy-From 인스턴스로의 기록 액세스는 소프트웨어 트랩 핸들러 간섭없이 하드웨어 기록 배리어(840)에 의해 Copy-From 및 Copy-To 에 모두 방송될 수 있다. 한 실시예에서, 하드웨어 기록 배리어(840)는 저장-지향 바이트코드를 평가하는 정수유닛(142)(도 1) 논리에 의해 제공된다. 그러한 실시예에서, 논리 실행 하드웨어 기록 배리어(840)는 store_data 를 TO 필드(412)의 내용 및 objectref 의해 각각 식별된 Copy-From 및 Copy-To 인스턴스 모두에 방송한다. 예시적인 하드웨어 기록 배리어(840)는 아래의 논리 식으로 설명된다.
if (objectref == FROM) {
store_data => *(objectref + offset)
store_data => *(TO + offset)
}
여기서, offset 는 저장-지향 바이트코드와 관련된 타겟 필드의 대형 오브젝트로의 오프셋이다. 당업자는 위에 설명된 세대별 상호간의 포인터 저장 트래핑과 같은 다른 기록 배리어 기능을 조합하는 논리 구현을 포함하는 여러가지 적절한 논리 구현을 이해할 것이다. TO 필드(412)가 하드웨어 기록 배리어(840)에 이용가능하므로, 방송은 하드웨어에서 실행되고 소프트웨어 트랩 오버헤드는 제거된다.
도 9는 관련된 하드웨어 기록 배리어(940)가 있는 Copy-From 레지스터 필드(예를들어 FROM 필드(411)) 이외에 Copy-To 및 How-Far 레지스터 필드(예를들어 to 필드(412) 및 howfar 필드(413))을 포함하는 실시예를 나타낸다. 도 9의 실시예는 FROM 필드(411)의 내용에 의해 식별된 오브젝트의 필드로 저장하기 위해 기록 배리어를 제공하는데, 부분적으로 재배치된 오브젝트 트랩 핸들러(650) 및 그와 관련된 오버헤드를 제거하는 동안, 하드웨어 기록 배리어(940)가 상기 대형 오브젝트의 아직 카피되지 않은 부분으로 저장기의 방송을 진행시키게 하는 장점이 있다. 앞의 실시예에서와 같이, 이 실시예는 대형 오브젝트의 증분 카피를 촉진시키기는 하지만, 카피된 오브젝트의 ToSpace(430) 인스턴스에의 많은 수의 포인터의 바운드된 정지 시간 업데이트에는 매우 적합하지는 않다. 앞에서와 같이, 처리된 오브젝트 참조는 이러한 제한을 감소시켜, 심지어 보급형의 대형 오브젝트의 전체적인 바운드된 정지 시간 재배치를, 추가적인 수단 레벨의 비용을 들여서 하게한다.
하드웨어내에 레지스터내의 필드(412)와 같은 Copy-To 레지스터 필드를 유지함으로서, Copy-From 인스턴스로의 기록 액세스는 하드웨어 기록 배리어(940)에 의한 Copy-From 및 Copy-To 인스턴스 모두에 방송될 수 있다. 하드웨어내에 레지스터내의 howfar 필드(413)와 같은 How-Far 레지스터 필드를 더 유지함에 의해, 기록 액세스의 특정 타겟 필드가 이미 ToSpace(430)에 카피된 그러한 기록 액세스로 방송이 제한될 수 있다. 이들 중 어느 한 경우에, 부분적으로 재배치된 오브젝트로의 기록 액세스의 처리는 소프트웨어 트랩 핸들러 간섭이 없다. 한 실시예에서, 하드웨어 기록 배리어(940)는 저장-지향 바이트코드의 평가하는 정수유닛(142)(도 1) 논리에 의해 제공된다. 이와같은 실시예에서, 만일 타켓 오브젝트 필드가 이미 대형 오브젝트의 카피된 부분내에 있다면 Copy-From 및 Copy-To 인스턴스 모두로 store_data 를 방송하고, 상기 타겟 오브젝트 필드가 아직 상기 대형 오브젝트에 카피되지 않았다면 store_data 를 Copy-From 인스턴스로 지시한다. 예시적인 하드웨어 기록 배리어(940)는 아래의 논리 식에 의해 설명된다.
if (objectref == FROM) {
if offset > HOWFAR then
store_data => *(TO + offset)
store_data => *(objectref + offset)
}
여기서, offset 는 저장-지향 바이트코드와 관련된 타겟 필드의 대형 오브젝트로의 오프셋이다. 어느 실시예에서는, Copy-From 인스턴스로의 store_data 의 지시는 단지 하드웨어 기록 배리어(940) 간섭없이 기록 액세스를 정상적으로 완료하는 것을 간단히 허용함으로서 제공되기도 한다. 당업자는 위에 설명된 세대별 상호간의 포인터 저장 트래핑과 같은 다른 기록 배리어 기능을 조합하는 논리 구현을 포함하여, 다수의 적절한 논리 구현을 이해할 수 있을 것이다. HOWFAR 필드(413)가 하드웨어 기록 배리어(940)에 이용가능하므로, 하드웨어 기록 배리어(940)는 store_data 를 Copy-To 인스턴스로 선택적으로 진행시킬 수 있다. 이 간단한 최적화는 두 개의 기록을 방송하는 것보다 오직 하나의 기록을 방송함에 의해 성능을 향상시킬 수 있다.
Copy-From 및 Copy-To 인스턴스 식별기 저장기 모두에 관련된 기록 배리어
지금부터 도 10 및 도 11을 참고하여 추가적인 실시예를 설명한다. 앞서 설명한 몇 몇 실시예에서와 같이, 이러한 추가적인 실시예는 하드웨어 지원(예를들어, 하드웨어 기록 배리어 및 부분적으로 재배치된 오브젝트 식별기 저장기(410))을 이용하여 소프트웨어 트랩 핸들러 게재없이 부분적으로 재배치된 대형 오브젝트의 FromSpace(420) 인스턴스로의 기록을 적절히 처리한다. 그러나, 또한, 이러한 추가적인 실시예는 부분적으로 재배치된 대형 오브젝트의 ToSpace(430) 인스턴스로의 기록을 위해 배리어를 제공한다. 이러한 방식에서, 이러한 추가적인 실시예는 처리된 오브젝트 참조 없이 대형 및/또는 보급형 오브젝트의 전체적인 바운드된 중단 시간 재배치를 위하여 보급형 오브젝트로의 포인터의 증분 업데이트 및 대형 오브젝트의 증분 카피 모두를 지원한다.
도 10 및 도 11의 실시예에서, 가비지 수집기 프로세스(620)는 대형 오브젝트의 포인터(즉, objectrefs)를 증분 업데이트 한다. FromSpace(420) 인스턴스 또는 ToSpace(430) 인스턴스 중 어느 하나로 기록 액세스를 하는 뮤테이터 프로세스(610)는 objectrefs 가 업데이트 되는 동안 두 개의 인스턴스가 "동기" 되어 유지되도록 하드웨어 기록 배리어(1040) 또는 하드웨어 기록 배리어(1140) 등의 하드웨어 기록 배리어에 의해 방송된다(또는 적절히 지시된다). 두 개의 인스턴스가 동기되어 유지되기 때문에, 메모리 참조 구조는 일부 objectrefs 가 FromSpace(420) 인스턴스를 참조하고 다른 것은 해당하는 ToSpace(430) 인스턴스를 참조하는 참조 상태로 견고하게 된다. 대형 오브젝트를 참조하는 objectrefs 의 바운드된 정지 시간 업데이트는 ToSpace(430) 인스턴스(FromSpace(420) 인스턴스보다는)를 참조하는 이러한 objectrefs 를 증분 업데이트 함으로써 달성된다. 도 10 및 도 11의 실시예에서, FromSpace(420) 인스턴스 및 ToSpace(430) 인스턴스가 겹치지 않을 수도 있다는 것에 주의하라.
도 10을 참조하면, 하드웨어 기록 배리어(1040)는 Copy-From 인스턴스(450) 또는 Copy-To 인스턴스(450A) 로의 기록 액세스에 배리어를 제공한다. 하드웨어 기록 배리어(1040)는 하드웨어 기록 배리어(840)를 참조하여 앞서 설명한 바와 같이, 증가하는 바운드된 정지 시간 카피를 지원한다. 그러나, 하드웨어 기록 배리어(1040)는 또한 Copy-To 레지스터 필드(즉, 필드(412))에 응답한다. Copy-From 인스턴스(450) 또는 Copy-To 인스턴스(450A)로의 기록 액세스는 두 인스턴스의 데이터 상태가 동기되도록 Copy-From 인스턴스(450) 및 Copy-To 인스턴스(450A) 모두에 방송된다. 이러한 방식으로, 부분적으로 재배치된 오브젝트로의 objectrefs 는 어느 인스턴스로의 판독 액세스가 동일한 필드 상태로 되기 때문에, 증분 업데이트될 수도 있다.
한 실시예에서, 하드웨어 기록 배리어(1040)는 저장-지향 바이트코드를 평가하는 정수유닛(142)(도 1) 논리에 의해 제공된다. 이러한 실시예에서, 논리 구현 하드웨어 기록 배리어(1040)는 store_data 를 FROM 필드(411) 및 TO 필드(412)의 내용에 의해 각각 확인되는 Copy-From 및 Copy-To 인스턴스 모두로 방송된다. 예식적인 하드웨어 기록 배리어(1040)는 아래의 논리 식으로 설명된다.
if ((objectref == FROM) ∥ (objectref == TO)) {
store_data => *(FROM + offset)
store_data => *(TO + offset)
}
여기서 offset 는 저장-지향 바이트코드에 연관된 타겟 필드의 대형 오브젝트로의 오프셋이다. 당업자라면, 상기 설명된 세대간의 포인터 저장 트래핑과 같은 다른 기록 배리어 기능이 결합된 논리 구현을 포함하는 다양한 적절한 논리 구현을 이해할 수 있을 것이다. FROM 필드(411) 및 TO 필드(412)가 하드웨어 기록 배리어(1040)에서 이용가능하기 때문에, 이에의해 각각 확인된 Copy-From 인스턴스(450) 및 Copy-To 인스턴스(450A) 로의 저장이 인식될 수 있으며, 이 두 인스턴스로의 방송이 소프트웨어 트랩 오버헤드 없이 하드웨어에서 수행될 수 있다.
도 11은 How-Far 레지스터 필드(예를들어 HOWFAR 필드(413)) 및 Mode 명령(예를들어 레지스터(144)의 mode 필드(1114))를 더하는 실시예를 나타낸다. 도 10의 실시예에서와 같이, 하드웨어 기록 배리어(1140)는 Copy-From 인스턴스(450) 또는 Copy-To 인스턴스(450A) 중 어느 하나로의 기록 액세스에 배리어를 제공한다. 하드웨어 기록 배리어(1140)는 FromSpace(420) 및 ToSpace(430) 인스턴스의 카피된 부분이 동기되어 유지되는 것을 보장함으로써, 증분의 바운드된 정지 시간 카피를 지원한다. 하드웨어 기록 배리어(1140)는 하드웨어 프로세서(100)가 도 11의 실시예에서 모드 필드(1114)의 COPY 상태로 표시된 카피 단계 중에 상기 대형 오브젝트의 아직 카피되지 않은 부분으로의 저장의 방송을 보류하게 하는 장점이 있다. 그러나, 모드 필드(1114)의 PTR_UPDATE 상태로 표시된 포인터 업데이트 단계 중에, Copy-From 인스턴스(450) 또는 Copy-To 인스턴스(450A) 중 어느 하나로의 기록 액세스는 Copt-From 인스턴스(450) 및 Copt-To 인스턴스(450A) 모두로 방송된다. 가비지 수집기 프로세스(620)는 대형 오브젝트 재배치의 현재 단계에 대응하도록 모드 필드(1114)를 업데이트한다.
한 실시예에서, 하드웨어 기록 배리어(1140)는 저장지향 바이트코드의 평가하는 정수유닛(142)(도 1) 논리에 의해 제공된다. 이러한 실시예에서, 논리 구현 하드웨어 기록 배리어(1140)는 타겟 오브젝트 필드가 대형 오브젝트의 이미 카피된 부분에 있다면 또는 대형 오브젝트가 완전히 카피되고 재배치가 포인터 업데이트 단계에 들어갔다면, Copy-From 및 Copy-To 인스턴스 모두에 store_data 를 방송한다. 카피 단계중에, 논리 구현 하드웨어 기록 배리어(1140)는 상기 타겟 오브젝트 필드가 상기 대형 오브젝트의 아직 카피되지 않은 부분에 있다면 store_data 를 Copy-From 인스턴스로 보낸다. 예시적인 하드웨어 기록 배리어(1140)는 아래와 같은 논리 식에 의해 설명된다.
if ((objectref == FROM) ∥ (objectref == TO)) {
if ((offset ≥ HOWFAR) ∥ (MODE == PTR_UPDATA)) then
store_data => *(TO + offset)
store_data => *(FROM + offset)
}
여기서, 모드필드(1114)의 상태, MODE 는 재배치 단계(예를들어 COPY 또는 PTR_UPDATE)를 나타내고, 오프셋은 저장-지향 바이트코드와 연관된 타겟 필드의 대형 오브젝트로의 오프셋이다. 당업자라면 앞서 설명한 바와 같이, 세대간 포인터 저장 트래핑과 같은 다른 기록 배리어 기능성을 결합하는 논리 구현을 포함하는 다양한 적합한 논리 구현을 인식할 수 있을 것이다. HOWFAR 필드(413) 및 모드 필드(1114)는 하드웨어 기록 배리어(1140)에 이용될 수 있기 때문에, 하드웨어 기록 배리어(1140)는 포인터 업데이트 단계 중에 기록을 방송하면서 대형 오브젝트 배재치의 카피 단계 중에 store_data 를 Copy-To 인스턴스로 기록하는 것을 선택적으로 보류할 수 있다. 이러한 약간의 최적화는 카피 단계 중에 두 개의 기록을 방송하기보다는 하나의 기록을 수행함으로써 성능을 향상시킬 수도 있다. 추가적으로, 재배치 모드는 가비지 수집기 프로세스(620)가 HOWFAR 필드(413)의 상태에서 카피 단계의 완료를 인코딩하게 함으로써 나타날 수도 있다. 당업자라면 상기 논리 식에서 0보다 작거나 같은 HOWFAR 필드(413) 값이 카피 단계의 완료를 인코딩하여 모드 필드(1114)를 제거하는데 이용될 수 있음을 알 수 있을 것이다.
Copy-From 인스턴스 식별기 저장기에 관련된 판독 및 기록 배리어
지금부터 도 12 내지 도 14를 참고하여 추가적인 실시예를 설명한다. 앞서 기재된 몇 몇 실시예에서와 같이, 이러한 추가적인 실시예는 부분적으로 재배치된 대형 오브젝트의 FromSpace(420) 인스턴스로의 기록을 적절히 처리하기 위하여 하드웨어 지원(예를들어 하드웨어 기록 배리어 및 부분적으로 재배치된 오브젝트 식별기 저장기(410))을 이용한다. 그러나, 이러한 추가적인 실시예는 또한 부분적으로 재배치된 대형 오브젝트의 FromSpace(420)로부터의 판독에 대한 배리어를 제공한다. 이런 방식으로, 이러한 추가적인 실시예는 처리된 오브젝트 참조 없이 대형 오브젝트로의 포인터의 바운드된 정지 시간 업데이트 뿐만 아니라 바운드된 중단 시간 카피를 지원한다.
도 12-14의 실시예에서, 가비지 수집기 프로세스(620)는 카피 단계(MODE = COPY)중에 FromSpace(420) 인스턴스로부터 ToSpace(430) 인스턴스로 대형 오브젝트를 증분 카피하고, 포인터 업데이트 단계(MODE=PTR_UPDATE) 중에 대형 오브젝트로 포인터(즉, objectref)를 증분 업데이트한다. 대형 오브젝트 재배치의 카피 단계 중에, FromSpace(420) 인스턴스로의 뮤테이터 프로세스(610) 기록 액세스는 부분적으로 재배치된 오브젝트 트랩 핸들러, 예를들어 부분적으로 재배치된 오브젝트 트랩 핸들러(1250) 또는 하드웨어 기록 배리어(1440)(도 14)에 의해 적절히 지시되거나 방송된다. 대형 오브젝트 재배치의 포인터 업데이트 단계 중에, FromSpace(420) 인스턴스로의 뮤테이터 프로세스(610) 기록 및 판독 액세스는 ToSpace(430) 인스턴스로 재지시된다.
도 12는 판독 및 기록 배리어와 연관된 Copy-From 레지스터 필드를 포함하는 실시예를 나타내고 있다. 특히, 도 12의 실시예에는 FROM 필드(411), 하드웨어 판독 배리어(1242), 하드웨어 기록 배리어(1241) 및 부분적으로 재배치된 오브젝트 트랩 핸들러(1250)가 포함되어 있다. 하드웨어 판독 배리어(1242) 및 하드웨어 기록 배리어(1241)는 판독 및 기록 배리어 하드웨어(1240)로서 예시적으로 도시되어 있다. 그러나, 어떠한 구현이 되느냐에 따라 하드웨어 기록 배리어(1241) 및 하드웨어 판독 배리어(1242)가 하드웨어를 공유하거나 또는 별도의 하드웨어에 기초할 수도 있다. 한 실시예에서, 저장-지향 바이트코드를 평가하는 정수유닛(142)(도 1) 논리가 하드웨어 기록 배리어(1241)를 제공하고 저장-지향 바이트코드(예를들어, getfield_quick, getfield, aaload 등)를 평가하는 정수유닛(142)이 하드 판독 배리어(1242)를 제공한다.
뮤테이터 프로세스(610)는 수집된 스페이스(630)로부터 및 스페이스로 판독 및 기록 액세스를 수행한다. 주어진 판독 또는 기록 액세스는, 만일 상기 판독 또는 기록 액세스가 부분적으로 재배치된 오브젝트의 FromSpace(420) 인스턴스를 타겟으로 한다면, 판독 및 기록 배리어 하드웨어(1240)에 의해서 선택적으로 트랩된다. 판독 및 기록 배리어 하드웨어(1240)는 FROM 필드(411)의 내용과 기록 액세스(701) 또는 판독 액세스(1202)와 연관된 타겟 objectref 간의 일치에 응답하여 부분적으로 재배치된 오브젝트 트랩 핸들러(1250)를 트리거 한다. 한 실시예에서, 판독 및 기록 배리어 하드웨어(1240)는 모드 필드(1114) 상태에 기초한 하드웨어 판독 배리어(1242)의 행위를 변화시키는 레지스터(144)의 모드필드(1114)에 응답한다. 이러한 실시예에서, 하드웨어 판독 배리어(1242)는 대형 오브젝트 재배치의 포인터 업데이트 단계 동안에만 선택적으로 트랩한다.
예시적인 하드웨어 기록 배리어(1241)이 아래의 논리 식에 의해 설명된다.
if (objectref == FROM) then
generate gc_notify
여기서 gc_notify 는 부분적으로 재배치된 오브젝트 트랩 핸들러(1250)와 같은 트랩 핸들러이다. 당 분야의 기술자들은 상기와 같은 상호 세대별 포인터 저장 트래핑과 같은 다른 기록 배리어 기능을 결합하는 논리 구현을 포함하여, 다양한 적절한 논리 구현을 이해할 수 있을 것이다. 예시적인 하드웨어 판독 배리어(1242)가 아래의 논리 식에 의해 설명된다.
if ((MODE == PTR_UPDATE) && (objectref == FROM)) then
generate gc_notify
선택적인 실시예에서는, 더 큰 트랩 핸들러 오브헤드 비용으로, 부분적으로 재배치된 오브젝트 트랩 핸들러(1250)에 의한 적절한 처리로 대형 오브젝트 재배치의 포인터 업데이트 및 카피 단계 모두에서 선택적으로 트랩하기도 한다.
카피 단계 동안, 부분적으로 재배치된 오브젝트 트랩 핸들러(1250)는, 그렇지 않으면 TO 필드(412) 내에 저장되는 Copy-To 목적지 정보를 위한 메모리 스토리지를 결정하거나 또는 선택적으로 유지한다. 또한, 부분적으로 재배치된 오브젝트 트랩 핸들러(1250)는, 그렇지 않으면 HOWFAR 필드(413) 내에 저장되는 HowFar 정보를 위한 스토리지를 선택적으로 유지하기도 한다. 뮤테이터 프로세스(610)가 대형 오브젝트의 FromSpace(420) 인스턴스로 저장되는 경우, 저장 데이터는 Copy-From 인스턴스(450) 및 Copy-To 인스턴스(450A) 모두로 방송하거나 또는, HOWFAR 정보를 위한 스토리지를 제공하는 실시예에서, 만일 대형 오브젝트의 저장된 TO 필드가 이미 카피되었다면, 상기 HOWFAR 필드 스토리지가 검사되고 상기 저장기는 두 인스턴스 모두로 방송되고, 그렇지 않으면 Copy-From 인스턴스로 지시된다.
포인터 업데이트 단계 동안, 부분적으로 재배치된 오브젝트 트랩 핸들러(1250)는 그의 ToSpace(430) 인스턴스에 부분적으로 재배치된 대형 오브젝트의 FromSpace(420) 인스턴스를 타겟으로하는 판독 및 기록 액세스를 지시한다. 앞에서와 같이, 부분적으로 재배치된 오브젝트 트랩 핸들러(1250)는, 그렇지 않다면, TO 필드(412)에 저장되는 Copy-To 목적지 정보를 위한 메모리 스토리지를 선택적으로 결정하거나 또는 유지한다. 어느 경우에도, 부분적으로 재배치된 오브젝트 핸들러(1250)는 ToSpace(430) 인스턴스로의 판독 및 기록 액세스 모두를 재지시한다. 이러한 방법으로, 부분적으로 재배치된 오브젝트에의 판독 액세스는 최신인 것으로 검증된 ToSpace(430) 인스턴스로 결정된다.
부분적으로 재배치된 오브젝트 트랩 핸들러(1250)에 대한 예시적인 기록 트랩 및 판독 트랩 함수는 다음과 같다:
write_trap() {
if (objectref == FROM) {
store_data => *(TO + offset)
if (MODE == COPY)
store_data => *(objectref + offset)
}
}
read_trap() {
if (objectref == FROM) {
if (MODE == PTR_UPDATE)
read_destination <= *(TO + offset)
else read_destination <= *(objectref + offset)
}
}
여기서, read_destinatiom 은 적재-지향 바이트코드에 대한 목적지이다.
일반적으로, 판독-배리어 경우를 트랩함으로써 부여되는 오버헤드는, 단지 기록 배리어만이 제공되는 경우에의 오버헤드보다 더 큰데, 왜냐하면 판독 액세스는 일반적으로 주어진 명령 스트림에서의 기록 액세스보다 더 흔하게 존재하기 때문이며, 여느 경우에는 기록 액세스가 추가적으로 존재한다. 이러한 이유에 대해, 하드웨어 판독 배리어(1242)는 부분적으로 재배치된 대형 오브젝트의 FromSpace(420) 인스턴스로부터 판독되는 포인터 업데이트 단계를 위해 선택된다. 그러나, 하드웨어 판독 배리어(1242)는, 재배치 단계에 상관없이, 부분적으로 재배치된 대형 오브젝트의 FromSpace(420) 인스턴스로부터 선택적으로 트랩 판독하기도 한다. 이와같은 실시예에서는, 부분적으로 재배치된 오브젝트 트랩 핸들러(1250)는 Copy-From 인스턴스(450) 및 Copy-To 인스턴스(450A)를 오버래핑하는 것을 지능적으로 처리하도록 구성될 수 있다. 도 15는 카피된 부분(1561)이 to 인스턴스(1570)의 부분(1571)으로 카피된 from 인스턴스(450) 및 to 인스턴스(1570)의 오버래핑을 설명하고 있다. FROM 필드(411), TO 필드(412) 및 HOWFAR 필드(413)는 위에서 설명한 바와 같이, 부분적으로 재배치된 오브젝트 상태를 부호화한다. 도 15의 실시예에서, 가비지 수집기 프로세스(620)는 from 인스턴스(1560) 및 to 인스턴스(1570)의 상대적인 오버랩에 의존하는 뒷부분에서부터 앞부분까지(또는 앞에서부터 뒤까지)의 대형 오브젝트를 카피한다. from 및 to 인스턴스의 오버랩을 용이하게 하기 위해, 부분적으로 재배치된 오브젝트 트랩 핸들러(1550)는 기록을 방송하지 않고, 대신 from 인스턴스(1560)로 카피되지 않은 부분(1560)을 타겟으로하는 기록을 지시하고, to 인스턴스(1570)로 카피된 부분(1561)을 타겟으로하는 기록을 지시한다. 부분적으로 재배치된 오브젝트 핸들러(1250)의 기록 트랩 함수에 대한 적절한 변형예는 다음과 같다;
write_trap() {
if (objectref == FROM) {
if (COPY_DIRECTION == BACK_TO_FRONT) {
if ((offset ≥ HOW_FAR) ∥
(MODE == PTR_UPDATE))
store_data => *(TO + offset)
else store_data => *(objectref + offset)
}
else { /* COPY_DIRECTION == FRONT_TO_BACK */
if ((offset ≤ HOE_FAR) ∥
(MODE == PTR_UPDATE))
store_data => *(TO + offset)
else store_data => *(objectref + offset)
}
}
}
여기서, COPY_DIRECTIOM 은 각각 from 필드(411) 및 to 필드(412)에 의해 부호화된 것과 같이 from 인스턴스(1560) 및 to 인스턴스(1570)의 상대적인 위치로부터 확정할 수 있다. 적재-지향 액세스를 적절하게 재지시하기 위해 부분적으로 재배치된 오브젝트 트랩 핸들러(1250)의 판독 트랩 함수에의 변형예들은 유사하다.
도 13은 관련된 판독 및 기록 배리어 하드웨어(1340)가 있는 Copy-From 레지스터(예를들어 from 필드(411))에 더하여 Copy-To 레지스터 필드(예를들어 to 필드(412))를 포함하는 실시예를 나타내고 있다. 앞에서와 같이, 이 실시예에는 판독 및 기록 배리어 하드웨어(1340)가 대형 오브젝트 재배치의 카피단계 및 포인터 업데이트 단계를 구별하게 하는 가비지 수집기 프로세스(620)에 의해 유지된 모드 표시(예를들어 레지스터(144)의 모드 필드(1114))를 포함하고 있다. 도 12의 실시예와 비교하면, 도 13의 실시예는(예를들어 from 필드(411)의 내용에 의해 식별된 오브젝트의 to 필드를 저장하기 위한 하드웨어 판독 배리어(1342) 및 from 필드(411)의 내용의 의해 식별된 오브젝트의 to 필드를 저장하기 위한 하드웨어 기록 배리어(1341)와 같은) 하드웨어내의 판독 배리어 및 기록 배리어 지원 모두를 제공하여, 부분적으로 재배치된 오브젝트 트랩 핸들러(1250) 및 그와 관련된 오버헤드를 제거하는 장점이 있다.
하드웨어 내에 레지스터(144) 내의 to 필드(412)와 같은 Copy-To 레지스터 필드를 유지함으로서, Copy-From 인스턴스로의 기록 액세스는 카피 단계(MODE=COPY) 동안, 소프트웨어 트랩 핸들러 방해없이 하드웨어 기록 배리어(1341)에 의해 Copy-From 및 Copy-To 인스턴스 모두에 방송될 수 있다. 포인터 업데이트 단계(MODE=PTR_UPDATE) 동안, Copy-From 인스턴스로의 기록 액세스는 하드웨어 기록 배리어(1341)에 의해 다시 소프트웨어 트랩 핸들러 방해없이, Copy-To 인스턴스로 재지시된다. Copy-From 인스턴스로부터의 판독 액세스도 상기 포인터 업데이트 단계 동안, 소프트웨어 트랩 핸들러 방해없이 하드웨어 판독 배리어(1342)에 의해 Copy-To 인스턴스로 재지시된다. Copy-From 인스턴스로의 카피단계 판독 액세스는 정상적으로 완료된다.
한 실시예에서, 판독 및 기록 배리어 하드웨어(1340)가 바이트코드를 평가하는 정수유닛(142)(도 1) 논리에 의해 제공된다. 하드웨어 기록 배리어(1341)는 적재-지향 바이트코드를 평가하는 정수유닛(142) 논리에 의해 제공되며, 하드웨어 판독 배리어(1342)는 적재-지향 바이트코드를 평가하는 정수유닛(142) 논리에 의해 제공된다.
카피단계 동안, 하드웨어 판독 배리어(1342)를 구현하는 논리는 objectref 및 to 필드(412)의 내용에 의해 각각 식별된 Copy-From 및 Copy-To 인스턴스 모두로 store_data 를 방송하고, 반면에, 포인터 업데이트 단계 동안 하드웨어 기록 배리어(1342)를 구현하는 논리는 Copy-To 인스턴스에만 store_data 를 재지시한다. 예시적인 하드웨어 기록 배리어(1342)가 아래의 논리 식으로 설명된다.
if (objectref == FROM) {
store_data => *(TO + offset)
if (MODE == COPY)
store_data => *(objectref + offset)
}
비슷하게, 예시적인 하드웨어 판독 배리어(1341)는 아래의 논리 식으로 설명된다.
if (objectref == FROM) {
if (MODE == PTR_UPDATE)
read_destination <= *(TO + offset)
else read_destination <= *(objectref + offset)
}
여기서, 각 경우에, offset 은 저장-지향 또는 적재-지향 바이트코드에 관계된 타겟 필드의 대형 오브젝트로의 오프셋이다. 당 기술분야의 통상의 지식을 가진 자는 앞서 설명한 바와 같이, 세대간 포인터 저장 트래핑 등의 다른 기록 배리어 기능이 있는 하드웨어 기록 배리어(1342)를 결합하는 구현 뿐만 아니라, 하드웨어 판독 배리어(1341) 및 하드웨어 기록 배리어(1342)를 결합하는 논리 구현을 포함하여, 다양한 적절한 논리 구현을 알 수 있을 것이다. to 필드(412)가 하드웨어 기록 배리어(1342) 및 하드웨어 판독 배리어(1341) 모두에 이용가능하기 때문에, 방송 및 재지시가 하드웨어에서 수행될 수 있고 소프트웨어 트랩 오버헤드가 제거된다.
도 14는 How-Far 레지스터 필드(예를들어 HOWFAR 필드(413))가 부가된 실시예를 나타내고 있다. 도 13의 실시예와 같이, 판독 및 기록 배리어 하드웨어(1440)는 Copy-From 인스턴스(450)으로부터 및 인스턴스(450)로의 판독 및 기록 액세스에 배리어를 제공한다. 또한, 판독 및 기록 배리어 하드웨어(1440)는, 저장-지향 또는 적재-지향 바이트코드에 의해 참조된 필드가 이미 ToSpace(430) 인스턴스에 복사되었는지의 여부에 따라, 적당한 FromSpace(420) 또는 ToSpace(430) 인스턴스로의 판독 및 기록 액세스를 행한다. HOWFAR 필드(413)와 함께 동작하여, 하드웨어 기록 배리어(1441)는, 하드웨어 기록 배리어(1441)가 모드 필드(1114)의 COPY 상태로 표시된 카피 단계 동안 대형 오브젝트의 아직 카피되지 않은 부분으로 저장의 방송을 보류하도록 하게하는 장점이 있다. 포인터 업데이트 단계 동안, ToSpace(430) 인스턴스는 최신이 되도록 보장되며; 따라서 그에따른 판독 액세스를 재지시함으로써, 하드웨어 판독 배리어(1442)는 하드웨어 프로세서(100)가 포인터 업데이트 단계 동안 저장의 방송을 보류하게 한다. 방송 저장이 제거되기 때문에, 도 14의 실시예는 FromSpace(420) 및 ToSpace(430) 인스턴스의 오버래핑 지원에 특히 적합하다.
한 실시예에서, 판독 및 기록 배리어 하드웨어(1440)는 바이트코드를 평가하는 정수유닛(142)(도 1) 논리에 의해 제공된다. 하드웨어 기록 배리어(1441)는 저장-지향 바이트코드를 평가하는 정수유닛(142) 논리에 의해 제공되며, 하드웨어 판독 배리어(1442)는 적재-지향 바이트코드를 평가하는 정수유닛(142) 논리에 의해 제공된다. 예시적인 하드웨어 기록 배리어(1442)는 아래 논리 식으로 설명된다.
if (objectref == FROM) {
if (COPY_DIRECTION == BACK_TO_FRONT) {
if ((offset ≥ HOW_FAR) ∥
(MODE == PTR_UPDATE))
store_data => *(TO + offset)
else store_data => *(objectref + offset)
}
else { /* COPY_DIRECTION == FRONT_TO_BACK */
if (offset ≤ HOW_FAR) ∥
(MODE == PTR_UPDATE))
store_data => *(TO + offset)
else store_data => *(objectref + offset)
}
}
비슷하게, 예시적인 하드웨어 판독 배리어(1341)는 아래의 논리 식으로 설명된다.
if (objectref == FROM) {
if (COPY_DIRECTION == BACK_TO_FRONT) {
if ((offset ≥ HOW_FAR) ∥
(MODE == PTR_UPDATE))
read_destination <= *(TO + offset)
else read_destinatiom <= *(objectref + offset)
}
else { /* COPY_DIRECTION == FRONT_TO_BACK */
if (offset ≤ HOW_FAR) ∥
(MODE == PTR_UPDATE))
read_destination <= *(TO + offset)
else read_destinaion <= *(objectref + offset)
}
}
여기서, read_destination 은 적재-지향 바이트코드용 목적지이고, 각 경우에서, offset 는 저장-지향 또는 적재-지향 바이트코드와 관련된 타겟 필드의 대형 오브젝트로의 오프셋이다. 당 기술분야의 전문가들은 하드웨어 판독 배리어(1441) 및 하드웨어 기록 배리어(1442)를 결합한 논리 뿐만 아니라 상기 설명한 바와 같은 세대간 포인터 저장 트래핑과 같은 다른 기록 배리어 기능을 가진 하드웨어 기록 배리어(1342)를 결합한 구현을 포함하여 여러가지 적당한 논리 구현을 알 수 있을 것이다.
Copy-To 인스턴스 식별기 저장기에 관련된 판독 및 기록 배리어
도 12-14 의 일련의 변형예들에는, Copy-From 인스턴스 식별기 저장기 보다는 Copy-To 식별기 저장기에 관련된 판독 및 기록 배리어들이 포함되어 있다. 앞서와 같이, 이들 변형예들은 from 필드(411) 및 howfar 필드(413) 지원 등의 추가의 하드웨어 지원의 연속 레벨이 추가되어, 소프트웨어 트랩 핸들러를 제거하고 Copy-From 및 Copy-To 인스턴스(450 및 450A)의 오버랩을 허용한다. 이들 변형예들은, 포인터의 바운드된 정지 시간 카피 및 바운드된 정지시간 업데이트 모두를 부분적으로 재배치된 대형 오브젝트로 지원한다. 지금부터, 이들 변형예들을 도 12-14의 실시예들과 유사하게 설명하도록 하겠는데, 당 기술분야의 통상의 지식을 가진 자는 이 설명에 기초한 적절한 수정을 이해할 것이다.
가비지 수집기 프로세스(630)는, 오브젝트 데이터의 카피 전에, 예를들어, 대형 오브젝트의 FromSpace(420) 인스턴스로부터 ToSpace(430) 인스턴스로 포인터들을 사익 대형 오브젝트로 업데이트한다. 이러한 방식에서, 포인터 업데이트 및 카피 단계의 순서가 바뀐다. 판독 및 기록 배리어들은 Copy-From 인스턴스(450) 대신에 Copy-To 인스턴스(450A)에서 지시된 판독 및 기록 액세스들을 포워드한다. 한 실시예에서, 하드웨어 판독 및 기록 배리어들은 Copy-To 인스턴스(450A)로의 액세스를 트랩하여 부분적으로 재배치된 오브젝트 트랩 핸들러 소프트웨어가 Copy-From 인스턴스로의 실제 포워딩을 수행하도록 자극한다. 상기 부분적으로 재배치된 오브젝트 트랩 핸들러는 그렇지 않으면 howfar 필드(413) 내에 저장되는 HowFar 정보를 위한 스토리지를 선택적으로 유지하기도 한다. 뮤테이터 프로세스(610)가 대형 오브젝트의 ToSpace(420) 인스턴스로 저장할 때, 대형 오브젝트의 저장된 to 필드가 이미 카피되었다면 저장된 데이터는 copy-to 인스턴스(450A)로 지시되고, 그렇지 않으면 copy-from 인스턴스(450)로 지시된다. 마찬가지로, 뮤테이터 프로세스(610)가 대형 오브젝트의 ToSpace(420) 인스턴스로부터 적재하는 경우, 대형 오브젝트의 저장된 to 필드가 이미 카피되었다면, 상기 적재는 copy-to 인스턴스로부터 수행되고, 그렇지 않으면, copy-from 인스턴스(450)로부터 수행된다. 오버랩된 FromSpace(420) 및 ToSpace(430)를 위한 지원이 도 12 및 도 14의 실시예에 대한 앞서의 상세한 설명에서 설명하였다. 대안적으로, 만일 오버래핑 영역을 위한 지원이 필요없다면, 상기 판독 배리어는 Copy-From 인스턴스로 적재를 조종할 수 있으며, 상기 기록 배리어는 Copy-From 및 Copy-To 인스턴스 모두로 저장을 방송할 수 있다.
상기와 같이, 소프트웨어 트랩 오버헤드는 상기 하드웨어 내에 더 많은 래지스터 및 더 복잡한 동작을 집어 넣음으로써 제거될 수 있다. 예를들어, 한 실시예에는 to 필드(412) 및 from 필드(411)가 포함되어 있다. 저장 타겟 및 to 필드(412)간의 일치에 응답하는 하드웨어 기록 배리어는 copy-to 인스턴스(450A) 및 copy-from 인스턴스(450) 모두로 저장을 방송한다. 적재 소스 및 to 필드(412)간의 일치에 응답하는 하드웨어 판독 배리어는 copy-from 인스턴스(411)로 적재를 재지시한다. 다른 실시예에서는, from 필드(411) 및 to 필드(412)에 추가하여, howfar 필드(413)가 포함되어 있다. 하드웨어 기록 배리어 및 하드웨어 판독 배리어는 copy-to 인스턴스(450A)의 카피된 부분으로 그리고 copy-from 인스턴스(450)의 카피되지 않은 부분으로 저장 및 적재를 지시한다. 당 기술분야의 통상의 지식을 가진 자는 이상의 설명에 기초하여 이들 각 실시예들에 적절한 논리를 알 수 있을 것이다.
오브젝트 참조 포멧
도 16은 하드웨어 프로세서(100)내에 나타나 있는 오브젝트 참조(objecref)의 한 실시예를 나타낸다. 상기 objectref 의 세 비트는 앞서 언급한 PCT 국제 출원 PCT/US98/07622 호인 "GENERATION ISOLATION SYSTEM AND METHOD FOR GARBAGE COLECTION" 에서 설명된 바와 같은 가비지 수집 힌트로 사용될 수 있다. 추가 핸들 비트(H)는 오브젝트가 어느 처리를 통해 직접적으로 또는 간접적으로 objectref 에 의해 참조되었는지를 나타낸다. 이 처리는 그에따른 포인터(또는 objectrefs)의 대규모 업데이트 없이 메모리 오브젝트의 재배치를, 인디렉션의 추가 레벨 비용이 들더라도, 쉽게하는 참조 방법을 제공한다. 이들 두 필드 모두는 하드웨어 프로세서(100)의 정수유닛(142)(도 1)에 제공되어지기 전에 마스크 아웃된다.
하드웨어 프로세서(100) 및 수집된 스페이스(630)(도 6-14)의 한 실시예에서, 오브젝트(1700)는 헤더부(1710) 및 인스턴스 변수 스토리지부(1720)를 포함하는 메모리내에 있게된다. 도 17A 는 이러한 실시예의 하나를 보여주고 있다. 헤더부(1710)에는 오브젝트의 클래스를 나타내는 방법 벡터 테이블 베이스부(1712) 및 상기 가비지 수집기를 위한 상기 오브젝트 및 정보의 동기 상태를 위해 준비된 추가 스토리지(1714)의 5 비트 및 오브젝트의 클래스가 포함되어 있다. 선택적으로, 모니터 포인터(1716) 등의 제2 헤더-워드는 상기 오브젝트를 위해 할당된 모니터의 어드레스를 포함할 수 있어서, 제1 헤더 워드내의 추가 스토리지(1714)의 모든 5 비트를 가비지 수집기 정보로서 이용가능하게 할 수 있다. 도 17A 의 실시예에서, 오브젝트 참조(objectref)는 방법 벡터 테이블 베이스부(1712)의 위치를 지적하여 방법 호출의 오버헤드를 최소화 한다.
헤더부(1710)의 3 비트는 수집기 프로세스(620)와 같은 가비지 수집기에 이용가능하다. 헤더부(1710)에서, 헤더가 포인터로 취급되는 경우 3개의 하위-비트 헤더(헤더[2:0]) 및 2개의 상위-비트(헤더[31:30])가 마스크 오프된다. 이들 3개의 3비트(헤더[31;30,2])는 오브젝트(1700)에 관한 정보를 저장하기 위해 가비지 수집기에 사용가능하다. 비트 "1" 및 "0" 은 오브젝트 동기를 위한 룩(LOOK) 및 원트(WANT) 비트를 홀드하는데 사용되기도 한다. 대안적으로, 모니터 포인터(1716)와 같은 제2 헤더 워드가 모든 5개의 비트를 가비지 수집기 지원을 위해 남겨두고서, 오브젝트(1700)의 동기상태를 유지하기 위해 제공될 수 있다. 가비지 수집기 지원을 위한 비트들이 사용되는 방법은 가비지 프로세스(620) 및, 필요한 경우, 가비지 수집 트랩 핸들러를 구현하는 가비지 수집 방법의 특정 타입에 따라 다르다. 가능한 사용은 마크 비트 및 한 세대 내의 오브젝트의 나이를 계산하는 카운터 비트 등이 포함된다. 이상 설명한 바와 같이, 헤더부(1710)의 선택적인 제2 헤더-워드 실시예에서, 5개의 비트가 수집기 프로세스(620)와 같은 가비지 수집기에 이용가능하다.
도 17A의 실시예에서, 인스턴스 변수 스토리지부(1720)는 방법 벡터 테이블 베이스부(1712)의 한 워드 다음부터 시작하고 오브젝트(1700)의 인스턴스 변수들을 포함하고 있다. objectref 의 최하위 비트는 참조가(==1)로 다루어졌는지 아닌지(==0)를 식별한다. 도 17B에는 대안전인 "처리된" 오브젝트 포멧이 나타나 있다. 오브젝트(1700b)가 생성될 때 처리된 참조가 확립되어 모든 후속 참조들은 이 처리, 즉 상기 오브젝트를 액세스 하는 스토리지 포인터(1750b)를 따른다. 이러한 지원은 인스턴스 변수들을 위한 것을 포함하여 하부의 오브젝트 스토리지보다는 핸들들을 카피함으로써 오브젝트 재배치 동안에 포인터 업데이트 비용을 감소시키는 몇 가지 타입의 가비지 수집기에 제공된다.
처리된 오브젝트 참조들은 도 7-9를 참조하여 앞서 설명한 바와 같은 가비지 수집기 시스템들이 포인터 업데이트를 위한 바운드된 정지 시간 성능을 카피된 오브젝트로 나타나게 한다. 포인터를 참조하는 여러개의 바운드된 정지 시간 포인터 업데이트가 도 10-14를 참조하여 앞서 설명한 실시예에 제공된 배리어 구성에 의하여 지원되는 다른 가비지 수집 시스템들에서는, 직접적인 오브젝트 참조가 바람직하다.
본 발명은 다양한 실시예를 참조하여 설명하였지만, 이 실시예들은 설명을 위한 것이며, 본 발명의 범위가 이것으로 제한되는 것은 아니다. 제1 명령, 제2 명령, 제3 명령 등과 같은 청구항에 기재된 용어들은 오직 식별을 위한 것일 뿐이며 특정한 순서를 요하는 것으로 이해되어서는 안된다. 설명된 상기 실시예의 여러 변형, 수정, 추가, 개량이 가능하다. 예를들어, 본 발명에서는 JAVA 프로그래밍 언어 및 JAVA 가상머신에 관한 예시적인 실시예를 참조하여 설명하였지만, 이에 제한되는 것이 아니고, 대신, 광범위한 프로세서 환경(가상 및 실제 모두의 경우)를 위한 시스템, 제품, 방법, 및 장치를 통합한다. 또한, 어떤 실시예에서는 하드웨어에 대하여 설명되었지만, 상기 설명에 따라 부분적으로 재배치된 오브젝트 식별기 저장기 및 그에따라 응답하는 배리어(또는 배리어들)를 구현하는 적절한 가상머신 구현(JAVA에 관련된 것이든 아니든 상관없이)에는 바이트코드 번역기 또는 실시간(JIT) 컴파일러와 같은, 소프트웨어 가상머신 명령 프로세서 구현이 포함되어 있다. 이들 및 다른 변형, 수정 및 개량은 아래의 청구항에 의하여 정의된 본 발명의 범위에 포함되는 것이다.
Copt-From 인스턴스 식별기 저장기와 관련된 기록 배리어
도 7은 관련된 기록 배리어가 있는 Copy-From 레지스터를 가진 실시예를 나타낸다. 특히, 도 7의 실시예에는 부분적으로 재배치된 오브젝트 식별기 저장기(410)의 FROM 필드(411)(도 4 참조), 하드웨어 기록 배리어(740) 및 부분적으로 재배치된 오브젝트 트랩 핸들러(750)가 포함되어 있다. 도 7의 실시예에서, FROM 필드(411)는 하드웨어 프로세서(100)의 레지스터(144) 내에 있다. 뮤테이터 프로세스(610), 가비지 수집기 프로세스(620) 및 부분적으로 재배치된 오브젝트 트랩 핸들러(650)에는 하드웨어 프로세서(100)상에서 실행가능한 소프트웨어가 포함되어 있다. 이 실시예는 대형 오브젝트의 증분 가피를 촉진한다. 그러나, 추가적인 지원이 없다면, 이 실시예는 보급형으로 재배치된 오브젝트의 ToSpace(430) 인스턴스에 대한 다수개의 포인터의 증분 업데이트에는 그리 적절하지 못하다. 그럼에도 불구하고, 예를들어, 도 17B 를 참조하여 아래에 설명된 것과같이, 핸들러를 통해 참조된 오브젝트가 있는 가비지 수집 시스템을 위해서는, 하나의 처리를 ToSpace(430) 인스턴스로 업데이트하는 것이 사소한 것일 수 있으므로, 그와같은 실시예는 하드웨어 요구를 줄이고 바운드된 정지 시간 재배치를 위해 실행가능하다.
뮤테이터 프로세스(610)는 수집된 스페이스(630)로부터 및 스페이스로 판독기 및 기록 액세스를 한다. 판독 액세스는 가비지 수집 지원을 받지 않는다. 그러나, 기록 액세스는 하드웨어 기록 배리어(740)에 의해 선택적으로 트랩된다. 하드웨어 기록 배리어(740)는 FROM 필드(411)의 내용과 기록 액세스(701)와 관련된 타겟 objectref 간의 일치에 응답하여 부분적으로 재배치된 오브젝트 트랩 핸들러(750)를 트리거한다. 이 실시예에서, 부분적으로 재배치된 오브젝트 트랩 핸들러(750)는, 그렇지 않으면 TO 필드(412)에 저장되는 Copy-To 목적지 정보를 결정하거나 또는 메모리 스토리지를 선택적으로 유지한다. 또한, 가비지 수집 소프트웨어가 그렇지 않으면 HOWFAR 필드(413)에 저장되는 HowFar 정보를 위한 스토리지를 선택적으로 유지하기도 한다. 뮤테이터 프로세스(610)가 대형 오브젝트의 FromSpace(420) 인스턴스에 저장할 때, 저장 데이터는 Copy-From 인스턴스(450) 및 Copy-to 인스턴스(450A)에 모두 방송되거나, 또는 HOWFAR 정보를 위한 스토리지를 제공하는 실시예에서는, HowFar 스토리지는 검사되고 만일 대형 오브젝트의 필드로 저장된 것이 이미 카피되었다면 그 저장은 방송되며, 그렇지 않다면 Copy-From 인스턴스(450)로 지시된다. 당 기술분야의 통상의 지식을 가진 자는 가비지 수집기 프로세스(620)가 부분적으로 재배치된 오브젝트 트랩 핸들러(750)에 이용가능한 TO 필드 및 HOWFAR 필드 저장변수(751)를 업데이트할 수도 있는 여러 방법을 이해할 것이다. 업데이트(701)는 그러한 적절한 방법으로 이루어진다.
앞서 설명한 바와 같이, 가비지 수집기 프로세스(620)는 대형 오브젝트의 Copy-From 인스턴스(450)를 식별하기 위해 부분적으로 재배치된 오브젝트 식별기 저장부(410)의 FROM 필드(411)를 업데이트한다. 이 실시예에서, Copy-To 인스턴스로의 포인터는, 카피가 완료된 후 대형 오브젝트를 위한 처리가 업데이트될 때 까지 뮤테이터 프로세스(610)에서는 사용가능하지 않다. 따라서, Copy-To 인스턴스(450A)로의 액세스에 대한 배리어는 유지될 필요가 없다. 이 실시예는 오러랩된 Copy-From 및 Copy-To 인스턴스를 위한 구성은 아니다; 그러나, 오버랩된 인스턴스를 위한 지원은 많은 재배치 수집 방법, 예를들어 세대별 이용 또는 카피 수집기 방법 등에서는 필요하지 않다.
한 실시예에서, 하드웨어 기록 배리어(740)는 저장-지향 바이트코드(예를들어, putfield_quick, putfield, aastore, 등)를 평가하는 정수유닛(142)(도 1) 논리에 의해 제공된다. 이와같은 실시예에서, 논리 구현 하드웨어 기록 베리어(740)는 FROM 필드(411)의 내용에 의해 식별된 Copy-From 인스턴스로의 기록을 트랩한다. 예를들어, 하드웨어 기록 배리어(640A)의 바람직한 동작은 아래의 논리 식으로 설명된다.
if (objectref == FROM) then
generate gc_notify
여기서, gc_notify 는 예시적인 트랩 핸들러이다. 당업자는 위에 기술된 세대간 포인터 저장 트래핑 등의 다른 기록 배리어 기능을 조합하는 논리 구현을 포함하는 여러 적절한 논리 구현을 이해할 수 있을 것이다. How far 정보는 하드웨어 기록 배리어(740)에 의해 더 나은 테일러 트래핑을 위해 레지스터(144)(도 4 참조, 도 7에는 도시하지 않음)의 HOWFAR 필드(413)로서 방송이 필요한 경우에만 선택적으로 제공되어서, 부분적으로 재배치된 오브젝트 트랩 핸들러(750) 호출과 관련된 오버헤드를 줄인다.
도 8은 관련된 기록 배리어(840)가 있는 Copy-From 레지스터 필드(예를들어 FROM 필드(411))에 더하여 Copy-To 레지스터 필드(예를들어 TO 필드(412))를 포함하는 실시예를 나타낸다. 도 8의 실시예에는 FROM 필드(411)의 내용에 의해 식별된 오브젝트의 필드로 저장하기 위해 기록 배리어가 제공되는데, 부분적으로 재배치된 오브젝트 트랩(750) 및 이와 관련된 오버헤드가 제거되는 장점이 있다. 이 실시예는 대형 오브젝트의 증분(바운드된 정지 시간) 카피를 촉진시키긴 하지만, 도 7과 같이, 카피된 오브젝트의 ToSpace(430) 인스턴스로 여러 포인터의 바운드된 정지 시간 업데이트에는 적합하지는 않다. 앞서 설명한 바와 같이, 처리된 오브젝트 참조는 이러한 제한을 줄일 수 있고, 심지어 보급형의 대형 오브젝트의 전체적인 바운드된 정지시간 재배치를, 추가적인 수단 레벨의 비용을 들여서 하게한다.
하드웨어에, 레지스터(144)내의 to 필드(412)와 같은 Copy-To 레지스터 필드를 유지함으로써, Copy-From 인스턴스로의 기록 액세스는 소프트웨어 트랩 핸들러 간섭없이 하드웨어 기록 배리어(840)에 의해 Copy-From 및 Copy-To 에 모두 방송될 수 있다. 한 실시예에서, 하드웨어 기록 배리어(840)는 저장-지향 바이트코드를 평가하는 정수유닛(142)(도 1) 논리에 의해 제공된다. 그러한 실시예에서, 논리 실행 하드웨어 기록 배리어(840)는 store_data 를 TO 필드(412)의 내용 및 objectref 의해 각각 식별된 Copy-From 및 Copy-To 인스턴스 모두에 방송한다. 예시적인 하드웨어 기록 배리어(840)는 아래의 논리 식으로 설명된다.
if (objectref == FROM) {
store_data => *(objectref + offset)
store_data => *(TO + offset)
}
여기서, offset 는 저장-지향 바이트코드와 관련된 타겟 필드의 대형 오브젝트로의 오프셋이다. 당업자는 위에 설명된 세대별 상호간의 포인터 저장 트래핑과 같은 다른 기록 배리어 기능을 조합하는 논리 구현을 포함하는 여러가지 적절한 논리 구현을 이해할 것이다. TO 필드(412)가 하드웨어 기록 배리어(840)에 이용가능하므로, 방송은 하드웨어에서 실행되고 소프트웨어 트랩 오버헤드는 제거된다.
도 9는 관련된 하드웨어 기록 배리어(940)가 있는 Copy-From 레지스터 필드(예를들어 FROM 필드(411)) 이외에 Copy-To 및 How-Far 레지스터 필드(예를들어 to 필드(412) 및 howfar 필드(413))을 포함하는 실시예를 나타낸다. 도 9의 실시예는 FROM 필드(411)의 내용에 의해 식별된 오브젝트의 필드로 저장하기 위해 기록 배리어를 제공하는데, 부분적으로 재배치된 오브젝트 트랩 핸들러(650) 및 그와 관련된 오버헤드를 제거하는 동안, 하드웨어 기록 배리어(940)가 상기 대형 오브젝트의 아직 카피되지 않은 부분으로 저장기의 방송을 진행시키게 하는 장점이 있다. 앞의 실시예에서와 같이, 이 실시예는 대형 오브젝트의 증분 카피를 촉진시키기는 하지만, 카피된 오브젝트의 ToSpace(430) 인스턴스에의 많은 수의 포인터의 바운드된 정지 시간 업데이트에는 매우 적합하지는 않다. 앞에서와 같이, 처리된 오브젝트 참조는 이러한 제한을 감소시켜, 심지어 보급형의 대형 오브젝트의 전체적인 바운드된 정지 시간 재배치를, 추가적인 수단 레벨의 비용을 들여서 하게한다.
하드웨어내에 레지스터내의 필드(412)와 같은 Copy-To 레지스터 필드를 유지함으로서, Copy-From 인스턴스로의 기록 액세스는 하드웨어 기록 배리어(940)에 의한 Copy-From 및 Copy-To 인스턴스 모두에 방송될 수 있다. 하드웨어내에 레지스터내의 howfar 필드(413)와 같은 How-Far 레지스터 필드를 더 유지함에 의해, 기록 액세스의 특정 타겟 필드가 이미 ToSpace(430)에 카피된 그러한 기록 액세스로 방송이 제한될 수 있다. 이들 중 어느 한 경우에, 부분적으로 재배치된 오브젝트로의 기록 액세스의 처리는 소프트웨어 트랩 핸들러 간섭이 없다. 한 실시예에서, 하드웨어 기록 배리어(940)는 저장-지향 바이트코드의 평가하는 정수유닛(142)(도 1) 논리에 의해 제공된다. 이와같은 실시예에서, 만일 타켓 오브젝트 필드가 이미 대형 오브젝트의 카피된 부분내에 있다면 Copy-From 및 Copy-To 인스턴스 모두로 store_data 를 방송하고, 상기 타겟 오브젝트 필드가 아직 상기 대형 오브젝트에 카피되지 않았다면 store_data 를 Copy-From 인스턴스로 지시한다. 예시적인 하드웨어 기록 배리어(940)는 아래의 논리 식에 의해 설명된다.
if (objectref == FROM) {
if offset > HOWFAR then
store_data => *(TO + offset)
store_data => *(objectref + offset)
}
여기서, offset 는 저장-지향 바이트코드와 관련된 타겟 필드의 대형 오브젝트로의 오프셋이다. 어느 실시예에서는, Copy-From 인스턴스로의 store_data 의 지시는 단지 하드웨어 기록 배리어(940) 간섭없이 기록 액세스를 정상적으로 완료하는 것을 간단히 허용함으로서 제공되기도 한다. 당업자는 위에 설명된 세대별 상호간의 포인터 저장 트래핑과 같은 다른 기록 배리어 기능을 조합하는 논리 구현을 포함하여, 다수의 적절한 논리 구현을 이해할 수 있을 것이다. HOWFAR 필드(413)가 하드웨어 기록 배리어(940)에 이용가능하므로, 하드웨어 기록 배리어(940)는 store_data 를 Copy-To 인스턴스로 선택적으로 진행시킬 수 있다. 이 간단한 최적화는 두 개의 기록을 방송하는 것보다 오직 하나의 기록을 방송함에 의해 성능을 향상시킬 수 있다.
Copy-From 및 Copy-To 인스턴스 식별기 저장기 모두에 관련된 기록 배리어
지금부터 도 10 및 도 11을 참고하여 추가적인 실시예를 설명한다. 앞서 설명한 몇 몇 실시예에서와 같이, 이러한 추가적인 실시예는 하드웨어 지원(예를들어, 하드웨어 기록 배리어 및 부분적으로 재배치된 오브젝트 식별기 저장기(410))을 이용하여 소프트웨어 트랩 핸들러 게재없이 부분적으로 재배치된 대형 오브젝트의 FromSpace(420) 인스턴스로의 기록을 적절히 처리한다. 그러나, 또한, 이러한 추가적인 실시예는 부분적으로 재배치된 대형 오브젝트의 ToSpace(430) 인스턴스로의 기록을 위해 배리어를 제공한다. 이러한 방식에서, 이러한 추가적인 실시예는 처리된 오브젝트 참조 없이 대형 및/또는 보급형 오브젝트의 전체적인 바운드된 중단 시간 재배치를 위하여 보급형 오브젝트로의 포인터의 증분 업데이트 및 대형 오브젝트의 증분 카피 모두를 지원한다.
도 10 및 도 11의 실시예에서, 가비지 수집기 프로세스(620)는 대형 오브젝트의 포인터(즉, objectrefs)를 증분 업데이트 한다. FromSpace(420) 인스턴스 또는 ToSpace(430) 인스턴스 중 어느 하나로 기록 액세스를 하는 뮤테이터 프로세스(610)는 objectrefs 가 업데이트 되는 동안 두 개의 인스턴스가 "동기" 되어 유지되도록 하드웨어 기록 배리어(1040) 또는 하드웨어 기록 배리어(1140) 등의 하드웨어 기록 배리어에 의해 방송된다(또는 적절히 지시된다). 두 개의 인스턴스가 동기되어 유지되기 때문에, 메모리 참조 구조는 일부 objectrefs 가 FromSpace(420) 인스턴스를 참조하고 다른 것은 해당하는 ToSpace(430) 인스턴스를 참조하는 참조 상태로 견고하게 된다. 대형 오브젝트를 참조하는 objectrefs 의 바운드된 정지 시간 업데이트는 ToSpace(430) 인스턴스(FromSpace(420) 인스턴스보다는)를 참조하는 이러한 objectrefs 를 증분 업데이트 함으로써 달성된다. 도 10 및 도 11의 실시예에서, FromSpace(420) 인스턴스 및 ToSpace(430) 인스턴스가 겹치지 않을 수도 있다는 것에 주의하라.
도 10을 참조하면, 하드웨어 기록 배리어(1040)는 Copy-From 인스턴스(450) 또는 Copy-To 인스턴스(450A) 로의 기록 액세스에 배리어를 제공한다. 하드웨어 기록 배리어(1040)는 하드웨어 기록 배리어(840)를 참조하여 앞서 설명한 바와 같이, 증가하는 바운드된 정지 시간 카피를 지원한다. 그러나, 하드웨어 기록 배리어(1040)는 또한 Copy-To 레지스터 필드(즉, 필드(412))에 응답한다. Copy-From 인스턴스(450) 또는 Copy-To 인스턴스(450A)로의 기록 액세스는 두 인스턴스의 데이터 상태가 동기되도록 Copy-From 인스턴스(450) 및 Copy-To 인스턴스(450A) 모두에 방송된다. 이러한 방식으로, 부분적으로 재배치된 오브젝트로의 objectrefs 는 어느 인스턴스로의 판독 액세스가 동일한 필드 상태로 되기 때문에, 증분 업데이트될 수도 있다.
한 실시예에서, 하드웨어 기록 배리어(1040)는 저장-지향 바이트코드를 평가하는 정수유닛(142)(도 1) 논리에 의해 제공된다. 이러한 실시예에서, 논리 구현 하드웨어 기록 배리어(1040)는 store_data 를 FROM 필드(411) 및 TO 필드(412)의 내용에 의해 각각 확인되는 Copy-From 및 Copy-To 인스턴스 모두로 방송된다. 예식적인 하드웨어 기록 배리어(1040)는 아래의 논리 식으로 설명된다.
if ((objectref == FROM) ∥ (objectref == TO)) {
store_data => *(FROM + offset)
store_data => *(TO + offset)
}
여기서 offset 는 저장-지향 바이트코드에 연관된 타겟 필드의 대형 오브젝트로의 오프셋이다. 당업자라면, 상기 설명된 세대간의 포인터 저장 트래핑과 같은 다른 기록 배리어 기능이 결합된 논리 구현을 포함하는 다양한 적절한 논리 구현을 이해할 수 있을 것이다. FROM 필드(411) 및 TO 필드(412)가 하드웨어 기록 배리어(1040)에서 이용가능하기 때문에, 이에의해 각각 확인된 Copy-From 인스턴스(450) 및 Copy-To 인스턴스(450A) 로의 저장이 인식될 수 있으며, 이 두 인스턴스로의 방송이 소프트웨어 트랩 오버헤드 없이 하드웨어에서 수행될 수 있다.
도 11은 How-Far 레지스터 필드(예를들어 HOWFAR 필드(413)) 및 Mode 명령(예를들어 레지스터(144)의 mode 필드(1114))를 더하는 실시예를 나타낸다. 도 10의 실시예에서와 같이, 하드웨어 기록 배리어(1140)는 Copy-From 인스턴스(450) 또는 Copy-To 인스턴스(450A) 중 어느 하나로의 기록 액세스에 배리어를 제공한다. 하드웨어 기록 배리어(1140)는 FromSpace(420) 및 ToSpace(430) 인스턴스의 카피된 부분이 동기되어 유지되는 것을 보장함으로써, 증분의 바운드된 정지 시간 카피를 지원한다. 하드웨어 기록 배리어(1140)는 하드웨어 프로세서(100)가 도 11의 실시예에서 모드 필드(1114)의 COPY 상태로 표시된 카피 단계 중에 상기 대형 오브젝트의 아직 카피되지 않은 부분으로의 저장의 방송을 보류하게 하는 장점이 있다. 그러나, 모드 필드(1114)의 PTR_UPDATE 상태로 표시된 포인터 업데이트 단계 중에, Copy-From 인스턴스(450) 또는 Copy-To 인스턴스(450A) 중 어느 하나로의 기록 액세스는 Copt-From 인스턴스(450) 및 Copt-To 인스턴스(450A) 모두로 방송된다. 가비지 수집기 프로세스(620)는 대형 오브젝트 재배치의 현재 단계에 대응하도록 모드 필드(1114)를 업데이트한다.
한 실시에에서, 하드웨어 기록 배리어(1140)는 저장지향 바이트코드의 평가하는 정수유닛(142)(도 1) 논리에 의해 제공된다. 이러한 실시예에서, 논리 구현 하드웨어 기록 배리어(1140)는 타겟 오브젝트 필드가 대형 오브젝트의 이미 카피된 부분에 있다면 또는 대형 오브젝트가 완전히 카피되고 재배치가 포인터 업데이트 단계에 들어갔다면, Copy-From 및 Copy-To 인스턴스 모두에 store_data 를 방송한다. 카피 단계중에, 논리 구현 하드웨어 기록 배리어(1140)는 상기 타겟 오브젝트 필드가 상기 대형 오브젝트의 아직 카피되지 않은 부분에 있다면 store_data 를 Copy-From 인스턴스로 보낸다. 예시적인 하드웨어 기록 배리어(1140)는 아래와 같은 논리 식에 의해 설명된다.
if ((objectref == FROM) ∥ (objectref == TO)) {
if ((offset ≥ HOWFAR) ∥ (MODE == PTR_UPDATA)) then
store_data => *(TO + offset)
store_data => *(FROM + offset)
}
여기서, 모드필드(1114)의 상태, MODE 는 재배치 단계(예를들어 COPY 또는 PTR_UPDATE)를 나타내고, 오프셋은 저장-지향 바이트코드와 연관된 타겟 필드의 대형 오브젝트로의 오프셋이다. 당업자라면 앞서 설명한 바와 같이, 세대간 포인터 저장 트래핑과 같은 다른 기록 배리어 기능성을 결합하는 논리 구현을 포함하는 다양한 적합한 논리 구현을 인식할 수 있을 것이다. HOWFAR 필드(413) 및 모드 필드(1114)는 하드웨어 기록 배리어(1140)에 이용될 수 있기 때문에, 하드웨어 기록 배리어(1140)는 포인터 업데이트 단계 중에 기록을 방송하면서 대형 오브젝트 배재치의 카피 단계 중에 store_data 를 Copy-To 인스턴스로 기록하는 것을 선택적으로 보류할 수 있다. 이러한 약간의 최적화는 카피 단계 중에 두 개의 기록을 방송하기보다는 하나의 기록을 수행함으로써 성능을 향상시킬 수도 있다. 추가적으로, 재배치 모드는 가비지 수집기 프로세스(620)가 HOWFAR 필드(413)의 상태에서 카피 단계의 완료를 인코딩하게 함으로써 나타날 수도 있다. 당업자라면 상기 논리 식에서 0보다 작거나 같은 HOWFAR 필드(413) 값이 카피 단계의 완료를 인코딩하여 모드 필드(1114)를 제거하는데 이용될 수 있음을 알 수 있을 것이다.
Copy-From 인스턴스 식별기 저장기에 관련된 판독 및 기록 배리어
지금부터 도 12 내지 도 14를 참고하여 추가적인 실시예를 설명한다. 앞서 기재된 몇 몇 실시예에서와 같이, 이러한 추가적인 실시예는 부분적으로 재배치된 대형 오브젝트의 FromSpace(420) 인스턴스로의 기록을 적절히 처리하기 위하여 하드웨어 지원(예를들어 하드웨어 기록 배리어 및 부분적으로 재배치된 오브젝트 식별기 저장기(410))을 이용한다. 그러나, 이러한 추가적인 실시예는 또한 부분적으로 재배치된 대형 오브젝트의 FromSpace(420)로부터의 판독에 대한 배리어를 제공한다. 이런 방식으로, 이러한 추가적인 실시예는 처리된 오브젝트 참조 없이 대형 오브젝트로의 포인터의 바운드된 정지 시간 업데이트 뿐만 아니라 바운드된 중단 시간 카피를 지원한다.
도 12-14의 실시예에서, 가비지 수집기 프로세스(620)는 카피 단계(MODE = COPY)중에 FromSpace(420) 인스턴스로부터 ToSpace(430) 인스턴스로 대형 오브젝트를 증분 카피하고, 포인터 업데이트 단계(MODE=PTR_UPDATE) 중에 대형 오브젝트로 포인터(즉, objectref)를 증분 업데이트한다. 대형 오브젝트 재배치의 카피 단계 중에, FromSpace(420) 인스턴스로의 뮤테이터 프로세스(610) 기록 액세스는 부분적으로 재배치된 오브젝트 트랩 핸들러, 예를 들어 부분적으로 재배치된 오브젝트 트랩 핸들러(1250) 또는 하드웨어 기록 배리어(1440)(도 14)에 의해 적절히 지시되거나 방송된다. 대형 오브젝트 재배치의 포인터 업데이트 단계 중에, FromSpace(420) 인스턴스로의 뮤테이터 프로세스(610) 기록 및 판독 액세스는 ToSpace(430) 인스턴스로 재지시된다.
도 12는 판독 및 기록 배리어와 연관된 Copy-From 레지스터 필드를 포함하는 실시예를 나타내고 있다. 특히, 도 12의 실시예에는 FROM 필드(411), 하드웨어 판독 배리어(1242), 하드웨어 기록 배리어(1241) 및 부분적으로 재배치된 오브젝트 트랩 핸들러(1250)가 포함되어 있다. 하드웨어 판독 배리어(1242) 및 하드웨어 기록 배리어(1241)는 판독 및 기록 배리어 하드웨어(1240)로서 예시적으로 도시되어 있다. 그러나, 어떠한 구현이 되느냐에 따라 하드웨어 기록 배리어(1241) 및 하드웨어 판독 배리어(1242)가 하드웨어를 공유하거나 또는 별도의 하드웨어에 기초할 수도 있다. 한 실시예에서, 저장-지향 바이트코드를 평가하는 정수유닛(142)(도 1) 논리가 하드웨어 기록 배리어(1241)를 제공하고 저장-지향 바이트코드(예를들어, getfield_quick, getfield, aaload 등)를 평가하는 정수유닛(142)이 하드 판독 배리어(1242)를 제공한다.
뮤테이터 프로세스(610)는 수집된 스페이스(630)로부터 및 스페이스로 판독 및 기록 액세스를 수행한다. 주어진 판독 또는 기록 액세스는, 만일 상기 판독 또는 기록 액세스가 부분적으로 재배치된 오브젝트의 FromSpace(420) 인스턴스를 타겟으로 한다면, 판독 및 기록 배리어 하드웨어(1240)에 의해서 선택적으로 트랩된다. 판독 및 기록 배리어 하드웨어(1240)는 FROM 필드(411)의 내용과 기록 액세스(701) 또는 판독 액세스(1202)와 연관된 타겟 objectref 간의 일치에 응답하여 부분적으로 재배치된 오브젝트 트랩 핸들러(1250)를 트리거 한다. 한 실시예에서, 판독 및 기록 배리어 하드웨어(1240)는 모드 필드(1114) 상태에 기초한 하드웨어 판독 배리어(1242)의 행위를 변화시키는 레지스터(144)의 모드필드(1114)에 응답한다. 이러한 실시예에서, 하드웨어 판독 배리어(1242)는 대형 오브젝트 재배치의 포인터 업데이트 단계 동안에만 선택적으로 트랩한다.
예시적인 하드웨어 기록 배리어(1241)이 아래의 논리 식에 의해 설명된다.
if (objectref == FROM) then
generate gc_notify
여기서 gc_notify 는 부분적으로 재배치된 오브젝트 트랩 핸들러(1250)와 같은 트랩 핸들러이다. 당 분야의 기술자들은 상기와 같은 상호 세대별 포인터 저장 트래핑과 같은 다른 기록 배리어 기능을 결합하는 논리 구현을 포함하여, 다양한 적절한 논리 구현을 이해할 수 있을 것이다. 예시적인 하드웨어 판독 배리어(1242)가 아래의 논리 식에 의해 설명된다.
if ((MODE == PTR_UPDATE) && (objectref == FROM)) then
generate gc_notify
선택적인 실시예에서는, 더 큰 트랩 핸들러 오브헤드 비용으로, 부분적으로 재배치된 오브젝트 트랩 핸들러(1250)에 의한 적절한 처리로 대형 오브젝트 재배치의 포인터 업데이트 및 카피 단계 모두에서 선택적으로 트랩하기도 한다.
카피 단계 동안, 부분적으로 재배치된 오브젝트 트랩 핸들러(1250)는, 그렇지 않으면 TO 필드(412) 내에 저장되는 Copy-To 목적지 정보를 위한 메모리 스토리지를 결정하거나 또는 선택적으로 유지한다. 또한, 부분적으로 재배치된 오브젝트 트랩 핸들러(1250)는, 그렇지 않으면 HOWFAR 필드(413) 내에 저장되는 HowFar 정보를 위한 스토리지를 선택적으로 유지하기도 한다. 뮤테이터 프로세스(610)가 대형 오브젝트의 FromSpace(420) 인스턴스로 저장되는 경우, 저장 데이터는 Copy-From 인스턴스(450) 및 Copy-To 인스턴스(450A) 모두로 방송하거나 또는, HOWFAR 정보를 위한 스토리지를 제공하는 실시예에서, 만일 대형 오브젝트의 저장된 TO 필드가 이미 카피되었다면, 상기 HOWFAR 필드 스토리지가 검사되고 상기 저장기는 두 인스턴스 모두로 방송되고, 그렇지 않으면 Copy-From 인스턴스로 지시된다.
포인터 업데이트 단계 동안, 부분적으로 재배치된 오브젝트 트랩 핸들러(1250)는 그의 ToSpace(430) 인스턴스에 부분적으로 재배치된 대형 오브젝트의 FromSpace(420) 인스턴스를 타겟으로하는 판독 및 기록 액세스를 지시한다. 앞에서와 같이, 부분적으로 재배치된 오브젝트 트랩 핸들러(1250)는, 그렇지 않다면, TO 필드(412)에 저장되는 Copy-To 목적지 정보를 위한 메모리 스토리지를 선택적으로 결정하거나 또는 유지한다. 어느 경우에도, 부분적으로 재배치된 오브젝트 핸들러(1250)는 ToSpace(430) 인스턴스로의 판독 및 기록 액세스 모두를 재지시한다. 이러한 방법으로, 부분적으로 재배치된 오브젝트에의 판독 액세스는 최신인 것으로 검증된 ToSpace(430) 인스턴스로 결정된다.
부분적으로 재배치된 오브젝트 트랩 핸들러(1250)에 대한 예시적인 기록 트랩 및 판독 트랩 함수는 다음과 같다:
write_trap() {
if (objectref == FROM) {
store_data => *(TO + offset)
if (MODE == COPY)
store_data => *(objectref + offset)
}
}
read_trap() {
if (objectref == FROM) {
if (MODE == PTR_UPDATE)
read_destination <= *(TO + offset)
else read_destination <= *(objectref + offset)
}
}
여기서, read_destinatiom 은 적재-지향 바이트코드에 대한 목적지이다.
일반적으로, 판독-배리어 경우를 트랩함으로써 부여되는 오버헤드는, 단지 기록 배리어만이 제공되는 경우에의 오버헤드보다 더 큰데, 왜냐하면 판독 액세스는 일반적으로 주어진 명령 스트림에서의 기록 액세스보다 더 흔하게 존재하기 때문이며, 여느 경우에는 기록 액세스가 추가적으로 존재한다. 이러한 이유에 대해, 하드웨어 판독 배리어(1242)는 부분적으로 재배치된 대형 오브젝트의 FromSpace(420) 인스턴스로부터 판독되는 포인터 업데이트 단계를 위해 선택된다. 그러나, 하드웨어 판독 배리어(1242)는, 재배치 단계에 상관없이, 부분적으로 재배치된 대형 오브젝트의 FromSpace(420) 인스턴스로부터 선택적으로 트랩 판독하기도 한다. 이와같은 실시예에서는, 부분적으로 재배치된 오브젝트 트랩 핸들러(1250)는 Copy-From 인스턴스(450) 및 Copy-To 인스턴스(450A)를 오버래핑하는 것을 지능적으로 처리하도록 구성될 수 있다. 도 15는 카피된 부분(1561)이 to 인스턴스(1570)의 부분(1571)으로 카피된 from 인스턴스(450) 및 to 인스턴스(1570)의 오버래핑을 설명하고 있다. FROM 필드(411), TO 필드(412) 및 HOWFAR 필드(413)는 위에서 설명한 바와 같이, 부분적으로 재배치된 오브젝트 상태를 부호화한다. 도 15의 실시예에서, 가비지 수집기 프로세스(620)는 from 인스턴스(1560) 및 to 인스턴스(1570)의 상대적인 오버랩에 의존하는 뒷부분에서부터 앞부분까지(또는 앞에서부터 뒤까지)의 대형 오브젝트를 카피한다. from 및 to 인스턴스의 오버랩을 용이하게 하기 위해, 부분적으로 재배치된 오브젝트 트랩 핸들러(1550)는 기록을 방송하지 않고, 대신 from 인스턴스(1560)로 카피되지 않은 부분(1560)을 타겟으로하는 기록을 지시하고, to 인스턴스(1570)로 카피된 부분(1561)을 타겟으로하는 기록을 지시한다. 부분적으로 재배치된 오브젝트 핸들러(1250)의 기록 트랩 함수에 대한 적절한 변형예는 다음과 같다;
write_trap() {
if (objectref == FROM) {
if (COPY_DIRECTION == BACK_TO_FRONT) {
if ((offset ≥ HOW_FAR) ∥
(MODE == PTR_UPDATE))
store_data => *(TO + offset)
else store_data => *(objectref + offset)
}
else { /* COPY_DIRECTION == FRONT_TO_BACK */
if ((offset ≤ HOE_FAR) ∥
(MODE == PTR_UPDATE))
store_data => *(TO + offset)
else store_data => *(objectref + offset)
}
}
}
여기서, COPY_DIRECTIOM 은 각각 from 필드(411) 및 to 필드(412)에 의해 부호화된 것과 같이 from 인스턴스(1560) 및 to 인스턴스(1570)의 상대적인 위치로부터 확정할 수 있다. 적재-지향 액세스를 적절하게 재지시하기 위해 부분적으로 재배치된 오브젝트 트랩 핸들러(1250)의 판독 트랩 함수에의 변형예들은 유사하다.
도 13은 관련된 판독 및 기록 배리어 하드웨어(1340)가 있는 Copy-From 레지스터(예를들어 from 필드(411))에 더하여 Copy-To 레지스터 필드(예를들어 to 필드(412))를 포함하는 실시예를 나타내고 있다. 앞에서와 같이, 이 실시예에는 판독 및 기록 배리어 하드웨어(1340)가 대형 오브젝트 재배치의 카피단계 및 포인터 업데이트 단계를 구별하게 하는 가비지 수집기 프로세스(620)에 의해 유지된 모드 표시(예를들어 레지스터(144)의 모드 필드(1114))를 포함하고 있다. 도 12의 실시예와 비교하면, 도 13의 실시예는(예를들어 from 필드(411)의 내용에 의해 식별된 오브젝트의 to 필드를 저장하기 위한 하드웨어 판독 배리어(1342) 및 from 필드(411)의 내용의 의해 식별된 오브젝트의 to 필드를 저장하기 위한 하드웨어 기록 배리어(1341)와 같은) 하드웨어내의 판독 배리어 및 기록 배리어 지원 모두를 제공하여, 부분적으로 재배치된 오브젝트 트랩 핸들러(1250) 및 그와 관련된 오버헤드를 제거하는 장점이 있다.
하드웨어 내에 레지스터(144) 내의 to 필드(412)와 같은 Copy-To 레지스터 필드를 유지함으로서, Copy-From 인스턴스로의 기록 액세스는 카피 단계(MODE=COPY) 동안, 소프트웨어 트랩 핸들러 방해없이 하드웨어 기록 배리어(1341)에 의해 Copy-From 및 Copy-To 인스턴스 모두에 방송될 수 있다. 포인터 업데이트 단계(MODE=PTR_UPDATE) 동안, Copy-From 인스턴스로의 기록 액세스는 하드웨어 기록 배리어(1341)에 의해 다시 소프트웨어 트랩 핸들러 방해없이, Copy-To 인스턴스로 재지시된다. Copy-From 인스턴스로부터의 판독 액세스도 상기 포인터 업데이트 단계 동안, 소프트웨어 트랩 핸들러 방해없이 하드웨어 판독 배리어(1342)에 의해 Copy-To 인스턴스로 재지시된다. Copy-From 인스턴스로의 카피단계 판독 액세스는 정상적으로 완료된다.
한 실시예에서, 판독 및 기록 배리어 하드웨어(1340)가 바이트코드를 평가하는 정수유닛(142)(도 1) 논리에 의해 제공된다. 하드웨어 기록 배리어(1341)는 적재-지향 바이트코드를 평가하는 정수유닛(142) 논리에 의해 제공되며, 하드웨어 판독 배리어(1342)는 적재-지향 바이트코드를 평가하는 정수유닛(142) 논리에 의해 제공된다.
카피단계 동안, 하드웨어 판독 배리어(1342)를 구현하는 논리는 objectref 및 to 필드(412)의 내용에 의해 각각 식별된 Copy-From 및 Copy-To 인스턴스 모두로 store_data 를 방송하고, 반면에, 포인터 업데이트 단계 동안 하드웨어 기록 배리어(1342)를 구현하는 논리는 Copy-To 인스턴스에만 store_data 를 재지시한다. 예시적인 하드웨어 기록 배리어(1342)가 아래의 논리 식으로 설명된다.
if (objectref == FROM) {
store_data => *(TO + offset)
if (MODE == COPY)
store_data => *(objectref + offset)
}
비슷하게, 예시적인 하드웨어 판독 배리어(1341)는 아래의 논리 식으로 설명된다.
if (objectref == FROM) {
if (MODE == PTR_UPDATE)
read_destination <= *(TO + offset)
else read_destination <= *(objectref + offset)
}
여기서, 각 경우에, offset 은 저장-지향 또는 적재-지향 바이트코드에 관계된 타겟 필드의 대형 오브젝트로의 오프셋이다. 당 기술분야의 통상의 지식을 가진 자는 앞서 설명한 바와 같이, 세대간 포인터 저장 트래핑 등의 다른 기록 배리어 기능이 있는 하드웨어 기록 배리어(1342)를 결합하는 구현 뿐만 아니라, 하드웨어 판독 배리어(1341) 및 하드웨어 기록 배리어(1342)를 결합하는 논리 구현을 포함하여, 다양한 적절한 논리 구현을 알 수 있을 것이다. to 필드(412)가 하드웨어 기록 배리어(1342) 및 하드웨어 판독 배리어(1341) 모두에 이용가능하기 때문에, 방송 및 재지시가 하드웨어에서 수행될 수 있고 소프트웨어 트랩 오버헤드가 제거된다.
도 14는 How-Far 레지스터 필드(예를들어 HOWFAR 필드(413))가 부가된 실시예를 나타내고 있다. 도 13의 실시예와 같이, 판독 및 기록 배리어 하드웨어(1440)는 Copy-From 인스턴스(450)으로부터 및 인스턴스(450)로의 판독 및 기록 액세스에 배리어를 제공한다. 또한, 판독 및 기록 배리어 하드웨어(1440)는, 저장-지향 또는 적재-지향 바이트코드에 의해 참조된 필드가 이미 ToSpace(430) 인스턴스에 복사되었는지의 여부에 따라, 적당한 FromSpace(420) 또는 ToSpace(430) 인스턴스로의 판독 및 기록 액세스를 행한다. HOWFAR 필드(413)와 함께 동작하여, 하드웨어 기록 배리어(1441)는, 하드웨어 기록 배리어(1441)가 모드 필드(1114)의 COPY 상태로 표시된 카피 단계 동안 대형 오브젝트의 아직 카피되지 않은 부분으로 저장의 방송을 보류하도록 하게하는 장점이 있다. 포인터 업데이트 단계 동안, ToSpace(430) 인스턴스는 최신이 되도록 보장되며; 따라서 그에따른 판독 액세스를 재지시함으로써, 하드웨어 판독 배리어(1442)는 하드웨어 프로세서(100)가 포인터 업데이트 단계 동안 저장의 방송을 보류하게 한다. 방송 저장이 제거되기 때문에, 도 14의 실시예는 FromSpace(420) 및 ToSpace(430) 인스턴스의 오버래핑 지원에 특히 적합하다.
한 실시예에서, 판독 및 기록 배리어 하드웨어(1440)는 바이트코드를 평가하는 정수유닛(142)(도 1) 논리에 의해 제공된다. 하드웨어 기록 배리어(1441)는 저장-지향 바이트코드를 평가하는 정수유닛(142) 논리에 의해 제공되며, 하드웨어 판독 배리어(1442)는 적재-지향 바이트코드를 평가하는 정수유닛(142) 논리에 의해 제공된다. 예시적인 하드웨어 기록 배리어(1442)는 아래 논리 식으로 설명된다.
if (objectref == FROM) {
if (COPY_DIRECTION == BACK_TO_FRONT) {
if ((offset ≥ HOW_FAR) ∥
(MODE == PTR_UPDATE))
store_data => *(TO + offset)
else store_data => *(objectref + offset)
}
else { /* COPY_DIRECTION == FRONT_TO_BACK */
if (offset ≤ HOW_FAR) ∥
(MODE == PTR_UPDATE))
store_data => *(TO + offset)
else store_data => *(objectref + offset)
}
}
비슷하게, 예시적인 하드웨어 판독 배리어(1341)는 아래의 논리 식으로 설명된다.
if (objectref == FROM) {
if (COPY_DIRECTION == BACK_TO_FRONT) {
if ((offset ≥ HOW_FAR) ∥
(MODE == PTR_UPDATE))
read_destination <= *(TO + offset)
else read_destinatiom <= *(objectref + offset)
}
else { /* COPY_DIRECTION == FRONT_TO_BACK */
if (offset ≤ HOW_FAR) ∥
(MODE == PTR_UPDATE))
read_destination <= *(TO + offset)
else read_destinaion <= *(objectref + offset)
}
}
여기서, read_destination 은 적재-지향 바이트코드용 목적지이고, 각 경우에서, offset 는 저장-지향 또는 적재-지향 바이트코드와 관련된 타겟 필드의 대형 오브젝트로의 오프셋이다. 당 기술분야의 전문가들은 하드웨어 판독 배리어(1441) 및 하드웨어 기록 배리어(1442)를 결합한 논리 뿐만 아니라 상기 설명한 바와 같은 세대간 포인터 저장 트래핑과 같은 다른 기록 배리어 기능을 가진 하드웨어 기록 배리어(1342)를 결합한 구현을 포함하여 여러가지 적당한 논리 구현을 알 수 있을 것이다.
Copy-To 인스턴스 식별기 저장기에 관련된 판독 및 기록 배리어
도 12-14 의 일련의 변형예들에는, Copy-From 인스턴스 식별기 저장기 보다는 Copy-To 식별기 저장기에 관련된 판독 및 기록 배리어들이 포함되어 있다. 앞서와 같이, 이들 변형예들은 from 필드(411) 및 howfar 필드(413) 지원 등의 추가의 하드웨어 지원의 연속 레벨이 추가되어, 소프트웨어 트랩 핸들러를 제거하고 Copy-From 및 Copy-To 인스턴스(450 및 450A)의 오버랩을 허용한다. 이들 변형예들은, 포인터의 바운드된 정지 시간 카피 및 바운드된 정지시간 업데이트 모두를 부분적으로 재배치된 대형 오브젝트로 지원한다. 지금부터, 이들 변형예들을 도 12-14의 실시예들과 유사하게 설명하도록 하겠는데, 당 기술분야의 통상의 지식을 가진 자는 이 설명에 기초한 적절한 수정을 이해할 것이다.
가비지 수집기 프로세스(630)는, 오브젝트 데이터의 카피 전에, 예를들어, 대형 오브젝트의 FromSpace(420) 인스턴스로부터 ToSpace(430) 인스턴스로 포인터들을 상기 대형 오브젝트로 업데이트한다. 이러한 방식에서, 포인터 업데이트 및 카피 단계의 순서가 바뀐다. 판독 및 기록 배리어들은 Copy-From 인스턴스(450) 대신에 Copy-To 인스턴스(450A)에서 지시된 판독 및 기록 액세스들을 포워드한다. 한 실시예에서, 하드웨어 판독 및 기록 배리어들은 Copy-To 인스턴스(450A)로의 액세스를 트랩하여 부분적으로 재배치된 오브젝트 트랩 핸들러 소프트웨어가 Copy-From 인스턴스로의 실제 포워딩을 수행하도록 자극한다. 상기 부분적으로 재배치된 오브젝트 트랩 핸들러는 그렇지 않으면 howfar 필드(413) 내에 저장되는 HowFar 정보를 위한 스토리지를 선택적으로 유지하기도 한다. 뮤테이터 프로세스(610)가 대형 오브젝트의 ToSpace(420) 인스턴스로 저장할 때, 대형 오브젝트의 저장된 to 필드가 이미 카피되었다면 저장된 데이터는 copy-to 인스턴스(450A)로 지시되고, 그렇지 않으면 copy-from 인스턴스(450)로 지시된다. 마찬가지로, 뮤테이터 프로세스(610)가 대형 오브젝트의 ToSpace(420) 인스턴스로부터 적재하는 경우, 대형 오브젝트의 저장된 to 필드가 이미 카피되었다면, 상기 적재는 copy-to 인스턴스로부터 수행되고, 그렇지 않으면, copy-from 인스턴스(450)로부터 수행된다. 오버랩된 FromSpace(420) 및 ToSpace(430)를 위한 지원이 도 12 및 도 14의 실시예에 대한 앞서의 상세한 설명에서 설명하였다. 대안적으로, 만일 오버래핑 영역을 위한 지원이 필요없다면, 상기 판독 배리어는 Copy-From 인스턴스로 적재를 조종할 수 있으며, 상기 기록 배리어는 Copy-From 및 Copy-To 인스턴스 모두로 저장을 방송할 수 있다.
상기와 같이, 소프트웨어 트랩 오버헤드는 상기 하드웨어 내에 더 많은 래지스터 및 더 복잡한 동작을 집어 넣음으로써 제거될 수 있다. 예를들어, 한 실시예에는 to 필드(412) 및 from 필드(411)가 포함되어 있다. 저장 타겟 및 to 필드(412)간의 일치에 응답하는 하드웨어 기록 배리어는 copy-to 인스턴스(450A) 및 copy-from 인스턴스(450) 모두로 저장을 방송한다. 적재 소스 및 to 필드(412)간의 일치에 응답하는 하드웨어 판독 배리어는 copy-from 인스턴스(411)로 적재를 재지시한다. 다른 실시예에서는, from 필드(411) 및 to 필드(412)에 추가하여, howfar 필드(413)가 포함되어 있다. 하드웨어 기록 배리어 및 하드웨어 판독 배리어는 copy-to 인스턴스(450A)의 카피된 부분으로 그리고 copy-from 인스턴스(450)의 카피되지 않은 부분으로 저장 및 적재를 지시한다. 당 기술분야의 통상의 지식을 가진 자는 이상의 설명에 기초하여 이들 각 실시예들에 적절한 논리를 알 수 있을 것이다.
오브젝트 참조 포멧
도 16은 하드웨어 프로세서(100)내에 나타나 있는 오브젝트 참조(objecref)의 한 실시예를 나타낸다. 상기 objectref 의 세 비트는 앞서 언급한 PCT 국제 출원 PCT/US98/07622 호인 "GENERATION ISOLATION SYSTEM AND METHOD FOR GARBAGE COLECTION" 에서 설명된 바와 같은 가비지 수집 힌트로 사용될 수 있다. 추가 핸들 비트(H)는 오브젝트가 어느 처리를 통해 직접적으로 또는 간접적으로 objectref 에 의해 참조되었는지를 나타낸다. 이 처리는 그에따른 포인터(또는 objectrefs)의 대규모 업데이트 없이 메모리 오브젝트의 재배치를, 인디렉션의 추가 레벨 비용이 들더라도, 쉽게하는 참조 방법을 제공한다. 이들 두 필드 모두는 하드웨어 프로세서(100)의 정수유닛(142)(도 1)에 제공되어지기 전에 마스크 아웃된다.
하드웨어 프로세서(100) 및 수집된 스페이스(630)(도 6-14)의 한 실시예에서, 오브젝트(1700)는 헤더부(1710) 및 인스턴스 변수 스토리지부(1720)를 포함하는 메모리내에 있게된다. 도 17A 는 이러한 실시예의 하나를 보여주고 있다. 헤더부(1710)에는 오브젝트의 클래스를 나타내는 방법 벡터 테이블 베이스부(1712) 및 상기 가비지 수집기를 위한 상기 오브젝트 및 정보의 동기 상태를 위해 준비된 추가 스토리지(1714)의 5 비트 및 오브젝트의 클래스가 포함되어 있다. 선택적으로, 모니터 포인터(1716) 등의 제2 헤더-워드는 상기 오브젝트를 위해 할당된 모니터의 어드레스를 포함할 수 있어서, 제1 헤더 워드내의 추가 스토리지(1714)의 모든 5 비트를 가비지 수집기 정보로서 이용가능하게 할 수 있다. 도 17A 의 실시예에서, 오브젝트 참조(objectref)는 방법 벡터 테이블 베이스부(1712)의 위치를 지적하여 방법 호출의 오버헤드를 최소화 한다.
헤더부(1710)의 3 비트는 수집기 프로세스(620)와 같은 가비지 수집기에 이용가능하다. 헤더부(1710)에서, 헤더가 포인터로 취급되는 경우 3개의 하위-비트 헤더(헤더[2:0]) 및 2개의 상위-비트(헤더[31:30])가 마스크 오프된다. 이들 3개의 3비트(헤더[31;30,2])는 오브젝트(1700)에 관한 정보를 저장하기 위해 가비지 수집기에 사용가능하다. 비트 "1" 및 "0" 은 오브젝트 동기를 위한 룩(LOOK) 및 원트(WANT) 비트를 홀드하는데 사용되기도 한다. 대안적으로, 모니터 포인터(1716)와 같은 제2 헤더 워드가 모든 5개의 비트를 가비지 수집기 지원을 위해 남겨두고서, 오브젝트(1700)의 동기상태를 유지하기 위해 제공될 수 있다. 가비지 수집기 지원을 위한 비트들이 사용되는 방법은 가비지 프로세스(620) 및, 필요한 경우, 가비지 수집 트랩 핸들러를 구현하는 가비지 수집 방법의 특정 타입에 따라 다르다. 가능한 사용은 마크 비트 및 한 세대 내의 오브젝트의 나이를 계산하는 카운터 비트 등이 포함된다. 이상 설명한 바와 같이, 헤더부(1710)의 선택적인 제2 헤더-워드 실시예에서, 5개의 비트가 수집기 프로세스(620)와 같은 가비지 수집기에 이용가능하다.
도 17A의 실시예에서, 인스턴스 변수 스토리지부(1720)는 방법 벡터 테이블 베이스부(1712)의 한 워드 다음부터 시작하고 오브젝트(1700)의 인스턴스 변수들을 포함하고 있다. objectref 의 최하위 비트는 참조가(==1)로 다루어졌는지 아닌지(==0)를 식별한다. 도 17B에는 대안전인 "처리된" 오브젝트 포멧이 나타나 있다. 오브젝트(1700b)가 생성될 때 처리된 참조가 확립되어 모든 후속 참조들은 이 처리, 즉 상기 오브젝트를 액세스 하는 스토리지 포인터(1750b)를 따른다. 이러한 지원은 인스턴스 변수들을 위한 것을 포함하여 하부의 오브젝트 스토리지보다는 핸들들을 카피함으로써 오브젝트 재배치 동안에 포인터 업데이트 비용을 감소시키는 몇 가지 타입의 가비지 수집기에 제공된다.
처리된 오브젝트 참조들은 도 7-9를 참조하여 앞서 설명한 바와 같은 가비지 수집기 시스템들이 포인터 업데이트를 위한 바운드된 정지 시간 성능을 카피된 오브젝트로 나타나게 한다. 포인터를 참조하는 여러개의 바운드된 정지 시간 포인터 업데이트가 도 10-14를 참조하여 앞서 설명한 실시예에 제공된 배리어 구성에 의하여 지원되는 다른 가비지 수집 시스템들에서는, 직접적인 오브젝트 참조가 바람직하다.
본 발명은 다양한 실시예를 참조하여 설명하였지만, 이 실시예들은 설명을 위한 것이며, 본 발명의 범위가 이것으로 제한되는 것은 아니다. 제1 명령, 제2 명령, 제3 명령 등과 같은 청구항에 기재된 용어들은 오직 식별을 위한 것일 뿐이며 특정한 순서를 요하는 것으로 이해되어서는 안된다. 설명된 상기 실시예의 여러 변형, 수정, 추가, 개량이 가능하다. 예를들어, 본 발명에서는 JAVA 프로그래밍 언어 및 JAVA 가상머신에 관한 예시적인 실시예를 참조하여 설명하였지만, 이에 제한되는 것이 아니고, 대신, 광범위한 프로세서 환경(가상 및 실제 모두의 경우)를 위한 시스템, 제품, 방법, 및 장치를 통합한다. 또한, 어떤 실시예에서는 하드웨어에 대하여 설명되었지만, 상기 설명에 따라 부분적으로 재배치된 오브젝트 식별기 저장기 및 그에따라 응답하는 배리어(또는 배리어들)를 구현하는 적절한 가상머신 구현(JAVA에 관련된 것이든 아니든 상관없이)에는 바이트코드 번역기 또는 실시간(JIT) 컴파일러와 같은, 소프트웨어 가상머신 명령 프로세서 구현이 포함되어 있다. 이들 및 다른 변형, 수정 및 개량은 아래의 청구항에 의하여 정의된 본 발명의 범위에 포함되는 것이다.

Claims (54)

  1. 메모리 저장장치로서, 그안에 형성된 오브젝트가 각각의 FromSpace 인스턴스로부터 각각의 ToSpace 인스턴스로 재배치할 수 있는 메모리 저장장치와;
    상기 재배치가 불완전한 경우에 상기 특정 오브젝트의 특정 인스턴스를 식별하기 위해 업데이트할 수 있는 일부 재배치된 오브젝트 식별자 저장부; 상기 특정 인스턴스는 FromSpace 인스턴스와 ToSpace 인스턴스중의 하나이고;
    상기 특정 인스턴스를 타겟으로 하는 저장지향 메모리 액세스에 대한 기록 배리어; 및
    상기 특정 인스턴스를 타겟으로 하는 적재지향 메모리 액세스에 대한 판독 배리어를 구비하고,
    상기 기록 및 판독 배리어는 일부 재배치된 오브젝트 식별자 저장부 및 상기 저장지향의 내용 및 상기 적재지향 메모리 액세스의 각각에 대한 오브젝트 식별자 사이의 일치에 응답하는 것을 특징으로 하는 장치.
  2. 제 1 항에 있어서,
    상기 특정 인스턴스는 상기 FromSpace 인스턴스이고,
    상기 재배치는 포인터 업데이트 단계에 의해 따르는 카핑 단계를 포함하고; 및
    상기 일부 재배치된 오브젝트 식별자는 FromSpace 인스턴스 식별자를 포함하는 것을 특징으로 하는 장치.
  3. 제 1 항에 있어서,
    상기 특정 인스턴스는 상기 ToSpace 인스턴스이고,
    상기 재배치는 카핑 단계에 의해 따르는 포인터 업데이트 단계를 포함하고; 및
    상기 일부 재배치된 오브젝트 식별자는 ToSpace 인스턴스 식별자를 포함하는 것을 특징으로 하는 장치.
  4. 제 1 항에 있어서,
    상기 재배치는 일시적으로 오버랩된 증분 카핑 및 증분 포인터 업데이트를 포함하는 것을 특징으로 하는 장치.
  5. 제 1 항에 있어서,
    상기 기록 배리어는 상기 ToSpace 인스턴스에 대한 제 1 저장지향 메모리 액세스 및 상기 FromSpace 인스턴스에 대한 제 2 저장지향 메모리 액세스를 다이렉트하고, 상기 제 1 및 제 2 저장지향 메모리 액세스는 각각 상기 특정 인스턴스의 카피된 부분과 카피되지 않은 부분을 타겟으로 하는 것을 특징으로 하는 장치.
  6. 제 5 항에 있어서,
    상기 기록 배리어는 상기 FromSpace 인스턴스에 대한 상기 제 1 저장지향 메모리 액세스를 다이렉트하는 것을 특징으로 하는 장치.
  7. 제 1 항에 있어서,
    상기 판독 배리어는 상기 ToSpace 인스턴스에 대한 제 1 적재지향 메모리 액세스 및 상기 FromSpace 인스턴스에 대한 제 2 적재지향 메모리 액세스를 다이렉트하고, 상기 제 1 적재지향 메모리는 상기 특정 인스턴스의 카피된 부분을 타겟으로하고, 상기 제 2 적재지향 메모리는 상기 특정 인스턴스의 카피되지 않은 부분을 타겟으로 하는 것을 특징으로 하는 장치.
  8. 제 7 항에 있어서,
    상기 판독 배리어는 상기 ToSpace 인스턴스에 대한 제 3 적재지향 메모리 액세스를 다이렉트하고, 상기 제 3 적재지향 메모리 액세스는 상기 재배치의 카핑 단계의 완료후에 일치하는 것을 특징으로 하는 장치.
  9. 제 1 항에 있어서,
    상기 기록 배리어의 동작은 상기 FromSpace 인스턴스에서 상기 ToSpace 인스턴스로 상기 특정 오브젝트를 증분 카피하도록 하는 것을 특징으로 하는 장치.
  10. 제 1 항에 있어서,
    상기 기록 및 상기 판독 배리어의 동작은 상기 FromSpace 인스턴스에서 상기 ToSpace 인스턴스로 상기 특정 오브젝트를 증분 카피하도록 하고, 상기 FromSpace 인스턴스와 상기 ToSpace 인스턴스는 상기 메모리 저장장치에 오버랩하는 것을 특징으로 하는 장치.
  11. 제 1 항에 있어서,
    상기 FromSpace와 상기 ToSpace 인스턴스는 상기 메모리 저장장치에 오버랩하는 것을 특징으로 하는 장치.
  12. 제 1 항에 있어서,
    상기 판독 배리어의 동작은 상기 특정 오브젝트에 대한 포인더의 증분 업데이트하게 하고, 상기 증분 업데이트는 FromSpace 인스턴스 참조 상태에서 ToSpace 인스턴스 참조 상태로인 것을 특징으로 하는 장치.
  13. 제 1 항에 있어서,
    상기 기록 및 상기 판독 배리어는 판독 및 기록 배리어 논리와 일부 재배치된 오브젝트 트랩 핸들러를 구비하고, 상기 판독 및 기록 배리어 논리는 상기 일부 제배치된 오브젝트 식별자 저장부의 내용과 상기 저장지향 및 상기 적재지향 메모리 액세스의 각각에 대한 오브젝트 식별자 사이의 일치에 응답하고, 상기 판독 및 기록 배리어 논리는 상기 일부 재배치된 오브젝트 트랩 핸들러를 상기 일치까지 트랩핑하는 것을 특징으로 하는 장치.
  14. 제 1 항에 있어서,
    상기 일부 재배치된 오브젝트 식별자 저장부는 FromSpace와 ToSpace 인스턴스 식별자를 구비하고; 및
    상기 판독 및 기록 배리어는 상기 FromSpace와 상기 ToSpace 인스턴스 식별자에 결합된 판독 및 기록 배리어 논리를 구비하고, 상기 판독 및 상기 기록 배리어 논리는 상기 저장지향 및 상기 적재지향 메모리 액세스의 각각에 대한 오브젝트 식별자와 상기 FromSpace 인스턴스와 상기 ToSpace 인스턴스 식별자중에 하나의 내용 사이에 일치에 응답하는 것을 특징으로 하는 장치.
  15. 제 1 항에 있어서,
    상기 판독 및 상기 기록 배리어는 판독 및 기록 배리어 논리를 구비하고;
    상기 일부 재배치된 오브젝트 식별자 저장부는 FromSpace와 ToSpace 인스턴스 식별자 및 일부 카피 위치 지시기를 포함하고;
    제 1 저장지향 액세스는 상기 특정 오브젝트의 카피된 부분을 타겟으로 하고, 상기 판독 배리어는 적어도 상기 ToSpace 인스턴스에 대한 저장 데이터를 다이렉트하고, 및
    제 2 저장지향 액세스는 상기 특정 오브젝트의 카피되지 않은 부분을 타겟으로 하고, 상기 판독 배리어는 상기 FromSpace 인스턴스에 대한 상기 저장 데이터를 다이렉트하는 것을 특징으로 하는 장치.
  16. 제 15 항에 있어서,
    상기 제 1 저장지향 액세스경우에, 상기 판독 배리어는 상기 FromSpace 인스턴스에 저장 데이터를 다이렉트하고; 및
    상기 판독 배리어는 상기 ToSpace 인스턴스에 대한 제 3 적재지향 메모리 액세스를 다이렉트하고, 상기 제 2 적재지향 메모리 액세스는 상기 재배치의 카핑 단계의 완료후에 일치하는 것을 특징으로 하는 장치.
  17. 제 15 항에 있어서,
    상기 판독 배리어는 제 1 적재지향 메모리 액세스가 상기 ToSpace 인스턴스에 대한 상기 특정 오브젝트의 카피된 부분을 타겟으로 하도록 다이렉트하고; 및
    상기 판독 배리어는 제 2 적재지향 메모리 액세스가 상기 FromSpace 인스턴스에 대한 상기 특정 오브젝트의 카피되지 않은 부분을 타겟으로 하도록 다이렉트하는 것을 특징으로 하는 장치.
  18. 제 1 항에 있어서,
    가비지 수집 프로세스는 상기 일부 재배치된 오브젝트 식별자 저장부, 상기 판독 배리어 및 상기 기록 배리어를 포함하는 프로세서상에 실행할 수 있는 제 1 명령을 포함하고, 상기 제 1 명령은 상기 FromSpace 인스턴스에서 상기 ToSpace 인스턴스로 상기 특정 오브젝트의 증분 카핑을 위한 것이고; 및
    뮤테이터 프로세스는 상기 적재지향 및 상기 저장지향 메모리 액세스를 만들기 위한 상기 프로세서상에 실행할 수 있는 제 2 명령을 포함하는 것을 특징으로 하는 장치.
  19. 제 1 항에 있어서,
    상기 일부 재배치된 오브젝트 식별자 저장부는 상기 특정 오브젝트의 카피된 부분 및 카피되지 않은 부분 사이에 경계를 지시하는 부분 카피 위치 지시기부를 포함하는 것을 특징으로 하는 장치.
  20. 제 1 항에 있어서,
    상기 재배치는 상기 메모리 저장장치의 가비지 수집된 부분의 FromSpace 부분에서 ToSpace 부분으로 상기 특정 오브젝트를 증분 카핑 및 상기 특정 오브젝트에 대한 증분 업데이팅 포인터를 구비하는 것을 특징으로 하는 장치.
  21. 제 1 항에 있어서,
    상기 FromSpace 및 상기 ToSpace는 오버랩하고; 및
    상기 재배치는 상기 메모리 저장장치에 상기 오브젝트의 다수를 컴팩트하기 위한 상기 특정 오브젝트를 증분 카핑을 구비하는 것을 특징으로 하는 장치.
  22. 제 1 항에 있어서,
    상기 일부 재배치된 오브젝트 식별자 저장부는 증분 카핑에 따른 카비지 수집 프로세스에 의해 업데이트되는 것을 특징으로 하는 장치.
  23. 제 1 항에 있어서,
    상기 일부 재배치된 오브젝트 식별자 저장부, 상기 기록 배리어 및 상기 판독 배리어를 구현하는 프로세서; 및
    미디어에서 부호화된 뮤테이터 프로세스 명령은 상기 프로세서에 의해 판독가능하고 그것에 의해 실행가능하고, 상기 뮤테이터 프로세스 명령은 상기 저장지향 및 상기 적재지향 메모리 액세스에 대응하는 명령을 포함하고, 및
    미디어에서 부호화된 재배치 프로세서 명령은 상기 프로세서에 의해 판독가능하고 그것에 의해 실행가능하고, 상기 가비지 수집기 프로세스 명령은 상기 FromSpace 인스턴스에서 상기 ToSpace 인스턴스로 상기 특정 오브젝트를 증분 카피를 위한, 상기 ToSpace 인스턴스를 참조에 대한 FromSpace 인스턴스 참조 포인터를 증분 업데이트하기 위한 및 그것에 일치하는 상기 일부 재배치된 오브젝트 식별자 저장부를 유지하기 위한 명령 시퀀스를 포함하는 것을 더 구비하고,
    상기 명령 시퀀스는 상기 뮤테이터 프로세스 명령에 의해 인터랩트되는 것을 특징으로 하는 장치.
  24. 제 23 항에 있어서,
    상기 재배치 프로세스 명령은 세대별 가비지 수집, 마크 스윕 압축 가비지 수집, 카핑 가비지 수집 및 바운드된 정지 시간을 갖는 히프 압축중의 하나를 수행하기 위해 선택되는 것을 특징으로 하는 장치.
  25. 제 23 항에 있어서,
    상기 프로세서는 레지스터 저장부와 상기 일부 재배치된 오브젝트 식별자 저장부를 구현하는 논리, 상기 기록 배리어, 상기 판독 배리어를 포함하는 하드웨어 프로세서를 구비하는 것을 특징으로 하는 장치.
  26. 제 1 항에 있어서,
    상기 특정 오브젝트는 대형 오브젝트, 보급형 오브젝트, 및 보급형 대형 오브젝트중의 하나를 구비하는 것을 특징으로 하는 장치.
  27. 제 1 항에 있어서,
    하드웨어 프로세서는 상기 재배치된 오브젝트 식별자 저장부, 상기 기록 배리어 및 상기 판독 배리어를 구현하고;
    통신 장치는 상기 하드웨어 프로세서상에 실행을 위한 뮤테이터 프로세스 명령을 수신하기 위한 상기 하드웨어 프로세서에 결합되고, 상기 뮤테이터 프로세스 명령은 상기 저장지향 메모리 액세스에 일치하는 제 1 명령 및 상기 적재지향 메모리 액세스에 일치하는 제 2 명령을 포함하고; 및
    미디어는 가비지 수집기 프로세스 명령을 부호화하기 위한 상기 하드웨어 프로세서에 의해 판독할 수 있고 상기 특정 오브젝트를 증분 카핑하고 그것에 증분 업데이팅 포인터를 실행할 수 있는 것을 특징으로 하는 장치.
  28. 제 1 항에 있어서,
    상기 일부 재배치된 오브젝트 식별자 저장부 및 상기 메모리 저장장치에 결합된 제 1 및 제 2 프로세서를 더 구비하고, 상기 제 1 프로세서는 상기 기록 및 상기 판독 배리어를 포함하고;
    상기 재배치는 상기 제 2 프로세서상에 실행할 수 있는 가비지 수집기 프로세스에 의해 상기 특정 오브젝트의 증분 카핑을 구비하고,
    상기 저장지향 및 상기 적재지향 메모리 액세스 각각은 상기 제 1 프로세서상에 실행할 수 있는 뮤테이터 프로세스에 의해 기록 및 판독 액세스를 구비하고, 및
    상기 일부 재배치된 오브젝트 식별자 저장부는 상기 특정 오브젝트의 상기 증분 카핑에 일치하여 상기 가비지 수집기 프로세스에 의해 유지되는 것을 특징으로 하는 장치.
  29. 제 28 항에 있어서,
    상기 제 2 프로세서는 특수 용도 가비지 수집기 프로세서를 구비하는 것을 특징으로 하는 장치.
  30. 제 28 항에 있어서,
    상기 제 2 프로세서는 상기 메모리 저장장치로 구성하고, 상기 제 2 프로세서및 상기 메모리 저장장치는 가비지 수집된 메모리 모듈을 구비하는 것을 특징으로 하는 장치.
  31. 제 1 항에 있어서,
    상기 일부 재배치된 오브젝트 식별자 저장부는 재배치가 불완전한 상기 오브젝트의 제 2 오브젝트를 식별하기 위해 업데이트할 수 있고; 및
    상기 장치는 상기 일부 재배치된 오브젝트 식별자 저장부 와 상기 메모리 저장장치에 결합된 제 1 및 제 2 가비지 수집기 프로세서를 더 구비하고, 상기 특정 오브젝트 및 상기 제 2 오브젝트의 재배치는 상기 제 1 및 제 2 가비지 수집기 프로세서 각각에 의해 증분 카핑을 구비하는 것을 특징으로 하는 장치.
  32. 메모리 저장장치로서, 그안에 형성된 오브젝트가 각각의 FromSpace 인스턴스로부터 각각의 ToSpace 인스턴스로 재배치할 수 있는 메모리 저장장치와;
    상기 재배치가 불완전한 경우에 상기 특정 오브젝트의 FromSpace 인스턴스를 식별하기 위해 업데이트할 수 있는 일부 재배치된 오브젝트 식별자 저장부;
    상기 FromSpace 인스턴스를 타겟으로 하는 저장지향 메모리 액세스에 대한 기록 배리어; 및
    상기 FromSpace 인스턴스를 타겟으로 하는 적재지향 메모리 액세스에 대한 판독 배리어를 구비하고, 적어도 상기 재배치의 포인터 업데이트 단계동안에 상기 판독 배리어는 상기 특정 오브젝트의 ToSpace 인스턴스에 대한 상기 적재지향 메모리 액세스를 다이렉트하는 것을 특징으로 하는 장치.
  33. 제 32 항에 있어서,
    상기 재배치의 카핑 단계동안에 상기 기록 배리어는 상기 특정 오브젝트의 상기 ToSpace 인스턴스와 적어도 상기 FromSpace 인스턴스의 카피된 부분 사이에 일관성을 유지하는 것을 특징으로 하는 장치.
  34. 제 32 항에 있어서,
    상기 FromSpace 인스턴스의 카피된 부분과 카피되지 않은 부분 사이에 경계를 지시하는 부분 카피 위치 지시기부를 더 구비하고,
    상기 저장지향 액세스의 제 1 액세스는 상기 카피된 부분을 타겟으로 하고, 상기 판독 배리어는 상기 ToSpace 인스턴스의 저장 데이터를 다이렉트하고,
    상기 저장지향 액세스의 제 2 액세스는 상기 카피되지 않은 부분을 타겟으로하고, 상기 기록 배리어는 상기 FromSpace 인스턴스에 대한 상기 저장 데이터를 다이렉트하고;
    상기 적재지향 메모리 액세스의 제 1 액세스는 상기 카피된 부분을 타겟으로 하고, 상기 판독 배리어는 상기 ToSpace 인스턴스에 대한 상기 제 1 적재지향 메모리 액세스를 다이렉트하고; 및
    상기 적재지향 메모리 액세스의 제 2 액세스는 상기 카피되지 않은 부분을 타겟으로 하고, 상기 판독 배리어는 상기 FromSpace 인스턴스에 대한 상기 제 2 적재지향 메모리 액세스를 다이렉트하는 것을 특징으로 하는 장치.
  35. 저장장치로서, 그안에 형성된 오브젝트가 각각의 FromSpace 인스턴스로부터 각각의 ToSpace 인스턴스로 재배치할 수 있는 메모리 저장장치와;
    상기 재배치가 불완전한 경우에 상기 특정 오브젝트의 ToSpace 인스턴스를 식별하기 위해 업데이트할 수 있는 일부 재배치된 오브젝트 식별자 저장부;
    상기 ToSpace 인스턴스를 타겟으로 하는 저장지향 메모리 액세스에 대한 기록 배리어
    상기 ToSpace 인스턴스를 타겟으로 하는 적재지향 메모리 액세스에 대한 판독 배리어를 구비하는 것을 특징으로 하는 장치.
  36. 제 35 항에 있어서,
    상기 ToSpace 인스턴스의 카피된 부분과 카피되지 않은 부분 사이에 경계를 지시하는 부분 카피 위치 지시기를 더 구비하고,
    상기 기록 및 판독 배리어는 상기 FromSpace 인스턴스에 대한 상기 카피되지 않은 부분을 타겟으로 하는 상기 저장지향 및 상기 적재지향 메모리 액세스 각각을 다이렉트하는 것을 특징으로 하는 장치.
  37. 제 1 인스턴스에서 제 2 인스턴스로 상기 특정 오브젝트의 증분 카핑을 사용하는 상기 특정 메모리 오브젝트의 바운드된 정지 시간 재배치를 제공하는 컴퓨터 시스템에 특정 메모리 오브젝트의 재비치동안에 메모리 오브젝트 인스턴스 일관성을 유지하기 위하여:
    상기 제 1 및 제 2 인스턴스에 대한 식별자 필드를 포함하는 일부 재배치된 오브젝트 저장부;
    저장지향 뮤테이터 프로세스 액세스에 대한 오브젝트 식별자와 상기 제 1 인스턴스 식별자 필드의 내용 사이에 일치에 응답하는 기록 배리어 논리; 및
    적재지향 뮤테이터 프로세스 액세스에 대한 오브젝트 식별자와 상기 제 1 인스턴스 식별자 필드의 내용 사이에 일치에 응답하는 판독 배리어 논리를 구비하는 것을 특징으로 하는 가비지 수집 시스템.
  38. 제 37 항에 있어서,
    상기 기록 배리어는 상기 제 1 및 제 2 인스턴스에 대한 상기 특정 오브젝트의 상기 제 1 인스턴스를 타겟으로 하는 상기 저장지향 뮤테이터 프로세스 액세스의 제 1 액세스를 방송하는 것을 특징으로 하는 가비지 수집 시스템.
  39. 제 37 항에 있어서,
    상기 일부 재배치된 오브젝트 식별자 저장부는 상기 특정 오브젝트의 카피되지 않은 부분을 식별하기 위한 부분 카피 위치 지시기를 더 포함하고;
    상기 기록 배리어 논리는 상기 저장지향 뮤테이터 프로세스 액세스가 상기 특정 오브젝트의 상기 카피되지 않은 부분을 타겟으로 하도록 다이렉트하고;
    상기 판독 배리어 논리는 선택적으로 상기 로드 지향 뮤테이터 프로세스 액세스의 제 3 액세스가 상기 특정 오브젝트의 상기 카피되지 않은 부분을 소스로 하도록 다이렉트하고,
    상기 선택적인 다이렉트는 상기 카피 위치 지시기에 의해 부호하되는 일부 재배치 상태에 따른 상기 기록 및 판독 배리어에 의한 것을 특징으로 하는 가비지 수집 시스템.
  40. 소스 인스턴스에서 타겟 인스턴스로 메모리 오브젝트의 재배치동안, 뮤테이터 프로세스에 대한 바운드된 정지시간에 따른 상기 재배치를 인터럽팅하는 방법;
    상기 재배치의 상기 인터럽팅동안에, 상기 뮤테이터 프로세스에 의한 기록 액세스와 일부 재배치된 오브젝트 식별자 저장부의 내용 사이에 일치를 검출하는 방법;
    상기 소스 인스턴스와 상기 타겟 인스턴스 중의 하나에 대한 상기 메모리 오브젝트, 상기 기록 액세스의 일부 재배치 상태에 따라 선택적으로 다이렉트하는 방법;
    상기 재배치의 상기 인터럽팅동안에, 상기 뮤테이터 프로세스에 의한 판독 프로세스와 일부 재배치된 오브젝트 식별자 저장부의 내용 사이에 일치를 검출하는 방법;
    상기 소스 인스턴스와 상기 타겟 인스턴스 중의 하나에 대한 상기 메모리 오브젝트, 상기 기록 액세스의 일부 재배치 상태에 따라 선택적으로 다이렉트하는 방법을 구비하는 것을 특징으로 하는 가비지 수집 정지 시간을 바운딩하기 위한 방법.
  41. 제 40 항에 있어서,
    만일 상기 메모리 오브젝트의 카피된 부분과 상기 기록 액세스 사이에 일치가 존재한다면, 그것의 상기 선택적인 다이렉션이 상기 타겟 인스턴스에 대한 상기 기록 액세스의 다이렉션을 포함하고;
    그렇지 않으면, 상기 소스 인스턴스에 대한 상기 기록 액세스의 다이렉션을 포함하는 것을 특징으로 하는 방법.
  42. 제 40 항에 있어서,
    만일 상기 메모리 오브젝트의 카피된 부분과 상기 판독 액세스 사이에 일치가 존재한다면, 그것의 상기 선택적인 다이렉션이 상기 타겟 인스턴스에 대한 상기 판독 액세스의 다이렉션을 포함하고;
    그렇지 않으면, 상기 소스 인스턴스에 대한 상기 판독 액세스의 다이렉션을 포함하는 것을 특징으로 하는 방법.
  43. 제 40 항에 있어서,
    상기 재배치는 상기 타겟 인스턴스에 대한 상기 소스 인스턴스에 연관된 증분 카핑 데이터를 포함하고 그후에 증분 업데이팅 포인터를 포함하는 것을 특징으로 하는 방법.
  44. 제 40 항에 있어서,
    상기 재배치는 상기 타겟 인스턴스 대신에 상기 소스 인스턴스를 참조하는 증분 업데이팅 포인터를 포함하고 그후에 상기 타겟 인스턴스에 대한 상기 소스 인스턴스와 연관된 증분 카핑 데이터를 포함하는 것을 특징으로 하는 방법.
  45. 제 40 항에 있어서,
    상기 재배치는 상기 타겟 인스턴스 대신에 상기 소스 인스턴스를 참조하는 증분 업데이팅 포인터를 포함하고 상기 타겟 인스턴스에 대한 상기 소스 인스턴스와 연관된 증분 카핑 데이터를 포함하고, 상기 업데이팅 포인터와 상기 증분 카핑은 일시적으로 오버랩되는 것을 특징으로 하는 방법.
  46. 상기 메모리 오브젝트의 From 인스턴스를 타겟으로 하는 상기 뮤테이터 프로세스에 의해 각각의 저장지향 및 적재지향 액세스에 응답하는 기록 및 판독 배리어를 배열하는 방법;
    상기 From 인스턴스에서 To 인스턴스로 상기 메모리 오브젝트를 증분 카핑하고 포인터를 증분 업데이팅하는 방법;
    상기 증분 카핑 및 포인터 업데이팅 및 상기 저장지향 액세스의 제 1 액세스에 응답하는 동안에, 상기 To 인스턴스에 대한 상기 메모리 오브젝트의 카피된 부분을 타겟으로 하는 상기 제 1 저장지향 액세스를 다이렉팅하는 방법;
    상기 증분 카핑 및 포인터 업데이팅 및 상기 적재지향 액세스의 제 1 액세스에 응답하는 동안에, 상기 To 인스턴스에 대한 상기 메모리 오브젝트의 카피된 부분을 타겟으로 하는 상기 제 1 적재지향 액세스를 다이렉팅하는 방법을 구비하는 것을 특징으로 하는 액세스를 가지는 뮤테이터 프로세스상에 바운드된 정지시간 압축으로 메모리 오브젝트를 재배치하기 위한 방법.
  47. 제 46 항에 있어서,
    상기 기록 및 판독 배리어 배열은 상기 From 인스턴스를 식별하기 위한 상기 일부 재배치된 오브젝트 식별자 저장부를 업데이팅하는 방법을 더 구비하는 것을 특징으로 하는 방법.
  48. 제 47 항에 있어서,
    상기 기록 및 판독 배리어 배열은 상기 To 인스턴스를 식별하기 위한 상기 일부 재배치된 오브젝트 식별자 저장부를 업데이팅하는 방법을 더 구비하는 것을 특징으로 하는 방법.
  49. 제 46 항에 있어서,
    상기 메모리 오브젝트의 카피된 부분과 카피되지 않은 부분 사이를 구별하기 위한 부분 카피 위치 지시기를 유지하는 방법; 및
    상기 증분 카핑 및 상기 카피되지 않은 부분을 타겟으로 하는 상기 저장 액세스의 제 2 액세스에 응답하는 동안에, 상기 From 인스턴스에 대한, 상기 To 인스턴스에 대한 것이 아닌 상기 제 2 저장지향 액세스를 다이렉팅하는 방법을 더 구비하는 것을 특징으로 하는 방법.
  50. 제 46 항에 있어서,
    상기 다이렉팅 방법은 상기 기록 배리어에 의해 수행되는 것을 특징으로 하는 방법.
  51. 제 46 항에 있어서,
    상기 다이렉팅 방법은 상기 기록 배리어에 의한 트랩에 응답하는 트랩 핸들러 소프트웨어에 의해 수행되는 것을 특징으로 하는 방법.
  52. 상기 메모리 오브젝트의 To 인스턴스를 타겟으로 하는 상기 뮤테이터 프로세스에 의한 상기 저장지향 및 적재지향 액세스에 응답하는 기록 및 판독 배리어를 배열하는 방법;
    To 인스턴스대신에 상기 From 인스턴스를 참조하는 포인터를 증분 업데이팅하고 상기 From 인스턴스에서 상기 To 인스턴스로 상기 메모리 오브젝트를 증분 카핑하는 방법;
    상기 증분 포인터 업데이팅과 카핑 및 상기 저장지향 액세스의 제 1 액세스에 응답하는 동안에, 상기 From 인스턴스에 대한 상기 메모리 오브젝트의 카피되지 않은 부분을 타겟으로 하는 상기 제 1 저장지향 액세스를 다이렉팅하는 방법;
    상기 증분 포인터 업데이팅과 카핑 및 상기 적재지향 액세스의 제 1 액세스에 응답하는 동안에, 상기 From 인스턴스에 대한 상기 메모리 오브젝트의 카피되지 않은 부분을 타겟으로 하는 상기 제 1 적재지향 액세스를 다이렉팅하는 방법을 구비하는 것을 특징으로 하는 액세스를 가지는 뮤테이터 프로세스상에 바운드된 정지 시간 압축으로 메모리 오브젝트를 재배치하기 위한 방법.
  53. FROM 인스턴스 식별자 상태, TO 인스턴스 식별자 상태 및 메모리 오브젝트의 증분 카핑과 포인터의 증분 업데이팅에 따른 부분 카피 위치 지시 상태를 포함하는 일부 재배치 상태를 유지하는 방법; 거기에
    (a) 상기 일부 재배치 상태에 응답하는 하드웨어 판독 배리어를 사용하여 상기 메모리 오브젝트의 FROM 인스턴스 또는 TO 인스턴스에 대한 적재지향 메모리 액세스를 선택적으로 다이렉팅하는 방법; 및
    (b) 상기 일부 재배치 상태에 응답하는 하드웨어 판독 배리어를 사용하여 상기 메모리 오브젝트의 FROM 인스턴스 또는 TO 인스턴스에 대한 저장지향 메모리 액세스를 선택적으로 다이렉팅하는 방법을 구비하고,
    상기 (a) 및 상기 (b)의 선택적인 다이렉팅하는 방법은 상기 적재지향 및 상기 저장지향 메모리 액세스를 만들기 위한 뮤테이터 프로세스에 대한 일관성있는 오브젝트 표현을 유지하는 것을 특징으로 하는 방법.
  54. 프로세서;
    메모리로서, 그안에 형성된 오브젝트가 상기 프로세서에 의해 참조할 수 있고; 및
    상기 메모리에 부분적으로 수집된 오브젝트를 식별하기 위한 상기 프로세서에 의해 액세스할 수 있는 수단으로서, 상기 부분적으로 수집된 오브젝트 식별자 수단과 상기 프로세서에 의해 오브젝트 참조 동작을 위한 오브젝트 식별자는 장해 핸들러 수단을 트리거하고;
    상기 메모리를 가비지 수집하기 위한 수단으로서, 상기 가비지 수집 수단은 가비지 수집이 불완전한 경우 상기 오브젝트중의 특정 하나를 식별하기 위한 상기 부분적으로 수집된 오브젝트 식별자 수단을 유지하고, 그것에 의해 상기 프로세서상에 실행할 수 있는 뮤테이터 수단에 대한 바운드된 정지 시간에 따라 상기 가비지 수집 수단의 인터럽트하게 하는 것을 특징으로 하는 컴퓨터 머신.
KR1019997012181A 1997-06-26 1998-06-25 일부 재배치된 오브젝트의 인스턴스와 연관된 판독 및기록 배리어를 포함하는 바운드된 정지 시간 가비지 영역수집 시스템 및 방법 KR20010020494A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/882,801 US5857210A (en) 1997-06-26 1997-06-26 Bounded-pause time garbage collection system and method including read and write barriers associated with an instance of a partially relocated object
US8/882,801 1997-06-26

Publications (1)

Publication Number Publication Date
KR20010020494A true KR20010020494A (ko) 2001-03-15

Family

ID=25381360

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019997012181A KR20010020494A (ko) 1997-06-26 1998-06-25 일부 재배치된 오브젝트의 인스턴스와 연관된 판독 및기록 배리어를 포함하는 바운드된 정지 시간 가비지 영역수집 시스템 및 방법

Country Status (5)

Country Link
US (1) US5857210A (ko)
EP (1) EP1000396A1 (ko)
JP (1) JP4043528B2 (ko)
KR (1) KR20010020494A (ko)
WO (1) WO1999000729A1 (ko)

Families Citing this family (62)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6199075B1 (en) * 1997-05-30 2001-03-06 Sun Microsystems, Inc. Method and apparatus for generational garbage collection of a heap memory shared by multiple processors
US6021415A (en) * 1997-10-29 2000-02-01 International Business Machines Corporation Storage management system with file aggregation and space reclamation within aggregated files
US6065020A (en) * 1998-05-27 2000-05-16 Microsoft Corporation Dynamic adjustment of garbage collection
US6131191A (en) * 1998-07-21 2000-10-10 Intel Corporation Code implants for compilers
US6144970A (en) * 1998-09-24 2000-11-07 International Business Machines Corporation Technique for inplace reorganization of a LOB table space
US6317756B1 (en) * 1998-10-07 2001-11-13 International Business Machines Corporation On-the-fly garbage collector
US7310718B1 (en) * 1998-11-25 2007-12-18 Sun Microsystems, Inc. Method for enabling comprehensive profiling of garbage-collected memory systems
US6629113B1 (en) 1999-06-30 2003-09-30 International Business Machines Corporation Method and system for dynamically adjustable and configurable garbage collector
US7096238B2 (en) 1999-08-19 2006-08-22 Sun Microsystems, Inc. Dynamic feedback for determining collection-set size
US6349314B1 (en) 1999-09-29 2002-02-19 Motorola, Inc. Adaptive scheduler for mark and sweep garbage collection in interactive systems
US6671707B1 (en) * 1999-10-19 2003-12-30 Intel Corporation Method for practical concurrent copying garbage collection offering minimal thread block times
US6678810B1 (en) 1999-12-30 2004-01-13 Intel Corporation MFENCE and LFENCE micro-architectural implementation method and system
AU2001250589A1 (en) * 2000-02-07 2001-08-14 Insignia Solutions Plc Reduced size object headers
US6839725B2 (en) * 2000-05-16 2005-01-04 Sun Microsystems, Inc. Dynamic adaptive tenuring of objects
US6799191B2 (en) * 2000-05-16 2004-09-28 Sun Microsystems, Inc. Object sampling technique for runtime observations of representative instances thereof
US6865585B1 (en) * 2000-07-31 2005-03-08 Microsoft Corporation Method and system for multiprocessor garbage collection
US6738875B1 (en) * 2000-07-31 2004-05-18 Microsoft Corporation Efficient write-watch mechanism useful for garbage collection in a computer system
US6502111B1 (en) * 2000-07-31 2002-12-31 Microsoft Corporation Method and system for concurrent garbage collection
EP1387273B1 (en) * 2002-07-31 2010-07-21 Texas Instruments Incorporated Conditional garbage collection based on monitoring to improve real time performance
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
US6999979B2 (en) * 2002-11-05 2006-02-14 Sun Microsystems, Inc. Efficient encoding of references into a collection set
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
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
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
US7085790B2 (en) * 2002-12-06 2006-08-01 Sun Microsystems, Inc. Advancing cars in trains managed by a collector based on the train algorithm
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
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
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
US20040186863A1 (en) * 2003-03-21 2004-09-23 Garthwaite Alexander T. Elision of write barriers for stores whose values are in close proximity
US7089272B1 (en) 2003-06-18 2006-08-08 Sun Microsystems, Inc. Specializing write-barriers for objects in a garbage collected heap
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
US7404182B1 (en) 2003-10-03 2008-07-22 Sun Microsystems, Inc. Deferring and combining write barriers for a garbage-collected heap
US7114045B1 (en) * 2003-12-23 2006-09-26 Sun Microsystems, Inc. Garbage collection with a dynamic window
US7747659B2 (en) * 2004-01-05 2010-06-29 International Business Machines Corporation Garbage collector with eager read barrier
US7519639B2 (en) * 2004-01-05 2009-04-14 International Business Machines Corporation Method and apparatus for dynamic incremental defragmentation of memory
US7624137B2 (en) * 2004-01-05 2009-11-24 International Business Machines Corporation Method and apparatus for scheduling and performing garbage collection in a real-time system with guaranteed space bounds
US7702663B2 (en) * 2004-01-05 2010-04-20 International Business Machines Corporation Breaking read barrier to apply optimizations
KR100608606B1 (ko) * 2004-01-28 2006-08-03 삼성전자주식회사 적응형 가비지 컬렉션 방법 및 상기 방법을 수행하는 장치
US20050198088A1 (en) * 2004-03-03 2005-09-08 Sreenivas Subramoney Method and system for improving the concurrency and parallelism of mark-sweep-compact garbage collection
US7853628B1 (en) * 2004-04-09 2010-12-14 Oracle America, Inc. Selective promotion policy for generational garbage collectors
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
US7321909B1 (en) 2004-12-23 2008-01-22 Sun Microsystems, Inc. Method and apparatus for forwarding references to objects concurrently with space-incremental garbage collection
US20060271542A1 (en) * 2005-05-25 2006-11-30 Harris Steven T Clustered object state using logical actions
US7953773B2 (en) * 2005-07-15 2011-05-31 Oracle International Corporation System and method for deterministic garbage collection in a virtual machine environment
DE202006021213U1 (de) * 2005-07-21 2013-11-08 Covidien Lp Vorrichtung zum Behandeln einer hohlen anatomischen Struktur
US7685580B1 (en) * 2005-08-30 2010-03-23 Sun Microsystems, Inc. Method and apparatus for selectively eliminating write barriers in snapshot-at-the beginning concurrent-marking garbage collectors
WO2010018613A1 (ja) * 2008-08-11 2010-02-18 富士通株式会社 ガーベジコレクションプログラム、及びガーベジコレクション方法、ならびにガーベジコレクションシステム
US8412751B2 (en) * 2010-12-15 2013-04-02 International Business Machines Corporation Determining whether a Java object has been scan-missed by a garbage collector scan
US8825721B2 (en) * 2011-10-03 2014-09-02 Oracle International Corporation Time-based object aging for generational garbage collectors
US9053003B2 (en) 2012-06-21 2015-06-09 Microsoft Technology Licensing, Llc Memory compaction mechanism for main memory databases
EP2972885B1 (en) * 2013-03-14 2020-04-22 Intel Corporation Memory object reference count management with improved scalability
US9535831B2 (en) 2014-01-10 2017-01-03 Advanced Micro Devices, Inc. Page migration in a 3D stacked hybrid memory
US20170123700A1 (en) 2015-11-03 2017-05-04 Samsung Electronics Co., Ltd. Io redirection methods with cost estimation
US10254998B2 (en) * 2015-11-03 2019-04-09 Samsung Electronics Co., Ltd. Coordinated garbage collection of flash devices in a distributed storage system
US11789649B2 (en) 2021-04-22 2023-10-17 Nvidia Corporation Combined on-package and off-package memory system

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4922414A (en) * 1982-12-17 1990-05-01 Symbolics Inc. Symbolic language data processing system
US4775932A (en) * 1984-07-31 1988-10-04 Texas Instruments Incorporated Computer memory system with parallel garbage collection independent from an associated user processor
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
US4807120A (en) * 1987-04-30 1989-02-21 Texas Instruments Incorporated Temporal garbage collector with indirection cells
US4907151A (en) * 1988-09-30 1990-03-06 Digital Equipment Corporation System and method for garbage collection with ambiguous roots
US5088036A (en) * 1989-01-17 1992-02-11 Digital Equipment Corporation Real time, concurrent garbage collection system and method
US5321834A (en) * 1989-11-28 1994-06-14 Xerox Corporation Method and system for reclaiming unreferenced computer memory space
US5218698A (en) * 1991-11-22 1993-06-08 Aerojet-General Corporation Garbage collection system for a symbolic digital processor
US5560003A (en) * 1992-12-21 1996-09-24 Iowa State University Research Foundation, Inc. System and hardware module for incremental real time garbage collection and memory management
US5687368A (en) * 1994-07-22 1997-11-11 Iowa State University Research Foundation, Inc. CPU-controlled garbage-collecting memory module
US5590332A (en) * 1995-01-13 1996-12-31 Baker; Henry G. Garbage collection, tail recursion and first-class continuations in stack-oriented languages

Also Published As

Publication number Publication date
EP1000396A1 (en) 2000-05-17
US5857210A (en) 1999-01-05
WO1999000729A1 (en) 1999-01-07
JP2002506548A (ja) 2002-02-26
JP4043528B2 (ja) 2008-02-06

Similar Documents

Publication Publication Date Title
US5873104A (en) Bounded-pause time garbage collection system and method including write barrier associated with source and target instances of a partially relocated object
US5857210A (en) Bounded-pause time garbage collection system and method including read and write barriers associated with an instance of a partially relocated object
US5873105A (en) Bounded-pause time garbage collection system and method including write barrier associated with a source instance of a partially relocated object
EP0914632B1 (en) Write barrier apparatus and method for trapping garbage collection page boundary crossing pointer stores
EP0914633B1 (en) Generation isolation system and method for garbage collection
EP0914634B1 (en) Write barrier system and method including pointer-specific instruction variant replacement mechanism
US7062519B2 (en) Incremental scanning of enormous objects to improve scheduling and pause-time behavior of garbage collection
US6912553B1 (en) Virtual machine memory management
Detlefs Concurrent garbage collection for C++
Blackburn et al. In or out? Putting write barriers in their place
US7062518B2 (en) Efficiently supporting the existence of long trains in a generation managed by the train algorithm
US7676801B1 (en) Scanning of evacuated objects in a generation managed by the train algorithm
US7096329B2 (en) Better placement of objects promoted into a generation managed by the train algorithm
US7653793B1 (en) Use of memory protection to implement replicating collection in an incremental, copying garbage collector
Detlefs et al. Concurrent remembered set refinement in generational garbage collection
US7539713B2 (en) Allocation of likely popular objects in the train algorithm
KR100576904B1 (ko) 가비지수집페이지경계횡단포인터스토어를트랩하기위한기록배리어시스템및방법
KR100502380B1 (ko) 포인터-고유명령변형교환메카니즘을포함하는쓰기배리어시스템및방법

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid