KR19990007400A - 일부 재배치된 오브젝트의 소오스 인스턴스와 결합된 기록 배리어를 포함하는 유계 정지 시간 폐영역 회수 시스템 및 방법 - Google Patents

일부 재배치된 오브젝트의 소오스 인스턴스와 결합된 기록 배리어를 포함하는 유계 정지 시간 폐영역 회수 시스템 및 방법 Download PDF

Info

Publication number
KR19990007400A
KR19990007400A KR1019980024474A KR19980024474A KR19990007400A KR 19990007400 A KR19990007400 A KR 19990007400A KR 1019980024474 A KR1019980024474 A KR 1019980024474A KR 19980024474 A KR19980024474 A KR 19980024474A KR 19990007400 A KR19990007400 A KR 19990007400A
Authority
KR
South Korea
Prior art keywords
instance
storage
memory
copy
processor
Prior art date
Application number
KR1019980024474A
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
Application filed by 올센 케니즈, 썬 마이크로시스템즈 인코퍼레이션 filed Critical 올센 케니즈
Publication of KR19990007400A publication Critical patent/KR19990007400A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • G06F12/0269Incremental or concurrent garbage collection, e.g. in real-time systems
    • G06F12/0276Generational garbage collection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99956File allocation
    • Y10S707/99957Garbage collection

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)
  • Stored Programmes (AREA)

Abstract

부분적으로 재배치된 대형 혹은 보급형 메모리 오브젝트로 저장하기 위한 기록 장벽은 예를 들어, 카핑 회수기, 세대별 회수기 및 압축을 제공하는 회수기를 포함하는 재배치 폐영역 회수기의 유계 정지 시간 구현을 실행한다. 그런 기록 장벽은 폐영역 회수기 구현이 대형 혹은 보급형 메모리 오브젝트의 재배치를 중단하도록 하여서 유계 중지 시간이 보증되게 한다. 기록 장벽 논리에 액세스할 수 있는 카피-프롬 식별자 저장장치를 포함하는 부분적으로 재배치된 오브젝트 식별자 저장장치는 기록 장벽 논리가 부분적으로 재배치된 메모리 오브젝트의 FromSpace 와 ToSpace 인스턴스 사이에서 일관성을 유지하게 한다. 카피-프롬 식별자 저장장치는 기록 장벽, 혹은 그에 응답하는 트랩 핸들러가 FromSpace 와 ToSpace 인스턴스 양자로 FromSpace 인스턴스를 목적하는 저장지향 메모리 액세스를 동보통신하도록 한다. 선택의 HowFar 지시 저장장치는 부분적으로 재배치된 메모리 오브젝트의 복사부와 복사되지 않은 부분 사이에서 기록 장벽 논리에 의한 차별을 수행한다.

Description

일부 재배치된 오브젝트의 소오스 인스턴스와 결합된 기록 배리어를 포함하는 유계 정지 시간 폐영역 회수 시스템 및 방법
본 발명은 폐영역 회수에 관한 것으로, 특히 유계 정지 시간 폐영역 회수를 용이하게 하기 위한 방법 및 장치에 관한 것이다.
종래에는, 메모리의 동적할당 및 할당해제는 대부분의 프로그래밍 언어들로 행해졌다. 예를 들어, 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 the 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 인스턴스로 순방향의 어드레스를 저장한다. 오브젝트의 ToSpace 인스턴스에서, 링크 워드는 오브젝트의 FromSpace 인스턴스로 역방향 링크를 저장한다. 순방향 및 역방향 링크가 세트된후, 오브젝트는 증분 카피된다. 작은 오브젝트에서와 같이, 대형 오브젝트의 필드가 카피되고 아직 카피되어 있지 않은 FromSpace 오브젝트로 포인터를 되돌리기 위해서 스캔된다. 베이커는 일부 카피된 대형 오브젝트에 대한 판독 액세스를 조정하기 위해서, 폐영역 회수 변수인 스캔(scan) 에 의해 정의된 스캔/언스캔 경계를 사용하였다. 베이커의 설계비는, 부가적인 헤더 워드와는 별개로, 대형 오브젝트의 ToSpace 인스턴스로의 기록들에 대한 소프트웨어 기록-배리어이었다. 만약 어드레스가 scan 보다 크다면, 기록은 역방향 링크를 사용하는 OldSpace 인스턴스에서 행해진다. 그렇지 않다면, 기록은 NewSpace 인스턴스에서 행해진다.
닐센 및 쉬미트는 베이커의 카피 회수기를 기초로하여 하드웨어 해결책을 제시하였다. 특히, 닐센 및 쉬미트는, 하드웨어 판독-배리어가 회수가 완료된 일루션(illusion) 을 유지하는 폐영역 회수 메모리 모듈을 제공하였다. 폐영역 회수된 메모리 모듈내의 하드웨어 조정자는 하드웨어 베이커형 판독-배리어를 제공하고, 또한 추가적으로 ToSpace 내의 아직 오브젝트의 카피되지 않은 부분으로의 액세스에 대한 판독 및 기록 배리어를 제공한다. 폐영역 회수된 메모리 모듈은 카피되지 않은 영역의 처음과 끝을 표시하기 위해서 메모리 어드레스 레지스터를 유지한다. 카피되지 않은 영역에 접근하는 판독 및 기록은 FromSpace 인스턴스 영역으로 명령한다.
따라서, 일부 재배치된 대형, 보통의 메모리 오브젝트로의 저장에 대한 기록 배리어는 재배치 폐영역 회수기, 예를 들어 카핑 회수기, 세대별 회수기 및 압축을 제동하는 회수기를 포함하는 유계 정지 시간 구현을 용이하게 한다. 일부 재배치된 오브젝트 식별자 저장장치와 거기에 응답하는 기록 배리어는 폐영역 회수기 구현에 의한 대형 혹은 보통의 메모리 오브젝트의 재배치를 중단하도록 하여 뮤테이터 프로세스에 대한 유계 정지 시간을 보증하게 한다.
기록 배리어 논리에 액세스할 수 있는 카피-프롬 식별자 저장장치를 포함하는 일부 재배치된 오브젝트 식별자 저장부는 기록 배리어 논리가 일부 재배치된 메모리 오브젝트의 FromSpace 및 ToSpace 인스턴스 사이에서 일관성을 유지하도록 한다. 실시예에서, 기록 배리어는 일관성을 유지하는 일부 재배치된 오브젝트 트랩 핸들러로 트랩된다. 기록 배리어 논리에 액세스할 수 있는 카피-프롬 식별자 저장장치를 포함하는 다른 실시예에서, 기록 배리어 그 차제는 소프트웨어 트랩 핸들러 오버헤드 없이 일관성을 유지한다. 옵션으로 how far 지시 저장장치는, 일부 재배치된 메모리 오브젝트의 카피부 및 카피되지 않은 부분 사이에서, 기록 배리어 논리에 의해서 혹은 일부 재배치된 오브젝트 트랩 핸들러에 의한 구별을 용이하게 한다. 임의의 실시예에서는 일부 재배치된 오브젝트의 카피부 및 카피되지 않은 부분사이의 차이를 구별하지 않기도 한다. 더욱이, 비록 기록 배리어로 액세스 할 수 있는 카피-투 와 카피-프롬 식별자 저장장치가, 기록 배리어 논리가, 소프트웨어 트랩 핸들러 오버헤드 없이, 일부 재배치된 메모리 오브젝트의 FromSpace 및 ToSpace 사이에서 일관성을 유지할 수 있도록 한다고 할지라도, 임의의 실시예는 그런 소프트웨어 트랩 핸들러를 포함할 수도 있다. 기록 배리어 논리 및 일부 재배치된 오브젝트 트랩 핸들러 사이에서의 다양한 또다른 기능의 할당이 가능하며, 청구항의 범위에서 벗어나지 않는다.
도 1a 및 도 1b (총괄하여 도 1 로서 언급함) 는 본 발명에 따른 유계 정지 시간 폐영역 회수기 구현 (implementation) 에 대한 지원부를 포함하는 가상 머신 하드웨어 프로세서의 대표적인 일례의 블록 다이아그램.
도 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 은 Sunnyvale, CA 에 있는 Intel 사의 등록상표이다) 와 같은 하이 엔드( high-end) CPU 보다 우수하다. 또한, 하드웨어 프로세서(100)는 저가이며 전력소모가 적다. 결국, 하드웨어 프로세서(100)는 휴대용으로 적당하다.
하드웨어 프로세서(100)가 하드웨어에 실질적으로 JAVA 가상 머신 명령 구현체를 제공하기 때문에, 20 내지 25 kilobyte 의 메모리 저장장치(예로서 ROM 또는 RAM, 그밖의 소프트웨어에 요구되는 것) 가 제거되거나 또는 대체로써 할당된다. 폐영역 회수기를 위한 하드웨어 지원부는 폐영역 회수기(예로서, 컴파일러 제공 판독 및/또는 기록 베리어 지원부)를 위한 인-라인 코드를 축소시키고, 제한된 메모리의 향상된 이용을 용이하게 하고, 폐영역 회수기 오버헤드 및 중단시간을 축소시킴으로써, 제한된 메모리의 JAVA 가상 머신 명령 구현에 대하여 이점을 더욱 제공한다. 대용량 메모리에 대한 지출이 제한된 환경 (예로서, 네트워크 에플리언스(appliance) 를 위한 인터넷 칩, 휴대폰 프로세서, 다른 무선통신 집적회로, 또는 내장 프로세서 및 포터블 장치와 같은 그 밖의 저전력 저비용 응용분야) 있어서, 하드웨어 프로세서(100)는 이점이 있다.
대용량 메모리가 실행가능한 환경에서도, 폐영역 회수기를 위한 하드웨어 지원부는 배리어 구현체와 연계된 오버헤드를 감소시키고, 메모리의 향상된 이용을 용이하게 하고, 폐영역 회수기 구현체를 재배치하기 위한 중단 시간을 감소시킨다. 특히, 하드웨어 프로세서(100)는 바람직한 JAVA 가상 머신 명령 구현의 내용에서 폐영역 회수기 방법 및 구현에 대해 이점을 제공한다. 하지만, 여기의 상세한 설명에 기초하여 당해기술분야의 전문가는 여타 JAVA 가상 머신 명령 구현에 대한 변형(예로서, 여타 비-JAVA (non-Java) 가상 머신 명령 구현체 뿐만아니라 인터프리트된 및 JIT 컴파일러 JAVA 가상 머신 명령 구현체 ) 을 인식할 것이다.
여기서 사용되는, 가상 머신은, 하나의 명령 세트를 구비하고 다양한 메모리 영역을 이용하는 실제의 연산 머신과 같은 추상적인 연산 머신이다. 가상 머신 사양은 가상 머신 구현에 의해 실행되는 프로세서 아키텍쳐 독립 가상 머신의 세트를 정의한다. 일반적으로, 가상 머신 구현은 하드웨어(예로서, 하드웨어 프로세서(100)의 경우 처럼) 내에 , 소프트웨어(예로서, 인터프리트 된 및 JIT 컴파일러 JAVA 가상 머신 명령 구현체) 내에 , 또는 하드웨어 및 소프트웨어 내에 존재할 수도 있다. 각각의 가상 머신 명령은 실행되어야 할 특정된 오퍼레이션을 정의한다. 가상 머신은 가상 머신 명령을 생성시키는데 사용되는 컴퓨터 언어 또는 가상 머신의 기초의 구현은 이해할 필요는 없다. 가상 머신 명령에 대한 특별한 포맷만이 이해될 것이 필요할 뿐이다. 바람직한 실시예에 있어서, 가상 머신 명령은 JAVA 가상 머신 명령이다. 각각의 JAVA 가상 머신 명령은 정보, 오퍼랜드, 및 그 밖의 다른 요구되는 정보를 식별하는 명령을 인코딩(encode)하는 하나 또는 그 이상의 바이트를 포함한다.
이 실시예에 있어서, 하드웨어 프로세서(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 Michiael 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) 와 완전히 카피되지 않은 부분 (552) 을 포함한다. 대형 오브젝트 (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) 의 특정 실시예에 의해 지원된 폐영역(garbage) 회수방법에 따라서, 기록 및/또는 판독기 배리어 지원부는 회수기 트래버설(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 가상 머신 명령 바이트 코드를 포함한다. 예를 들어 일부 재배치된 오브젝트 트랩이 포함된, 폐영역(garbage) 회수 트랩은 트래핑 기록이 평가되어지기 전에 트리거 된다. 따라서, 프로세서가 무한정 트래핑되는 것을 방지하기 위해, 일부 재배치된 오브젝트 트랩 핸들러 (650) 는 추가적인 폐영역 회수관련 기능과 함께 트래핑 기록을 에뮬레이트 한다. 한 실시예에서, 프로그램 카운터와 트랩 제어 논리 (170) 는 프로그램 카운터를 다음의 JAVA 가상 머신 명령에 있게 하여 트랩핑 기록을 따르게 한다. 다음의 더 상세한 설명에 기초하여, 당업자는 강제된 일관성 정책에 의존하는 일부 재배치된 오브젝트 트랩 핸들러를 위한 여러 가지의 유효 행동을 식별할 것이다.
비록 폐영역 회수가 FROM 필드 (411), TO 필드 (412), HOWFAR 필드 (413) 및 일부 재배치된 오브젝트 트랩 핸들러를 잠재적으로 포함하는 배리어 (660) 의 내용을 포함하는 일부 재배치된 오브젝트 식별자 저장부 (410) 의 도 6 의 실시예에 관하여 기술되었다 할지라도, 여러 가지 선택적인 실시예들이 또한 적절하다. 여러 가지 선택적인 실시예들에서, 일부 재배치된 오브젝트 트랩 핸들러는 제거될 수 있고 뮤테이터 프로세스 액세스는 하드웨어 배리어 지원부에 의해 적절하게 핸들링될 수 있어서, 트랩핸들러와 관련된 오버헤드를 줄일 수 있다. 다음의 예시적인 실시예의 기술에 기초하여, 당업자는 청구범위의 영역에 해당하는 여러가지 추가적인 조합과 변화를 이해할 것이다.
카피-프롬 인스턴스 식별자 저장부와 관련된 기록 배리어
도 7 은 관련된 기록 배리어가 있는 카피-프롬 레지스터를 가진 실시예를 도시한다. 특히, 도 7 의 실시예는 일부 재배치된 오브젝트 식별자 저장부 (410) (도 4) 의 FROM 필드 (411), 하드웨어 기록 배리어 (740) 및 일부 재배치된 오브젝트 트랩 핸들러 (750) 를 포함한다. 도 7 의 실시예에서는, FROM 필드 (411) 는 하드웨어 프로세서 (100) 의 레지스터 (144) 내에 나타내어 진다. 뮤테이터 프로세스 (610), 폐영역 회수 프로세스 (620) 및 일부 재배치된 오브젝트 트랩 핸들러 (650) 는 하드웨어 프로세서 (100) 에 실행가능한 소프트웨어를 포함한다. 이 실시예는 대형 오브젝트의 증분 카피를 촉진한다. 그러나, 추가적인 지원부가 없다면, 이 실시예는 보급형 재배치된 오브젝트의 ToSpace (430) 인스턴스에 대한 다수개의 포인터의 증분 갱신에 매우 적절하지 못하게 되어 있다. 그럼에도 불구하고, 예를 들어, 도 17b 를 참조하여 아래에 기술된 것처럼, 핸들러를 통하여 참조된 오브젝트가 있는 폐영역 회수 시스템에 있어서, 싱글 핸들을 ToSpace (430) 인스턴스로 갱신하는 것이 사소한 것일 수 있으므로, 그와 같은 실시예는 하드웨어 요구를 줄이고 유계 정지 시간 재배치를 위해 실행가능하다.
뮤테이터 프로세스 (610) 는 회수된 스페이스 (630) 로부터 및 스페이스로 판독기 및 기록 액세스를 하게 한다. 판독기 액세스는 폐영역 회수 지원부에 의해 영향을 받지 않는다. 그러나, 기록 액세스는 하드웨어 기록 배리어 (740) 에 의해 선택적으로 트랩이 된다. FROM 필드 (411) 의 내용과 기록 액세스 (701) 와 관련된 타겟 참조 정보 사이에서의 일치에 대한 응답으로 하드웨어 기록 배리어 (740) 는 일부 재배치된 오브젝트 트랩 핸들러 (750)를 트리거 한다. 이 실시예에서, 일부 재배치된 오브젝트 트랩 핸들러 (750) 는 달리 TO 필드 (412) 에 저장된 카피-투 목적지(Copy-to destination) 정보를 위한 메모리 저장부를 결정하거나, 선택적으로 유지한다. 게다가, 폐영역 회수 소프트웨어는 달리 HOWFAR 필드 (413) 에 저장된 HOWFAR 정보를 위한 저장부를 선택적으로 유지할 수도 있다. 뮤테이터 프로세스 (610) 가 대형 오브젝트의 FromSpace (420) 인스턴스에 저장할 때, 저장 데이터는 카피-프롬 인스턴스 (Copy-From instance) (450) 와 카피-투 인스턴스(Copy-To Instance) (450A) 에 모두 동보통신되거나, 혹은 HOWFAR 정보용 저장부을 제공하는 실시예에서는, 만약 대형 오브젝트의 저장된 to 필드가 이미 카피되었다면, HOWFAR 저장장치는 검증되고, 그 저장을 동보통신하며, 만일 그렇지 않다면, 카피-프롬 인스턴스(450) 로 다이렉트된다.
당업자는 폐영역 회수기 프로세서 (620) 가 일부 재배치된 오브젝트 트랩 (750) 에 이용가능한 to 필드와 HOWFAR 필드 저장 변수 (751) 를 갱신 할 수도 있는 여러 방법을 이해할 것이다. 갱신 (701) 은 임의의 적절한 방법에 의한다.
상기 기술한 바와 같이, 폐영역 회수 프로세스 (620) 는 대형 오브젝트의 카피-프롬 인스턴스 (450) 를 식별하기 위해 일부 재배치된 오브젝트 식별자 저장부 (410) 의 FROM 필드를 갱신한다. 이 실시예에서, 카피-투 인스턴스의 포인터는 카피가 완전하게 된 후, 대형 오브젝트을 위한 핸들이 갱신될 때까지 뮤테이터 프로세스 (610) 에 사용 가능하지 않다. 따라서, 카피-투 인스턴스 (450A) 에의 액세스에 대한 배리어는 유지될 필요가 없다. 이 실시예는 오버랩된 카피-프롬 과 카피-투 인스턴스를 위해 배열되지 않았다; 그러나, 오버랩된 인스턴스를 위한 지원부는 많은 재배치 회수방법, 예를 들어, 세대별 이용 또는 카피 회수 방법을 위해 필요하지 않다
한 실시예에서, 하드웨어 기록 배리어 (740) 는 저장 지향적인(store-oriented) 바이트코드 (예를 들어, putfield_quick, putfield, aastore, etc.)를 평가하는데 책임이 있는 정수부 (142) (도 1) 논리에 의해 제공된다. 그와 같은 실시예에서, 논리실시 하드웨어 기록 배리어 (740) 는 FROM 필드 (411) 의 내용에 의해 식별된 카피-프롬 인스턴스에 대한 기록을 트랩한다. 예를 들어, 하드웨어 기록 배리어 (640A) 의 바람직한 행동은 다음의 논리 방정식에 의해 기술된다.
if(objectref == FROM) then
generate gc_notify
gc_notify 는 예시적인 트랩 핸들러이다. 당업자는 상기 기술된, 세대별간 포인터 저장부 트랩핑과 같은 다른 기록 배리어 기능성을 조합하는 논리 실행을 포함하는 여러 가지 적합한 논리 실행을 이해할 것이다. How far 정보는 하드웨어 기록 배리어 (740) 에 의해 테일러 (tailor) 트래핑을 더 잘하기 위해 레지스터 (144)(도 4) 의 HOWFAR 필드 (413) 로서 동보통신이 필요한 경우에만 제공되어, 일부 재배치된 오브젝트 트랩 핸들러 (750) 호출(invocation) 과 관련된 오버헤드를 줄인다.
도 8 은 관련된 기록 배리어 (840) 가 있는 카피-프롬 레지스터 필드(예를 들어, FROM 필드 (411)) 이외에 카피-투 레지스터 필드(예를 들어, TO 필드 (412))를 포함하는 실시예를 도시한다. 도 8 의 실시예는 스토어에 대한 기록 배리어를 FROM 필드 (411) 의 내용에 의해 식별된 오브젝트 필드에 제공하고 일부 재배치된 오브젝트 트랩 (750) 과 그것의 관련 오버헤드를 유리하게 제거한다. 이 실시예는 대형 오브젝트의 증분 (유계 정지 시간) 카피를 촉진시키나, 도 7 과 같이, 카피된 오브젝트의 ToSpace (430) 인스턴스에 대한 다수의 포인터의 유계 정지 시간 갱신에 매우 적합하지는 않다. 상술한 바와 같이, 핸들링된 오브젝트 참조는 이러한 제한을 줄일 수 있어서, 간접적인 수단의 추가적인 레벨의 값을 치루고라도, 심지어 보급형의 대형 오브젝트의 전체적인 유계 정지 시간 재배치를 하게 한다.
하드웨어에 카피-투 레지스터 필드, 예를 들어, 레지스터 (144) 의 to 필드(412) 로서 유지함에 의해, 카피-프롬 인스턴스에 대한 기록 액세스는 소프트웨어 트랩 핸들러 간섭없이 하드웨어 기록 배리어 (840) 에 의해 카피-프롬 및 카피-투 에 모두 동보통신 될 수 있다. 한 실시예에서, 하드웨어 기록 배리어 (840) 는 저장지향 바이트 코드를 평가하는데 책임을 지는 정수부 (142) (도 1) 논리에 의해 제공된다. 그러한 실시예에서, 논리 실행 하드웨어 기록 배리어 (840) 는 store_data를 오브젝트참조 와 TO 필드 (412) 의 내용에 의해 각각 식별된 카피-프롬 및 카피-투 인스턴스 모두에 동보통신한다. 예시적인 하드웨어 기록 배리어 (840) 는 다음의 논리 방정식에 의해 기술된다.
if (objectref == FROM) {
store_data = *(objectref + offset)
store_data = *(TO + offset)
}
이 때, offset 은 저장지향 바이트 코드와 관련된 타겟 필드의 대형 오브젝트로의 오프셋트이다. 당업자는 상기에 기술된, 세대별 상호간의 포인터 저장부 트래핑과 같은 다른 기록 배리어 기능을 조합하는 논리실행을 포함하는, 여러 가지 적절한 논리 실행을 이해할 것이다. TO 필드 (412) 가 하드웨어 기록 배리어 (840)에 이용가능하므로, 동보통신은 하드웨어에서 실행되고 소프트웨어 트랩 오버헤드는 제거된다.
도 9 는 관련된 하드웨어 기록 배리어 (940)가 있는 카피-프롬 레지스터 필드 (예를 들어, FROM 필드 (411)) 이외에 카피-투 및 How-Far 레지스터 필드 (예, to 필드(412) 및 HOWFAR 필드 (413))을 포함하는 실시예를 도시한다. 도 9 의 실시예는 저장부에 대한 기록 배리어를 FROM 필드 (411) 의 내용에 의해 식별된 오브젝트의 필드에 제공하고, 일부 재배치된 오브젝트 트랩 핸들러(650) 와 그것의 관련된 오버헤드를 제거하는 동안, 하드웨어 기록 배리어 (940)가 저장부의 동보통신을 대형 오브젝트의 아직 카피되지 않은 부분에 유리하게 진행시키게 한다. 상기 실시예와 같이, 이 실시예는 대형 오브젝트의 증가하는 카피를 촉진시키나, 카피된 오브젝트의 ToSpace (430) 인스턴스에의 많은 수의 포인터의 유계 정지 시간 갱신에는 매우 적합하지는 않다. 전에서, 핸들된 오브젝트 참조는 이러한 제한을 감소시켜서, 비록 간접적인 수단의 추가적인 레벨의 값을 치루고서라도, 심지어 보급형 대형 오브젝트의 전체적인 유계 정지 시간 재배치를 하게 한다.
하드웨어의 카피-투 레지스터 필드를, 예를 들어, 레지스터 (144) 의 to 필드(412) 로서 유지함에 의해, 카피-프롬 인스턴스에의 기록 액세스는 하드웨어 기록 배리어 (940) 에 의해 카피-프롬 및 카피-투 에 모두 동보통신 될 수 있다. 하드웨어의 HOWFAR 레지스터fmf, 예를 들어 레지스터 (144)의 HOWFAR 필드 (413) 로서 더욱 더 유지함에 의해, 동보통신은 기록 액세스의 특정 타겟 필드는 이미 ToSpace (430) 에 카피된 것을 위한 기록 액세스에 제한될 수 있다. 이들 중 어느 한 경우에, 일부 재배치된 오브젝트에 대한 기록 액세스의 핸들링은 소프트웨어 트랩 핸들러 간섭이 없다. 한 실시예에서, 하드웨어 기록 배리어 (940) 는 저장-지향적인 바이트코드를 평가하는데 책임이 있는 정수부 (142)(도 1) 논리에 의해 제공된다. 그와 같은 실시예에서, 만일 타겟 오브젝트 필드가 대형 오브젝트의 이미 카피된 부분에 있는 경우에는 논리 구현 하드웨어 기록 배리어 (940) 는 카피-프롬 및 카피-투 인스턴스에 모두 store_data 를 동보통신하고, 타겟 오브젝트 필드가 대형 오브젝트의 아직 카피되지 않은 부분에 있으면 store_data를 카피-프롬 인스턴스로 다이렉트한다. 예시적인 하드웨어 기록 배리어 (940) 는 다음의 논리 방정식에 의해 기술된다.
if (objectref == FROM) {
if offset HOWFAR then
store_data = *(TO + offset)
store_data = *(objectref + offset)
}
이 때, offset 은 저장지향 바이트 코드와 관련된 타겟 필드의 대형 오브젝트로의 오프셋트이다. 어떤 실시예에서는, store_data를 카피-프롬 인스턴스에 지시하는 것은 단지 하드웨어 기록 배리어 (940) 간섭없이 기록 액세스를 정상적으로 완결하는 것에 의해 제공될 수도 있다. 당업자는 상기에 기술된, 세대별 상호간의 포인터 저장 트래핑과 같은 다른 기록 배리어 기능을 조합하는 논리 실행을 포함하는, 다수의 적절한 논리 실행을 이해할 것이다. HOWFAR 필드 (413) 가 하드웨어 기록 배리어 (940) 에 이용가능하므로, 하드웨어 기록 배리어 (940)는 선택적으로 store_data를 카피-투 인스턴스에 선택적으로 진행시킬 수 있다. 이 간단한 최적화는 두 개의 기록을 동보통신하는 것보다 오직 싱글 기록을 함에 의해 성능을 향상시킬 수도 있다.
카피-프롬 및 카피-투 인스턴스 식별자 저장부 양측에 연관된 기록 배리어
이하에서 도 10 및 도 11 을 참조하여 추가적인 실시예가 기재된다. 몇몇의 전술한 실시예에서와 같이, 이러한 추가적인 실시예는 하드웨어 지원 (예를 들어, 하드웨어 기록 배리어 및 부분적으로 재배치된 오브젝트 식별자 저장부 (410)) 을 이용하여 소프트웨어트랩 핸들러 게재 없이 부분적으로 재배치된 대형 오브젝트의 FromSpace (420) 인스턴스로의 기록을 적절히 처리한다. 그러나, 또한, 이러한 추가적인 실시예는 부분적으로 재배치된 대형 오브젝트의 ToSpace (430) 인스턴스로의 기록에 배리어를 제공한다. 이런 식으로, 처리된 오브젝트 참조 없이 대형 및/또는 보급형 오브젝트의 전체적인 유계중단시간 재배치를 위하여 보급형 오브젝트로의 포인터의 증분 갱신 및 대형 오브젝트의 증분 카피 모두를 지원한다.
도 10 및 도 11 의 실시예에서, 폐영역 회수기 (620) 는 대형 오브젝트로의 포인터 (즉, 오브젝트 참조 (objectref)) 를 점점 갱신한다. FromSpace (420) 인스턴스나 ToSpace (430) 인스턴스로의 뮤테이터 프로세스 (610) 기록액세스는 오브젝트 참조가 갱신되는 동안 두개의 인스턴스가 싱크 (sync) 로 유지되도록 하드웨어 기록 배리어, 즉 하드에어 기록 배리어 1040 이나 하드웨어 기록 배리어 1140 에 의해 동보통신된다 (또는 적절히 지시된다). 두개의 인스턴스가 싱크 (sync) 로 유지되기 때문에, 메모리 참조 구조는 어떤 오브젝트 참조가 FromSpace (420) 인스턴스를 참조하고 다른 오브젝트 참조가 대응하는 ToSpace (430) 인스턴스를 참조하는 참조 상태에 로버스트 (robust) 된다. 대형 오브젝트를 참조하는 오브젝트 참조 (objectref) 의 유계 정지 시간 갱신은 ToSpace (430) 인스턴스 (FromSpace (420) 인스턴스보다는) 를 참조하는 이러한 오브젝트 참조를 점점 갱신해감으로써 달성된다. 도 10 및 도 11 의 실시예에서, FromSpace (420) 인스턴스 및 ToSpace (430) 인스턴스가 겹치지 않을 수도 있다는 것에 주의해야 한다.
도 10 을 참조하면, 하드웨어 기록 배리어 (1040) 는 카피-프롬 인스턴스 (450) 또는 카피-투 인스턴스 (450A) 로의 기록액세스에 배리어를 제공한다. 하드웨어 기록 배리어 (1040) 는 하드웨어 기록 배리어 (840) 을 참조하여 전술한 바와 같이 증가하는 유계 정지 시간 카핑을 지원한다. 그러나, 하드웨어 기록 배리어 (1040) 는 또한 카피-투 레지스터 필드 (즉, 필드 (412)) 에 응답한다. 카피-프롬 인스턴스 (450) 또는 카피-투 인스턴스 (450A) 로의 기록액세스는 두 인스턴스의 데이터 상태가 동기화되도록 카피-프롬 인스턴스 (450) 및 카피-투 인스턴스 (450A) 모두에 동보통신된다. 이런 식으로, 부분적으로 재배치된 오브젝트에 대한 오브젝트 참조는, 어느 인스턴스로의 판독액세스가 동일한 필드 상태로 되기 때문에, 점점 갱신될 수도 있다.
일 실시예에서, 하드웨어 기록 배리어 (1040) 는 저장지향 바이트코드 (bytecode) 를 정할 책임이 있는 정수부 (142) (도 1) 논리에 의해 제공된다. 이러한 실시예에서, 논리 구현 하드웨어 기록 배리어 (1040) 는 store_data 를 FROM 필드 (411) 및 TO 필드 (412) 의 내용에 의해 각각 확인되는 카피-프롬 및 카피-투 인스턴스 양측으로 동보통신한다. 바람직한 하드웨어 기록 배리어 (1040) 가 다음의 논리 방정식으로 기재된다.
if ((objectref == FROM) ∥ (objectref == TO)) {
store_data = *(FROM + offset)
store_data = *(TO + offset)
}
여기에서 offset 는 저장지향 바이트코드에 연관된 타깃 필드의 대형 오브젝트로의 오프세트이다. 당업자라면, 상기한 바와 같이 세대간의 포인터 저장 트래핑 (trapping) 과 같은 다른 기록 배리어 기능을 결합한 논리 구현을 포함하는 다양한 적합한 논리 구현을 인식할 것이다. FROM 필드 (411) 및 TO 필드 (412) 가 하드웨어 기록 배리어 (1040) 에 이용되기 때문에, 이에 의해 각각 확인된 카피-프롬 인스턴스 (450) 및 카피-투 인스턴스 (450A) 로의 저장이 인정될 수 있으며, 양 인스턴스로의 동보통신이 소프트웨어 트랩 오버헤드 없이 하드웨어에서 수행될 수 있다.
도 11 은 How-Far 레지스터 필드 (예를 들어 HOWFAR 필드 (413)) 및 Mode 명령 (예를 들어 레지스터 (144) 의 mode 필드 (1114)) 를 가산하는 실시예를 도시한다. 도 10 의 실시예에서와 같이, 하드웨어 기록 배리어 (1140) 는 카피-프롬 인스턴스 (450) 또는 카피-투 인스턴스 (450A) 로의 기록액세스에 배리어를 제공한다. 하드웨어 기록 배리어 (1140) 는 FromSpace (420) 및 ToSpace (430) 인스턴스의 카피된 부분이 싱크로 유지되는 것을 보장함으로써 증분의, 유계 정지 시간 카핑을 지원한다. 하드웨어 기록 배리어 (1140) 는 유리하게도 하드웨어 프로세서 (100) 가 도 11 의 실시예에서 모드 필드 (1114) 의 카피 상태에 의해 나타내어지는 카핑 페이즈 (phase) 중에 대형 오브젝트의 아직 카피되지 않은 부분으로의 저장의 동보통신을 보류한다. 그러나, 모드 필드 (1114) 의 PTR_UPDATE 상태에 의해 나타내어지는 포인터 갱신 페이즈 중에, 카피-프롬 인스턴스 (450) 또는 카피-투 인스턴스 (450A) 로의 기록액세스가 카피-프롬 인스턴스 (450) 및 카피-투 인스턴스 (450A) 로 동보통신된다. 폐영역 회수기 프로세스 (620) 는 대형 오브젝트 재배치의 현재 페이즈에 대응하도록 모드 필드 (1114) 를 갱신한다.
일 실시예에서, 하드웨어 기록 배리어 (1140) 는 저장지향 바이트코드를 정할 책임이 있는 정수부 (142) (도 1) 논리에 의해 제공된다. 이러한 실시예에서, 논리 구현 하드웨어 기록 배리어 (1140) 는 타깃 오브젝트 필드가 대형 오브젝트의 이미 카피된 부분에 있다면 또는 대형 오브젝트가 완전히 카피되고 재배치가 포인터 갱신 페이즈에 들어갔다면 카피-프롬 및 카피-투 인스턴스 양측에 store_data 를 동보통신한다. 카핑 페이즈 중에, 논리 구현 하드웨어 기록 배리어 (1140) 는 타깃 오브젝트 필드가 대형 오브젝트의 아직 카피되지 않은 부분에 있다면 store_data 를 카피-프롬 인스턴스로 보낸다. 바람직한 하드웨어 기록 배리어 (1140) 는 다음과 같은 논리 방정식에 의해 기재된다.
if ((objectref == FROM) ∥ (objectref == TO)) {
if ((offset ≥ HOWFAR) ∥ (MODE == PTR_UPDATE)) then
store_data = *(TO + offset)
store_data = *(FROM + offset)
}
여기에서, 모드 필드 (1114) 의 상태, MODE 는 재배치 페이즈 (예를 들어 COPY 또는 PTR_UPDATE) 를 나타내고, 오프세트는 저장지향 바이트코드와 연관된 타깃 필드의 대형 오브젝트로의 오프세트이다. 당업자라면 전술한 바와 같이 세대간 포인터 저장 트래핑과 같은 다른 기록 배리어 기능성을 결합하는 논리 구현을 포함하는 다양한 적합한 논리 구현을 인식할 수 있을 것이다. HOWFAR 필드 (413) 및 모드 필드 (1114) 는 하드웨어 기록 배리어 (1140) 에 이용될 수 있기 때문에, 하드웨어 기록 배리어 (1140) 는 포인터 갱신 페이즈 중에 기록을 동보통신하면서 대형 오브젝트 재배치의 카핑 페이즈 중에 store_data 를 카피-투 인스턴스로 기록하는 것을 선택적으로 보류할 수 있다. 이러한 약간의 최적화는 카핑 페이즈 중에 두개의 기록을 동보통신하기 보다는 단일 기록을 수행함으로써 성능을 향상시킬 수도 있다. 추가적으로, 재배치 모드는 폐영역 회수기 프로세스 (620) 가 HOWFAR 필드 (413) 의 상태에서 카핑 페이즈의 완료를 인코딩하게 함으로써 나타내어질 수도 있다. 당업자라면 전술한 논리 방정식에서 0 보다 작거나 같은 HOWFAR 필드 (413) 값이 카피 페이즈의 완료를 인코딩하여 모드 필드 (1114) 를 제거하는데 이용될 수도 있음을 인식할 것이다.
카피-프롬 인스턴스 식별자 저장부와 연관된 판독 및 기록 배리어
이하에서, 추가적인 실시예가 도 12 내지 도 14 를 참조하여 기재된다. 앞에서 기재된 몇몇 실시예와 같이, 이러한 추가적인 실시예는 부분적으로 재배치된 대형 오브젝트의 FromSpace (420) 인스턴스로의 기록을 적절히 처리하기 위하여 하드웨어 지원 (예를 들어, 하드웨어 기록 배리어 및 부분적으로 재배치된 오브젝트 식별자 저장부 (410)) 을 이용한다. 그러나, 이러한 추가적인 실시예는 또한 부분적으로 재배치된 대형 오브젝트의 FromSpace (420) 로부터의 판독에 대한 배리어를 제공한다. 이런 식으로, 이러한 추가적인 실시예는 처리된 오브젝트 참조 없이 대형 오브젝트로의 포인터의 유계 정지 시간 갱신뿐만 아니라 유계중단시간 카핑을 지원한다.
도 12 내지 도 14 의 실시예에서, 폐영역 회수기 프로세스 (620) 는 카피 페이즈 중에 FromSpace (420) 인스턴스로부터 ToSpace (430) 인스턴스로 대형 오브젝트를 점진적으로 카피하고 (MODE = COPY), 포인터 갱신 페이즈 중에 대형 오브젝트로의 포인터 (즉, objectref) 를 점진적으로 갱신한다 (MODE = PTR_UPDATE). 대형 오브젝트 재배치의 카피 페이즈 중에, FromSpace (420) 인스턴스로의 뮤테이터 프로세스 (610) 기록액세스는 부분적으로 재배치된 오브젝트 트랩 핸들러, 예를 들어 부분적으로 재배치된 오브젝트 트랩 핸들러 (1250) 또는 하드웨어 기록 배리어, 예를 들어 하드웨어 기록 배리어 (1340) (도 13) 나 하드웨어 기록 배리어 (1440) (도 14) 에 의해 적절히 디렉트되거나 동보통신된다. 대형 오브젝트 재배치의 포인터 갱신 페이즈 중에, FromSpace (420) 인스턴스로의 뮤테이터 프로세스 (610) 기록 및 판독 액세스가 ToSpace (430) 인스턴스로 리디렉트되어진다.
도 12 는 판독 및 기록 배리어와 연관된 카피프롬 레지스터 필드를 포함하는 실시예이다. 특히, 도 12 의 실시예는 FROM 필드 (411), 하드웨어 판독 배리어 (1242), 하드웨어 기록 배리어 (1241) 및 일부 재배치된 오브젝트 트랩 핸들러 (1250) 을 포함한다. 하드웨어 판독 배리어 (1242) 및 하드웨어 기록 배리어 (1241) 은 판독 및 기록 배리어 하드웨어 (1240) 로서 예시적으로 도시되어 있다. 그러나, 구현에 의해서, 하드웨어 기록 배리어 (1241) 및 하드웨어 판독 배리어 (1242) 가 하드웨어를 공유하거나 혹은 별도의 하드웨어에 기초 할 수도 있다. 일 실시예에서, 저장지향 바이트코드를 평가하는 정수부 (142) (도 1) 논리는 적재지향 바이트코드(예를 들어, getfiled_quick,getfield, aaload 등) 를 평가하는 정수부 (142) 논리와 하드 기록 배리어 (1241) 을 제공한다.
뮤데이터 프로세스 (610) 는 회수된 공간 (630) 으로부터 그리고 그 공간으로 판독 및 기록 액세스를 수행한다. 임의의 판독 혹은 기록 액세스는, 판독 혹은 기록 액세스가 일부 재배치된 오브젝트의 FromSpace (420) 를 타겟으로한다면, 배리어 하드웨어 판독 및 기록 배리어 하드웨어 (1240) 에 의해서 선택적으로 트랩된다. 판독 및 기록 배리어 하드웨어 (1240) 는 FROM 필드 (411) 의 내용과 기록 액세스 (701) 혹은 판독 액세스 (1202) 와 연관된 타깃 오브젝트 참조 사이에서의 일치에 응답하여 일부 재배치된 오브젝트 트랩 핸들러 (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) 내에 저장된 것들과 같은 카피-투 수신지 정보를 결정하거나 혹은, 선택적으로 상기 정보를 위한 메모리 저장장치를 유지한다. 부가적으로, 일부 재배치된 오브젝트 트랩 핸들러 (1250) 는 HOWFAR 필드 (413) 에 저장된 것과 같은 HOWFAR 를 위한 저장을 선택적으로 유지할 수도 있다. 뮤테이터 프로세스 (610) 가 대형 오브젝트의 FromSpace (420) 인스턴스로 저장될 때, 저장 데이터는 카피-프롬 인스턴스 (450) 와 카피-투 인스턴스 (450A) 로 동보통신하거나 혹은 HOWFAR 정보를 위한 저장을 제공하는 실시예에서, HOWFAR 저장이 검증되며 상기 저장은, 대형 오브젝트로 저장된 TO 필드가 이미 카피되었다면 인스턴스 모두를 동보통신되고 그렇지 않으면 카피-투 인스턴스 (450) 로 디렉트된다.
포인터 갱신 단계 동안에, 일부 재배치된 오브젝트 트랩 핸들러 (1250) 는, 판독 및 기록 액세스로하여금 그의 ToSpace (430) 인스턴스에 일부 재배치된 대형 오브젝트의 FromSpace (420) 인스턴스를 목표로 하도록 디렉트한다. 앞에서와 같이, 일부 재배치된 오브젝트 트랩 핸들러 (1250) 는, 그렇지않다며, TO 필드 (412) 에 저장되었을 것과 같은, 카피-투 목적지 정보에 대한 메모리 스토리지를 선택적으로 결정하거나, 또는 유지한다. 어느 경우에서도, 일부 재배치된 오브젝트 핸들러 (1250) 는 ToSpace (430) 인스턴스에의 판독 및 기록 액세스 양자를 리디렉트한다. 이러한 방법으로, 일부 재배치된 오브젝트에의 판독 액세스는, 최신인 것으로 검증된 ToSpace (430) 인스턴스로 결정된다.
일부 재배치된 오브젝트 트랩 핸들러 (125) 에 대한 예시적인 기록 트랩 및 판독 트랩 함수는 다음과 같다:
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_destination 은 적재 지향 바이트코드에 대한 목적지이다.
일반적으로, 판독-배리어 경우를 트랩함으로서 부가되는 오버헤드는, 단지 기록 배리어만이 제공되는 경우에서의 오버헤드보다 더 큰데, 그이유는, 판독 액세스는, 주어진 명령어 스트림에서의 기록 액세스보다 좀더 일반적으로 존재하기 때문이며, 하여튼 기록 액세스가 추가적으로 존재한다. 부가적으로 이러한 이유에 대해, 하드웨어 판독 배리어 (1242) 가 일부 재배치된 대형 오브젝트의 FromSpace (420) 인스턴스로부터의 포인터 갱신 단계 판독에 대해 선택적이기 때문이다. 그러나, 하드웨어 판독 배리어 (1242) 는 일부 재배치된 대형 오브젝트의 FromSpace (420) 인스턴스로부터의 판독을, 재배치 단계에 무관하게, 선택적으로 트랩할 수도 있다. 그와 같은 실시예에서는, 일부 재배치된 오브젝트 트랩 핸들러 (125) 가 오버랩핑 카피-프롬 인스턴스 (450) 및 카피-투 인스턴스 (450A) 의 오버랩핑을 지능적으로 처리하도록 구성될 수 있다. 도 15 는 from 인스턴스 (450) 와 to 인스턴스 (1570) 의 오버랩핑을 나타낸 것으로, 복사된 부분 (1561) 이 to 인스턴스 (1570) 의 부분 (1571) 에 복사되어진다. 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≤ HOW_FAR) ∥
(MODE == PTR_UPDATE))
store_data => *(TO +offset)
else store_data => *(objectref+offset)
}
}
}
여기서, COPY_DIRECTION 은, FROM 필드 (411) 과 TO 필드 (412) 에 의해 각각 인코드됨에 따라, from 인스턴스 (1560) 과 to 인스턴스 (1570) 의 상대적인 위치로부터 확정할 수 있다. 적재 지향 액세스를 적절하게 리디렉트하기 위하여, 일부 재배치된 오브젝트 트랩 핸들러 (1250) 의 판독 트랩 함수에의 변형예들은 유사하다.
도 13 은 결합된 판독 및 기록 배리어 하드웨어 (1340) 를 갖는 카피-프롬 레지스터 필드 (예를들면, FROM 필드 (411)) 에 더하여 카피-투 레지스터 필드 (예를들면, TO 필드 (412)) 를 포함하는 실시예를 나타낸 것이다.
앞에서와 같이, 이 실시예는, 판독 및 기록 배리어 하드웨어 (1340) 가 대형 오브젝트 재배치의 포인터 갱신 단계와 복사 단계가 식별가능하도록, 폐영역 회수기 프로세스 (620) 에 의해 보존된 모드 표시부 (mode indication) (예를들면, 레지스터 144 의 모드 필드 (1114)) 를 포함한다. 도 12 의 실시예와 비교해 보면, 도 13 의 실시예는 (예를들면, FROM 필드 (411) 의 내용에 의해 식별된 오브젝트의 필드에 저장하기 위한 하드웨어 판독 배리어 (1342) 와 FROM 필드 (411) 의 내용에 의해 식별된 오브젝트의 필드에 저장하기 위한 하드 기록 배리어 (1341) 와 같은) 하드웨어내에서의 판독 및 기록 배리어 지원을 제공함으로써, 일부 재배치된 오브젝트 트랩 핸들러 (1250) 와 그에 관련된 오버헤드를 제거하는 이점이 있다.
하드웨어 내에 카피-투 레지스터 필드를, 예를들면, 레지스터 (144) 내의 TO 필드 (412) 로서 보존함으로써, 카피-프롬 인스턴스에의 기록 액세스가 복사단계 (MODE = COPY) 동안에, 소프트웨어 트랩 핸들러 방해없이 하드웨어 기록 배리어 (1341) 에 의해 카피-프롬 및 카피-투 인스턴스 양자에 동보통신될 수 있다. 다시, 포인터 데이트 단계 (MODE = PTR_UPDATE) 동안에, 카피-프롬 인스턴스에의 기록 액세스가 하드웨어 기록 배리어 (1341) 에 의해 소프트웨어 트랩 핸들러 방해없이, 카피-투 인스턴스에 리디렉트된다. 또한, 카피-프롬 인스턴스로부터의 판독 액세스가 포인터 갱신 단계 동안에, 소프트웨어 트랩 핸들러 방해없이 하드웨어 판독 배리어 (1342) 에 의해 카피-투 인스턴스에 리디렉트된다. 카피-프롬 인스턴스에의 복사단계 판독 액세스가 정상적으로 완결된다.
일 실시예에서, 판독 및 기록 배리어 하드웨어 (1340) 가 바이트코드를 평가하는 정수부 (142) (도 1 참조) 논리에 의해 제공된다. 하드웨어 기록 배리어 (1341) 는 저장 지향 바이트코드를 평가하는 정수부 (142) 논리에 의해 제공되며, 하드웨어 판독 배리어 (1342) 는 적재 지향 바이트코드를 평가하는 정수부 (142) 논리에 의해 제공된다.
복사 단계 동안에, 하드웨어 판독 배리어 (1342) 를 구현하는 논리는 store_data 를 objectref 및 TO 필드 (412) 의 내용에 의해 확인된 카피-프롬 및 카피-투 인스턴스 양자에 동보통신하면서, 포인터 갱신 단계 동안에, 하드웨어 기록 배리어 (1342) 를 구현하는 논리는 카피-투 인스턴스에만 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 은 저장 또는 적재 지향 바이트코드에 관계된 타겟 필드 (target field) 의 대형 오브젝트로의 오프셋이다. 당해분야의 전문가들은, 하드웨어 판독 배리어 (1341) 및 하드웨어 기록 배리어 (1342) 를 결합한 논리 구현뿐만아니라, 상술한 바와 같은 세대간 포인터 저장 트랩핑과 같은 다른 기록 배리어 기능성 (functionality) 을 가진 하드웨어 기록 배리어 (1342) 를 결합한 구현을 포함하는, 여러가지 적당한 논리 구현을 알 수 있을 것이다. TO 필드 (412) 가 하드웨어 기록 배리어 (1342) 와 하드웨어 판독 배리어 (1341) 에 이용할 수 있기 때문에, 동보통신 및 리디렉트가 하드웨어에서 수행될 수 있으므로, 소프트웨어 트랩 오버헤드가 제거된다.
도 14 는 How-Far 레지스터 필드 (예를들면, HOWFAR 필드 (413)) 을 부가한 실시예를 나타낸 것이다.
도 13 의 실시예에서와 같이, 판독 및 기록 배리어 하드웨어 (1440) 는 카피-프롬 인스턴스 (450) 로의 판독 및 기록 액세스와 카피-프롬 인스턴스 (450) 에의 판독 및 기록 액세스에 배리어를 제공한다. 또한, 판독 및 기록 배리어 하드웨어 (1440) 는, 저장 또는 적재 지향 바이트코드에 의해 참조된 필드가 이미 ToSpace (430) 인스턴스에 복사되었는지의 여부에 따라서, 적당한 FromSpace (420) 또는 ToSpace (430) 인스턴스에의 판독 및 기록 액세스를 행한다. HOWFAR 필드 (413) 와 함께 동작하는 경우에는, 하드웨어 기록 배리어 (1441) 는, 유감스럽게도, 하드웨어 프로세서 (100) 로 하여금, 모드 필드 (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_destination <= *(objectref + offset)
}
else { /* COPY_DIRECTION == FRONT_TO_BACK */
if ((offset ≤ HOW_FAR) ∥
(MODE == PTR_UPDATE))
read_destination <= *(TO + offset)
else read_destination <= *(objectref + offset)
}
}
여기서, read_destination 은 적재 지향 바이트코드의 목적지이며, 각 경우, offset 은 저장 또는 적재 지향 바이트코드에 관계된 타겟 필드 (target field) 의 대형 오브젝트로의 오프셋이다. 당해분야의 전문가들은, 하드웨어 판독 배리어 (1441) 및 하드웨어 기록 배리어 (1442) 를 결합한 논리 구현뿐만아니라, 상술한 바와 같은 세대간 포인터 저장 트랩핑과 같은 다른 기록 배리어 기능성 (functionality) 을 가진 하드웨어 기록 배리어 (1342) 를 결합한 구현을 포함하는, 여러가지 적당한 논리 구현을 알 수 있을 것이다.
카피-투 인스턴스 식별자 저장에 관련된 판독 및 기록 배리어들
도 12 내지 14의 실시예상의 일련의 변형예들은, 카피-프롬 인스턴스 식별자 저장에 관해서라기 보다는, 카피-투 인스턴스 식별자 저장부에 관련된 읽기 및 기록 배리어들을 포함한다. 앞에서와 같이, 이들 변형들은, 소프트웨어 트랩 핸들러 오버헤드를 제거하고, 카피-프롬 및 카피-투 인스턴스들 (450 및 450A)의 오버랩을 허용하기 위하여, 예를들어, FROM 필드 (411) 및 HOWFAR 필드 (413) 지원과 같은, 추가적인 하드웨어 지원의 연속레벨들을 추가한다. 이들 변형예들은, 포인터들의 유계 정지 시간 카핑 및 유계 정지 시간 갱신을 부분적으로 재배치한 대형 오브젝트로 지원한다. 지금부터, 도 12 내지 14의 실시예들에서 유추하여 이들 변형예들에 대하여 설명하겠으며, 이 설명에 기초하여 적당한 수정이 가해질 수 있음은 본 기술분야의 전문가들에게는 명백할 것이다.
폐영역 회수기 프로세스 (620)는, 오브젝트 데이터의 카피전에, 예를들어, 대형 오브젝트의 FromSpace (420) 인스턴스로부터 ToSpace (430) 인스턴스로, 포인트들을 대규모 오브젝트로 갱신한다. 이러한 방식으로, 포인터 갱신 및 카핑 단계의 순서가 역전된다. 판독 및 기록 배리어들은, 카피-프롬 인스턴스 (450) 대신에 카피-투 인스턴스 (450A)에서 명령된 판독 및 기록 엑세스들을 포워드한다. 한 실시예에서는, 하드웨어 읽기 및 기록 배리어들이, 카피-투 인스턴스 (450A)로의 엑세스들을 트랩하여, 부분적으로 재배치된 오브젝트 트랩 핸들러 소프트웨어가 카피-프롬 인스턴스의 실제 포워딩을 수행하도록 자극한다. 이 부분적으로 재배치된 오브젝트 트랩 핸들러는, HOWFAR 필드 (413)내에 저장되었을지도 모르는 HOWFAR 정보의 스토리지를 선택적으로 유지한다. 뮤테이터 프로세스 (610)가 대규모 오브젝트의 ToSpace (420) 인스턴스로 저장할 때, 대형 오브젝트의 저장된 to 필드가 이미 카피되었으면, 저장된 데이터는 카피-투 인스턴스 (450A)로 명령되고, 그렇지 않으면, 카피-프롬 인스턴스 (450)로 명령된다. 마찬가지로, 뮤테이터 프로세스 (610)가 대형 오브젝트의 ToSpace (420) 인스턴스로부터 적재할 때, 대형 오브젝트의 저장된 TO 필드가 이미 카피되었으면, 이 로딩은 카피-투 인스턴스로부터 수행되고, 그렇지 않으면, 카피-프롬 인스턴스 (450)로부터 수행된다. FromSpace (420) 및 ToSpace (430)의 오버랩에 대한 지원은, 도 12 내지 14의 실시예에 대한 상기 상세한 설명에 설명되어 있다. 만약, 오버래핑 영역을 위해 아무런 지원이 필요로 되지 않는다면, 판독 배리어가 카피-프롬 인스턴스로 로드를 조종할 수 있게 되며, 기록 배리어가 카피-프롬 및 카피-투 인스턴스로의 저장을 동보통신할 수 있게 된다.
이상 설명한 바와 같이, 소프트웨어 트랩 오버헤드는, 더 많은 레지스터들과 더 복잡한 동작을 하드웨어내에 집어 넣음으로써, 배제될 수 있다. 예를들어, 한 실시예에서는, TO 필드 (412) 및 FROM 필드 (411) 을 포함하고 있다. 저장 타겟과 TO 필드 (412)간의 일치에 응하는 하드웨어 기록 배리어는, 저장들을 카피-투 인스턴스 (450A) 및 카피-프롬 인스턴스 (450) 로의 저장을 동보통신한다. 적재 소오스와 TO 필드 (412) 간의 일치에 응답하는 하드웨어 판독 배리어는, 카피-프롬 인스턴스 (450)로의 적재를 재디렉트한다. 다른 실시예에서는, FROM 필드 (411) 및 TO 필드 (412) 뿐만 아니라, HOWFAR 필드 (413)를 포함하고 있다. 하드웨어 기록 배리어 및 하드웨어 판독 배리어는 카피-투 인스턴스 (450A)의 카피된 부분 및 카피-프롬 인스턴스 (450)의 카피되지 않은 부분에 저장 및 적재를 명령한다. 본 기술분야의 전문가들은 이상의 설명에 기초하여 이들 각 실시예들에 적합한 논리를 알 수 있을 것이다.
오브젝트 참조 포맷
도 16은 하드웨어 프로세서 (100)로 지칭된 오브젝트 참조 (objectref)의 한 실시예를 나타낸다. 1997년 4월 23일, 발명자 제임스 마이클 오'콘너(James Michael O'Connor), 마크 트렘브레이(Marc Tremblay), 및 샌제이 바이쉰(Sanjar Vishin) 에 의한, 미국 특허출원 제 08/841,543 호의 세대별 분리 시스템 및 폐영역 회수 방법 (GENERATION ISOLATION SYSTEM AND METHOD FOR GARBAGE COLLECTION)에서 설명된 바와 같이, 이 objectref의 3 비트는 폐영역 회수 힌트로 사용되어질 수 있다. 추가 핸들 비트 (H)는, 오브젝트가 핸들을 통하여 직접적으로 objectref 에 의하여 참조되었는지 아니면 간접적으로 참조되었는지를 나타낸다. 핸들(HANDLE)들은 인디렉션의 추가레벨의 대가를 치루더라도, 그로 향한 포인터들 (또는 objectref들) 의 대규모 갱신을 하지 않고, 메모리 오브젝트들의 재배치를 가능하게 하는 참조 방법을 제공한다. 이들 양필드는, 하드웨어 프로세서 (100)의 정수부 (142) (도 1)에 제공되어지기 이전에, 마스크 아웃된다.
하드웨어 프로세서 (100) 및 회수된 스페이스 (630)의 일 실시예에 따르면, 오브젝트 (1700)가 헤더부 (1710) 및 인스턴스 변수 저장부 (1720)를 포함하는 메모리로 나타내어 진다. 도 17a는 이러한 실시예의 하나를 나타낸다. 헤더부 (1710)는, 오브젝트의 클레스를 나타내는 방법 벡터 테이블 베이스부 (1712)를 그 자신이 포함하고 있는 32 비트 워드, 및 오브젝트와 폐영역 회수기의 정보의 동기 상태를 위해 준비된 5 비트의 추가 스토리지 (1714)를 포함한다. 선택적으로, 예를들어, 모니터 포인터 (1716)와 같은, 제 2 헤더-워드는 오브젝트에 할당된 모니터의 어드레스를 내장하여, 제 1 헤더 워드내의 추가 스토리지 (1714)의 모든 5 비트를 폐영역 회수기 정보로서 이용하도록 할 수도 있다. 도 17a의 실시예에서, 오브젝트 참조 (objectref)는 방법 호출의 오버헤더를 최소화하기 위하여, 방법 벡터 테이블 베이스부 (1712)의 위치를 지시한다.
헤더부 (1710)의 3 비트는 회수기 프로세스 (620) 와 같은 폐영역 회수기에 이용된다. 헤더부 (1710)에서, 헤더가 포인터로 취급될 때에는 3개의 하위-비트 (헤더[2;0]) 및 2개의 상위-비트 (헤더[31:30])가 마스크 오프된다. 이들 3개의 비트 (헤더[31:30,2])는 폐영역 회수기가 오브젝트 (1700)에 대한 정보를 저장하는데 이용된다. 비트 1 및 0는 오브젝트 동기를 위한 록 (LOCK) 및 원트 (WANT) 비트를 홀드하는데 사용될 수 있다. 만약, 예를들어, 모니터 포인터 (1716)와 같은, 제 2 헤더 워드는, 모든 5개의 비트를 폐영역 회수기 지원을 위하여 남겨두고서, 오브젝트 (1700)의 싱크로 상태를 유지하기 위하여 제공되어질 수 있다. 폐영역 회수 지원을 위한 비트들이 사용되는 방법은, 폐영역 회수 방법 내장 회수 프로세스 (620)의 특정 타입에 의존되며, 폐영역 회수 트랩 핸들러가 있는 경우에도 그 특정 타입에 의존한다. 가능한 사용은, 마크 비트 및, 한 세대 내의 오브젝트의 나이를 먹는 카운터 비트 등을 포함한다. 이상 설명한 바와 같이, 헤더부 (1710)의 선택적인 제 2 헤더-워드 실시예에서, 5개의 비트가 회수기 프로세스 (620)와 같은 폐영역 회수기에 이용된다.
도 17a의 실시예에서, 인스턴스 변수 스토리지부 (1720)는 방법 벡터 테이블 베이스부 (1712)의 한 워드 다음부터 시작하며, 오브젝트 (1700)의 인스턴스 변수들을 내장하고 있다. objectref 의 최하위 비트는 참조가 (==1)로 다루어졌는지 아니면, (==0)으로 다루어졌는지를 명명한다. 도 17b 에서 또다른 handled 오브젝트 포맷에 대하여 나타낸다. 오브젝트 (1700b)가 생성될 때 핸들드 참조가 확립되어, 모든 후속 참조들은 이 핸들, 즉 오브젝트를 엑세스하는 스토리지 포인터 (1750b)를 따른다. 이러한 지원은, 인스턴스 변수들을 위한 것을 포함하여, 언더라인 오브젝트 저장장치보다는 차라리 핸들들(handles)을 카핑함으로써, 오브젝트 재배치시, 포인터 갱신의 비용을 감소시키는, 몇가지 타입의 폐영역 회수기들에 제공된다.
핸들드 오브젝트 참조들은, 도 7 내지 9를 참조하여 이상 설명한 바와 같은 폐영역 회수 시스템들이, 포인터 갱신의 카피된 오브젝트로의 유계 정지 시간 기능을 발휘하도록 한다. 예를들어, 도 10 내지 14를 참조하여 이상 설명한 실시예에 제공된 배리어 구성에 의하여, 다수의 참조 포인터들의 유계 정지 시간 포인터 갱신이 지원되는 다른 폐영역 회수 시스템들에서는, 직접적인오브젝트 참조가 바람직하다.
본 발명은 다양한 실시예를 참조하여 설명하였지만, 이들 실시예들은 예시의 목적이며, 본 발명의 범위가 이에 제한되는 것이 아님을 이해하여야 한다. 제 1 명령, 제 2 명령, 제 3 명령 등과 같은 청구항의 용어들은, 식별을 위한 것일 뿐이며, 특정한 순서를 요하는 것으로 이해되어서는 안된다. 설명된 본 실시예의 여러 변형, 수정, 추가, 개량이 가능하다. 예를들어, 여기서는 본 발명을 JAVA 프로그래밍 언어 및 JAVA 가상머신에 관한 예시적인 실시예를 참조하여 설명하였지만, 이에 제한되는 것이 아니라, 광범위의 프로세서 환경 (가상 및 실제 모두의 경우)에서의 시스템, 제품, 방법, 및 장치를 포괄한다. 또한, 어떤 실시예에서는 하드웨어에 대하여 설명되었지만, 이상의 설명에 따라서 응답하는, 부분적으로 재배치된 오브젝트 식별자 저장부 및 배리어 (또는 배리어들)를 구현한, 적합한 가상머신 구현 (JAVA에 관련된 것이든 아니든 관계없이)은, 바이트코드 번역기 또는 져스트-인-타임 (just-in-time, JIT) 컴파일러와 같은, 소포트웨어 가상머신 명령 프로세서 구현을 포함한다. 이들 및 다른 변형, 수정, 및 개량은, 아래의 청구항에 의하여 정의된 발명의 범위에 포함될 것이다.
본 발명은 유계 정지 시간 폐영역 회수를 용이하게 하는 방법 및 장치를 제공한다.

Claims (49)

  1. 메모리 저장장치로서, 그안에 형성된 오브젝트가 각각의 FromSpace 인스턴스로부터 각각의 ToSpace 인스턴스로 재배치되는 메모리 저장장치와;
    상기 배치가 불완전한 경우에도, 그에 대해, 상기 오브젝트 중의 특정 오브젝트의 FromSpace 인스턴스를 식별하기 위하여 갱신할 수 있는 일부 재배치된 오브젝트 식별자 저장부 및,
    상기 특정 오브젝트의 상기 FromSpace 인스턴스를 타겟으로하는 저장지향 메모리 액세스에 대한 기록 배리어를 구비하되,
    상기 기록 배리어는 상기 ToSpae 인스턴스 및 상기 FromSpace 인스턴스의 최소한 카피부분 사이에서 일관성을 유지하는 것을 특징으로 하는 장치.
  2. 제 1 항에 있어서, 상기 기록 배리어는 상기 일부 재배치된 오브젝트 식별자 저장부의 내용과 상기 저장지향 메모리 액세스를 위한 오브젝트 식별자 사이의 일치에 응답하는 것을 특징으로 하는 장치.
  3. 제 1 항에 있어서, 상기 기록 배리어의 동작은 상기 FromSpace 인스턴스로부터 상기 ToSpace 인스턴스로 상기 특정 오브젝트를 증분 카피하도록 하는 것을 특징으로 하는 장치.
  4. 제 1 항에 있어서,
    상기 기록 배리어는 상기 일부 재배치된 오브젝트 식별자 저장부와 상기 저장 지향 메모리 액세스를 위한 오브젝트 식별자 사이의 일치에 응답하는 기록 배리어 논리를 구비하며,
    상기 기록 배리어 논리는 상기 일치시에 일부 재배치된 오브젝트 트랩 핸들러로 트랩되는 것을 특징으로 하는 장치.
  5. 제 4 항에 있어서,
    상기 일부 재배치된 오브젝트 트랩 핸들러에 액세스할 수 있는 ToSpace 인스턴스 식별자를 더 구비하되, 상기 일부 재배치된 오브젝트 트랩 핸들러는 상기 ToSpace 와 상기 FromSpace 인스턴스에 대한 트랩핑 저장 지향 액세스를 동보통신하는 것을 특징으로 하는 장치.
  6. 제 5 항에 있어서, 상기 일부 재배치된 오브젝트 식별자 저장부는, 상기 일부 재배치된 오브젝트 트랩 핸들러에 액세스할 수 있는 TO 필드로서 상기 ToSpace 인스턴스를 포함하는 것을 특징으로 하는 장치.
  7. 제 5 항에 있어서, 상기 ToSpace 인스턴스 식별자는, 상기 일부 재배치된 오브젝트 트랩 핸들러와 폐영역 회수기 프로세스에 액세스할 수 있는 상기 메모리 저장장치의 일부분을 포함하는 것을 특징으로 하는 장치.
  8. 제 4 항에 있어서,
    상기 일부 재배치된 오브젝트 트랩 핸들러에 액세스할 수 있는 부분 카피 위치 지시기를 또한 구비하되,
    카피된 부분에 대한 트랩핑 저장 지향 액세스를 위하여, 상기 일부 재배치된 오브젝트 트랩 핸들러는 상기 ToSpace 와 상기 FromSpace 인스턴스 양자로 동보통신하며,
    상기 특정 오브젝트의 카피되지 않은 부분에 대한 트래핑 저장 지향 액세스를 위하여, 상기 일부 재배치된 오브젝트 트랩 핸들러는 상기 저장장치 지향 액세스를 상기 FromSpace 인스턴스로 디렉트 하며 상기 ToSpace 인스턴스로는 디렉트하지 않는 것을 특징으로 하는 장치.
  9. 제 4 항에 있어서,
    상기 일부 재배치된 오브젝트 식별자 저장부는 FromSpace 인스턴스 식별자와 부분 카피 지시기를 포함하여서 상기 특정 오브젝트의 카피부분과 카피되지 않은 부분 사이의 경계를 식별하도록하며,
    상기 기록 배리어는, 상기 일부 재배치된 오브젝트 식별자 저장부에 응답하며, 선택적으로는 상기 특정 오브젝트의 상기 카피부에 대한 기록상에서 일부 재배치된 오브젝트 트랩 핸들러에 트랩핑하는 것을 특징으로 하는 장치.
  10. 제 1 항에 있어서,
    상기 일부 재배치된 오브젝트 식별자 저장부는, FromSpace 및 ToSpace 인스턴스 식별자를 포함하며,
    상기 기록 배리어는, 상기 FromSpace 및 상기 ToSpace 인스턴스 식별자와 결합된 기록 배리어 논리를 구비하며, 상기 기록 배리어 논리는, 저장 지향 메모리 액세스를 위한 오브젝트 식별자와 상기 FromSpace 인스턴스 식별자의 내용 사이의 일치에 응답하며,
    상기 일치에 응답하여, 상기 기록 배리어 논리는 상기 저장지향 액세스를 상기 ToSpace 및 상기 FromSpace 인스턴스로 동보통신하는 것을 특징으로 하는 장치.
  11. 제 1 항에 있어서,
    상기 기록 배리어는 기록 배리어 논리를 구비하며,
    상기 일부 재배치된 오브젝트 식별자 저장부는, 상기 기록 배리어에 각각 결합된 FromSpace 및 ToSpace 인스턴스 식별자와 부분 카피 위치 지시기를 구비하며,
    상기 특정 오브젝트의 카피부에 대한 저장 지향 액세스를 위하여, 상기 기록 배리어는 상기 ToSpace 및 상기 FromSpace 인스턴스 양자로 저장 데이터를 동보통신하며,
    상기 특정 오브젝트의 카피되지 않은 부분에 대한 저장지향 액세스를 위하여, 상기 기록 배리어가 상기 FromSpace 인스턴스로 상기 저장 데이터를 디렉트 하며, 상기 ToSpace 인스턴스로는 디렉트 하지 않는 것을 특징으로 하는 장치.
  12. 제 1 항에 있어서,
    상기 일부 재배치된 오브젝트 식별자 저장부를 포함하는 프로세서 상에서 실행할 수 있는 제 1 명령을 포함하는 폐영역 회수 프로세스로서, 상기 제 1 명령은 상기 FromSpace 인스턴스로부터 상기 ToSpace 인스턴스로 상기 특정 오브젝트의 부분을 증분 카피하기 위한 것인, 폐영역 회수 프로세스; 및,
    상기 특정 오브젝트에 대한 상기 저장 지향 메모리 액세스와 적재 지향 메모리 액섹스를 행하기 위하여 상기 프로세서 상에서 실행할 수 있는 제 2 명령을 포함하는 뮤테이터 프로세스를 더 포함하는 것을 특징으로 하는 장치.
  13. 제 1 항에 있어서, 상기 일부 재배치된 오브젝트 식별자 저장부는, 상기 특정 오브젝트의 카피되지 않은 부분 및 카피된 부분 사이의 경계를 지시하는 부분 카피부 지시기부를 포함하는 것을 특징으로 하는 장치.
  14. 제 1 항에 있어서, 상기 재배치는, 상기 메모리 저장장치의 페영역 회수부의 FromSpace부로부터 ToSpace부로 상기 특정 오브젝트의 증분 카피를 구비하는 것을 특징으로 하는 장치.
  15. 제 1 항에 있어서,
    상기 FromSpace 및 상기 ToSpace 가 오버랩되며,
    상기 재배치는, 상기 메모리 저장장치 내의 다수의 상기 오브젝트를 압축하도록 상기 특정 오브젝트를 증분 카피하는 것을 특징으로 하는 장치.
  16. 제 1 항에 있어서, 상기 일부 재배치된 오브젝트 식별자 저장부는 증분 카피에 대응하는 폐영역 회수 프로세스에 의해서 갱신되는 것을 특징으로 하는 장치.
  17. 제 1 항에 있어서,
    상기 일부 재배치된 오브젝트 식별자 저장부와 상기 기록 배리어를 포함하는 프로세서; 및,
    상기 프로세서에 의해서 판독될 수 있으며, 그에 의해 실행될 수 있는 매체 내에서 인코딩된 뮤테이터 프로세스 명령로서, 상기 저장지향 메모리 액세스에 대응하는 명령을 포함하는, 뮤테이터 프로세스 명령과,
    상기 프로세서에 의해서 판독될 수 있으며, 그것에 의해서 실행될 수 있는 매체 내에서 인코딩된 재배치기 프로세스 명령으로서, 상기 폐영역 회수기 프로세서 명령은, 상기 FromSpace 인스턴스로부터 상기 ToSpace 인스턴스로 상기 특정 오브젝트를 증분 카피하고, 상기 ToSpace 인스턴스를 참조하여 오브젝트 참조 핸들을 갱신하며, 그들 사이에서 대응하는 상기 일부 재배치된 오브젝트 식별자를 유지하기 위한 명령 시퀀스을 포함하며, 상기 명령 시퀀스는 상기 뮤테이터 프로세스 명령에 의해서 인터럽트될 수 있는 재배치 프로세스 명령
    을 더 포함하는 것을 특징으로 하는 장치.
  18. 제 17 항에 있어서, 상기 재배치기 프로세스 명령은, 세대별 폐영역 회수, 마크 스윕핑 압축(mark-sweep-compact) 폐영역 회수, 카핑 폐영역 회수 및 유계 정지 시간을 갖는 히프 압축중 하나를 실행하기 위하여 선택되는 것을 특징으로 하는 장치.
  19. 제 17 항에 있어서, 상기 프로세서는, 상기 일부 재배치된 오브젝트 식별자 저장부 및 상기 기록 배리어를 적재하는 레지스터 저장장치 및 논리를 포함하는 하드웨어 프로세서를 구비하는 것을 특징으로 하는 장치.
  20. 제 1 항에 있어서,
    상기 일부 재배치된 오브젝트 식별자 저장부 및 상기 기록 배리어를 적재하는 프로세서; 및,
    상기 프로세서에 의해서 판독될 수 있으며, 그것에 의해서 실행될 수 있는 매체 내에서 인코딩된 뮤테이터 프로세스 명령으로서, 상기 저장지향 메모리 액세스에 대응하는 명령을 포함하는, 뮤테이터 프로세스 명령과,
    상기 프로세서에 의해서 판독될 수 있으며, 그것에 의해서 실행될 수 있는 매체 내에서 인코딩된 재배치기 프로세스 명령으로서, 상기 폐영역 회수기 프로세스 명령은, 상기 FromSpace 인스턴스로부터 상기 ToSpace 인스턴스로 상기 특정 오브젝트를 증분 카피하고, 상기 ToSpace 인스턴스를 참조하여 상기 FromSpace 인스턴스를 참조하는 포인터를 갱신하며, 그들 사이에 대응하는 상기 일부 재배치된 오브젝트 식별자 저장부를 유지하기 위한 명령 시퀀스를 포함하며, 상기 명령 시퀀스가 상기 뮤테이터 프로세스 명령에 의해서 인터럽트되는 것을 특징으로 하는 장치.
  21. 제 1 항에 있어서, 상기 특정 오브젝트는 대형 오브젝트를 포함하는 것을 특징으로 하는 장치.
  22. 제 1 항에 있어서, 상기 특정 오브젝트는 보급형 오브젝트를 포함하는 것을 특징으로 하는 장치.
  23. 제 1 항에 있어서, 상기 특정 오브젝트가 대형 보급형 오브젝트를 포함하는 것을 특징으로 하는 장치.
  24. 제 1 항에 있어서,
    상기 일부 재배치된 오브젝트 식별자 저장부와 상기 기록 배리어를 적재하는 하드웨어 프로세서와;
    상기 하드웨어 프로세서 상에서의 실행을 위한 뮤테이터 프로세스 명령을 받기 위하여 상기 하드웨어 프로세서와 결합된 통신 장치로서, 상기 뮤테이터 프로세스 명령이 상기 저장지향 메모리 액세스에 대응하는 제 1 명령을 포함하는 것을 특징으로 하는, 통신 장치; 및
    실행가능한 폐영역 회수기 프로세스 명령을 인코딩하기 위한 상기 하드웨어 프로세서와, 상기 특정 오브젝트를 증분 카핑하기 위한 상기 하드웨어 프로세서에 의해서 판독가능한 매체
    를 더 구비하는 것을 특징으로 하는 장치.
  25. 제 1 항에 있어서, 상기 일부 재배치된 오브젝트 식별자 저장부와 상기 메모리 저장장치에 결합된 제 1 및 제 2 프로세서를 더 구비하되, 상기 제 1 프로세서는 상기 기록 배리어를 포함하며,
    상기 재배치는, 상기 제 2 프로세서 상에서 실행가능한 폐영역 회수기 프로세스에 의한 상기 특정 오브젝트의 증분 카핑을 구비하며,
    상기 저장지향 메모리 액세스는 상기 제 1 프로세서 상에서 실행가능한 뮤테이터 프로세스에 의한 기록 액세스를 구비하며,
    상기 일부 재배치된 오브젝트 식별자 저장부는, 상기 특정 오브젝트의 상기 증분 카핑에 대응하는 상기 폐영역 회수기 프로세스에 의해서 유지되는 것을 특징으로 하는 장치.
  26. 제 25 항에 있어서, 상기 제 2 프로세서는, 특정 목적의 폐영역 회수 프로세서를 구비하는 것을 특징으로 하는 장치.
  27. 제 25 항에 있어서, 상기 제 2 프로세서는, 상기 메모리 저장장치와 일체화 되어 있으며, 상기 제 2 프로세서 및 상기 메모리 저장장치는 모두 폐영역 회수 메모리 모듈을 구비하는 것을 특징으로 하는 장치.
  28. 제 1 항에 있어서, 상기 프로세서는, 가상 머신 명령 프로세서를 구비하는 것을 특징으로 하는 장치.
  29. 제 1 항에 있어서,
    상기 일부 재배치된 오브젝트 식별자 저장부는, 재배치가 불완전한 상기 제 2 오브젝트를 식별하기 위하여 또한 갱신될 수 있으며,
    상기 장치는, 상기 일부 재배치된 오브젝트 식별자 저장부 및 상기 메모리 저장장치에 결합되어 있는 제 1 및 제 2 폐영역 회수기 프로세서를 더 구비하며, 상기 특정 그리고 상기 제 2 오브젝트의 재배치는, 상기 제 1 및 상기 제 2 폐영역 회수 프로세서에 의해서 각각 증분 카피 되는 것을 구비하는 것을 특징으로 하는 장치.
  30. FromSpace 인스턴스로부터 ToSpace 인스턴스로 특정 오브젝트의 증분 카핑을 사용하여 상기 특정 메모리 오브젝트의 유계 정지 시간 재배치를 제공하는 컴퓨터 시스템에서 특정 메모리 오브젝트의 재배치 중에 메모리 오브젝트 인스턴스 일관성을 관리하기 위한 폐영역 회수 시스템에 있어서,
    상기 FromSpace 인스턴스와 상기 ToSpace 인스턴스를 위한 식별자 필드를 포함하는 부분 재배치 오브젝트 식별자 저장부; 및
    상기 특정 오브젝트에 대한 저장지향 뮤테이터 프로세스 액세스를 위한 타겟 오브젝트 식별자와, 상기 FromSpace 인스턴스 식별자 필드의 내용 사이의 일치에 응답하는 기록 배리어 논리로서, 상기 증분 카핑시에, 상기 FromSpace 및 상기 ToSpace 인스턴스 사이의 일관성을 유지하는 기록 배리어 논리를 구비하는 것을 특징으로 하는 폐영역 회수 시스템.
  31. 제 30 항에 있어서,
    상기 일관성 유지는, 상기 Fromspace 및 상기 ToSpace 인스턴스 양자로 상기 특정 오브젝트의 상기 FromSpace 인스턴스를 타겟으로하는 제 1 저장지향 뮤테이터 프로세스 액세스를 동보통신하는 것을 포함하는 것을 특징으로 하는 폐영역 회수 시스템.
  32. 제 30 항에 있어서,
    상기 일부 재배치된 오브젝트 식별자 저장부는, 상기 특정 오브젝트의 카피되지 않은 부분을 식별하기 위한 부분 카피 위치 지시기를 더 포함하며,
    상기 기록 배리어 논리는, 상기 FromSpace 인스턴스로의 액세스를 지시하는 대신, 상기 카피되지 않은 부분에 대한 제 2 저장지향 뮤테이터 프로세스 액세스를 위한 동보통신을 선택적으로 보류하는 것을 특징으로 하는 폐영역 회수 시스템.
  33. 폐영역 회수 중단 시간을 한정하는 방법에 있어서,
    소오스 인스턴스로부터 타겟 인스턴스로 메모리 오브젝트를 재배치하는 동안, 뮤테이터 프로세스에 대한 유계 정지 시간 완료에 따라서 상기 재배치를 인터럽트하는 단계; 및
    상기 재배치의 상기 중단시에, 일부 재배치된 오브젝트 식별자 저장부의 내용과 오브젝트 식별자 사이의 일치를 검출함으로서, 상기 메모리 오브젝트에 대하여 상기 뮤테이터 프로세스에 의한 기록 액세스를 선택적으로 트래핑하는 단계; 및
    상기 트래핑에 응답하여, 상기 메모리 오브젝트의 부분 재배치 상태에 따라서 상기 기록 액세스를 핸들링하는 단계를 구비하는 것을 특징으로 하는 방법.
  34. 제 33 항에 있어서,
    상기 메모리 오브젝트의 카피된 부분과 상기 기록 액세스 사이의 일치가 존재하는 경우, 상기 핸들링은 상기 소오스 인스턴스 및 상기 타겟 인스턴스의 양자로 상기 기록 액세스를 동보통신하는 단계를 포함하며,
    그렇지않은 경우, 상기 동보통신하지 않으면서 상기 기록 액세스를 완료하는 단계를 포함하는 것을 특징으로 하는 방법.
  35. 제 33 항에 있어서,
    상기 선택적인 트래핑은, 상기 메모리 오브젝트의 카피 부분과 상기 기록 액세스 사이의 일치를 또한 검출하여서, 상기 메모리 오브젝트의 카피되지 않은 부분에 대한 특정 기록 액세스를 트래핑하지 않는 것을 특징으로 하는 방법.
  36. 액세스를 갖는 뮤테이터 프로세스 상의 유계 정지 시간 임펙트를 갖는 메모리 오브젝트를 재배치하기 위한 방법에 있어서,
    상기 메모리 오브젝트의 From 인스턴스를 타겟으로하는 상기 뮤테이터 프로세스의 저장지향 액세스에 응답하기 위하여 기록 배리어를 구성하는 단계; 및
    상기 From 인스턴스롤부터 상기 To 인스턴스로 상기 메모리 오브젝트를 증분 카피하는 단계; 및
    상기 증분 카핑동안, 상기 제 1 의 저장지향 액세스에 응답하여, 상기 제 1 저장지향 액세스를 상기 From 및 상기 To 인스턴스 양자로 동보통신하는 단계를 구비하는 것을 특징으로 하는 방법.
  37. 제 36 항에 있어서,
    상기 기록 배리어를 구성하는 단계는, 상기 From 인스턴스를 식별하기 위하여 일부 재배치된 오브젝트 식별자 저장부를 갱신하는 단계를 구비하며,
    상기 동보통신하는 단계는, 상기 일부 재배치된 오브젝트 식별자 저장부의 내용 및 상기 제 1 저장지향 액세스를 위한 오브젝트 식별자 사이의 일치에 응답하는 것을 특징으로 하는 방법.
  38. 제 37 항에 있어서, 상기 기록 배리어를 구성하는 단계는, 상기 To 인스턴스를 식별하기 위한 일부 재배치된 오브젝트 식별자 저장부를 갱신하는 단계를 포함하는 것을 특징으로 하는 방법.
  39. 제 36 항에 있어서,
    상기 메모리 오브젝트의 카피된 부분과 카피되지 않은 부분 사이를 판별하기 위한 부분 카피 위치 지시기를 유지하는 단계; 및
    상기 증분 카피 단계 동안, 상기 카피되지 않은 부분을 타겟으로하는 상기 제 2 저장지향 액세스에 응하여, 상기 From 인스턴스로 상기 제 2 저장지향 액세스를 디렉트하며, 상기 To 액세스로는 디렉트하지 않는 단계를 더 포함하는 것을 특징으로 하는 방법.
  40. 제 36 항에 있어서, 상기 동보통신하는 단계는, 상기 기록 배리어에 의해서 실행되는 것을 특징으로 하는 방법.
  41. 제 36 항에 있어서, 상기 동보통신하는 단계는, 상기 기록 배리어에 의한 트랩에 응답하여 트랩 핸들러 소프트웨어에 의해서 실행되는 것을 특징으로 하는 방법.
  42. 가상 머신 명령 프로세서 내에 재배치 폐영역 회수기의 유계 정지 시간 구현을 위한 지원부(support)에 있어서,
    일부 재배치된 메모리 오브젝트 식별자 저장부; 및
    상기 일부 재배치된 메모리 오브젝트 식별자 저장부 내에서 식별된 메모리 오브젝트에 대한 저장 명령의 평가(evaluation)가 트랩하도록 상기 일부 재배치된 메모리 오브젝트 식별자 저장부에 응답하는 기록 배리어
    를 구비하는 것을 특징으로 하는 지원부.
  43. 가상 머신 명령 프로세서 내의 재배치 폐영역 회수기의 유계 정지 시간 구현을 위한 지원부에 있어서,
    기록 배리어에 응답하는 트랩 핸들러를 포함하는 것을 특징으로 하는 지원부.
  44. 프로세서;
    메모리로서, 그안에 형성된 오브젝트가 상기 프로세서에 의해서 참조될 수 있는, 메모리;
    상기 메모리 내에서 부분 회수된 오브젝트를 식별하기 위하여 상기 프로세서에 의해서 액세스가능 수단으로서, 상기 일부 회수된 오브젝트 식별기 수단과 상기 프로세서에 의해 오브젝트 참조 동작을 위한 오브젝트 식별자 사이의 일치가 장해 핸들러 수단을 트리거하는, 상기 프로세서에 의해서 액세스가능 수단; 및
    상기 메모리를 폐영역 회수하기 위한 수단으로서, 상기 폐영역 회수 수단은, 상기 일부 회수된 오브젝트 식별자 수단을 유지하여서, 폐영역 회수가 완료되지 않은 경우라도, 상기 오브젝트 중의 특정 오브젝트를 식별하며, 그리하여 상기 프로세서 상에서 실행가능한 뮤테이터 수단에 대한 유계 정지 시간 완료에 따라서 상기 폐영역 회수 수단의 인터럽트를 허용하는, 상기 메모리의 폐영역 회수를 위한 수단을 구비하는 것을 특징으로 하는 컴퓨터 머신.
  45. 프로세서 상에서 실행가능한, 상기 프로세서에 의해서 판독가능한 매체 내에서 인코딩된 인터럽트 가능 오브젝트 재배치기로서, 상기 인터럽트 가능한 오브젝트 재배치기는, 적어도 인터럽션 중에, 상기 프로세서의 일부 재배치된 오브젝트 식별자 저장부로 하여금, 일부 재배치된 메모리 오브젝트의 From 인스턴스를 식별하게 하는, 인터럽트가능 오브젝트 재배치기; 및
    상기 프로세서 상에서 실행가능한 뮤테이터에 의한 오브젝트 참조 동작을 위한 오브젝트 식별자와 상기 일부 재배치된 오브젝트 식별기 저장부의 내용 사이의 일치에 응답하여 발생된, 일부 재배치된 오브젝트 액세스 핸들러로서, 상기 일부 재배치된 오브젝트 액세스 핸들러는, 상기 일부 재배치된 메모리 오브젝트의 부분 재배치 상태에 따라서 상기 오브젝트 참조 동작을 핸들링하는, 일부 재배치된 오브젝트 액세스 핸들러를 구비하는 컴퓨터 프로그램 제품.
  46. 제 45 항에 있어서, 상기 인터럽트가능 오브젝트 재배치기는, 카핑 회수기에 따르는 메모리의 FromSpace 부분으로부터 ToSpace 부분으로 오브젝트 카핑을 제공하는 것을 특징으로 하는 컴퓨터 프로그램 제품.
  47. 제 45 항에 있어서, 상기 인터럽트가능 오브젝트 재배치기는, 압축 동작에 따라서 메모리의 회수부 내에서 소오스 인스턴스로부터 상기 잠재적 오버랩 타겟 인스턴스로 오브젝트 카핑을 제공하는 것을 특징으로 하는 컴퓨터 프로그램 제품.
  48. 제 45 항에 있어서, 상기 인터럽트가능 오브젝트 재배치기는 마크 압축 회수기 구현에 따라, 메모리의 회수된 부분 내에서 오브젝트 재배치를 제공하는 것을 특징으로 하는 컴퓨터 프로그램 제품.
  49. 제 45 항에 있어서, 상기 인터럽트가능 회수기는, 세대별 회수기 구현에 따라서, 메모리의 신영역(young portion) 으로부터 구영역 (older portion) 으로 오브젝트 카핑을 제공하는 것을 특징으로 하는 컴퓨터 프로그램 제품.
KR1019980024474A 1997-06-26 1998-06-26 일부 재배치된 오브젝트의 소오스 인스턴스와 결합된 기록 배리어를 포함하는 유계 정지 시간 폐영역 회수 시스템 및 방법 KR19990007400A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/883,291 US5873105A (en) 1997-06-26 1997-06-26 Bounded-pause time garbage collection system and method including write barrier associated with a source instance of a partially relocated object
US8/883,291 1997-06-26

Publications (1)

Publication Number Publication Date
KR19990007400A true KR19990007400A (ko) 1999-01-25

Family

ID=25382334

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019980024474A KR19990007400A (ko) 1997-06-26 1998-06-26 일부 재배치된 오브젝트의 소오스 인스턴스와 결합된 기록 배리어를 포함하는 유계 정지 시간 폐영역 회수 시스템 및 방법

Country Status (6)

Country Link
US (1) US5873105A (ko)
EP (1) EP0990207B1 (ko)
JP (1) JP3957770B2 (ko)
KR (1) KR19990007400A (ko)
DE (1) DE69825751T2 (ko)
WO (1) WO1999000730A1 (ko)

Families Citing this family (90)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6055612A (en) * 1997-07-11 2000-04-25 Geodesic Systems, Inc. Incremental garbage collector with decommit barrier
US6317872B1 (en) * 1997-07-11 2001-11-13 Rockwell Collins, Inc. Real time processor optimized for executing JAVA programs
US6070173A (en) * 1997-11-26 2000-05-30 International Business Machines Corporation Method and apparatus for assisting garbage collection process within a java virtual machine
JPH11259437A (ja) * 1998-03-12 1999-09-24 Hitachi Ltd 不要バリア命令の削減方式
US6065020A (en) * 1998-05-27 2000-05-16 Microsoft Corporation Dynamic adjustment of garbage collection
US6327701B2 (en) * 1998-09-15 2001-12-04 Sun Microsystems, Inc. Method and apparatus for finding bugs related to garbage collection in a virtual machine
US6317756B1 (en) * 1998-10-07 2001-11-13 International Business Machines Corporation On-the-fly garbage collector
US6279012B1 (en) * 1998-10-13 2001-08-21 Oracle Corporation Reducing the memory footprint of a session duration semispace
GB9825102D0 (en) * 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
GB2345355A (en) * 1998-12-30 2000-07-05 Ibm Garbage collection in a Java virtual machine
US6725241B1 (en) * 1999-03-31 2004-04-20 International Business Machines Corporation Method and apparatus for freeing memory in a data processing system
US6449625B1 (en) * 1999-04-20 2002-09-10 Lucent Technologies Inc. Use of a two-way stack approach to optimize flash memory management for embedded database systems
US6418454B1 (en) 1999-05-28 2002-07-09 Oracle Corporation Method and mechanism for duration-based management of temporary LOBs
US6286088B1 (en) 1999-06-28 2001-09-04 Hewlett-Packard Company Memory management system and method for relocating memory
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
SE514318C2 (sv) * 1999-10-28 2001-02-12 Appeal Virtual Machines Ab Förfarande för att effektivisera en databehandlingsprocess vid användning av en virtuell maskin och där ett skräpsamlingsförfarande används
US6800439B1 (en) 2000-01-06 2004-10-05 Affymetrix, Inc. Methods for improved array preparation
US6806361B1 (en) 2000-03-17 2004-10-19 Affymetrix, Inc. Methods of enhancing functional performance of nucleic acid arrays
US6833450B1 (en) 2000-03-17 2004-12-21 Affymetrix, Inc. Phosphite ester oxidation in nucleic acid array preparation
US7157564B1 (en) 2000-04-06 2007-01-02 Affymetrix, Inc. Tag nucleic acids and probe arrays
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
US7005259B1 (en) 2000-06-01 2006-02-28 Affymetrix, Inc. Methods for array preparation using substrate rotation
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
WO2002023345A1 (en) 2000-09-13 2002-03-21 Geodesic Systems, Incorporated Conservative garbage collectors that can be used with general memory allocators
US7216136B2 (en) * 2000-12-11 2007-05-08 International Business Machines Corporation Concurrent collection of cyclic garbage in reference counting systems
DE60100932T2 (de) * 2000-12-11 2004-08-12 Matsushita Electric Industrial Co., Ltd., Kadoma Ein Speicherverwaltungsgerät, -methode,-programm und rechnerlesbares Speichermedium zum Speichern des Speicherverwaltungsprogrammes
US6829616B2 (en) 2001-03-26 2004-12-07 International Business Machines Corporation Method, system, and program for implementing a database trigger
US6928460B2 (en) * 2002-07-01 2005-08-09 Sun Microsystems, Inc. Method and apparatus for performing generational garbage collection in a segmented heap
US7174354B2 (en) * 2002-07-31 2007-02-06 Bea Systems, Inc. System and method for garbage collection in a computer system, which uses reinforcement learning to adjust the allocation of memory space, calculate a reward, and use the reward to determine further actions to be taken on the memory space
EP1387273B1 (en) * 2002-07-31 2010-07-21 Texas Instruments Incorporated Conditional garbage collection based on monitoring to improve real time performance
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
US7035884B2 (en) * 2002-11-05 2006-04-25 Sun Microsystems, Inc. Placement of allocation trains in the train algorithm
US7188129B2 (en) 2002-11-15 2007-03-06 Sun Microsystems, Inc. Merging trains in a collector based on the train algorithm
US7209935B2 (en) * 2002-11-27 2007-04-24 Sun Microsystems, Inc. Avoiding remembered-set maintenance overhead for memory segments known to be in a collection set
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
US7069280B2 (en) 2002-12-06 2006-06-27 Sun Microsystems, Inc. Collection-tick mechanism for a collector based on the train algorithm
US7143124B2 (en) * 2002-12-06 2006-11-28 Sun Microsystems, Inc. Detection of dead regions during incremental collection
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
US20040128329A1 (en) * 2002-12-31 2004-07-01 International Business Machines Corporation Parallel incremental compaction
US7069281B2 (en) 2003-02-24 2006-06-27 Sun Microsystems, Inc. Efficient collocation of evacuated objects in a copying garbage collector using variably filled local allocation buffers
US7146390B2 (en) 2003-02-24 2006-12-05 Sun Microsystems, Inc. Staging the processing of remembered-set entries as part of collection based on the train algorithm
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
US7096329B2 (en) * 2003-02-27 2006-08-22 Sun Microsystems, Inc. Better placement of objects promoted into a generation managed by the train algorithm
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
US7197521B2 (en) * 2003-11-21 2007-03-27 Intel Corporation Method and system performing concurrently mark-sweep garbage collection invoking garbage collection thread to track and mark live objects in heap block using bit vector
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
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
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
US7788300B2 (en) * 2004-09-15 2010-08-31 Sap Ag Garbage collection for shared data entities
US7647186B2 (en) 2004-12-07 2010-01-12 Illumina, Inc. Oligonucleotide ordering system
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
US8392900B1 (en) * 2005-03-17 2013-03-05 Hewlett-Packard Development Company, L.P. Methods and systems for barrier reduction in parallel processing systems
US7548940B2 (en) * 2005-06-10 2009-06-16 International Business Machines Corporation Generational real-time garbage collection
GB0512809D0 (en) * 2005-06-23 2005-08-03 Ibm Arrangement and method for garbage collection in a computer system
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
US7757222B2 (en) * 2005-09-30 2010-07-13 Intel Corporation Generating efficient parallel code using partitioning, coalescing, and degenerative loop and guard removal
US9785549B2 (en) * 2007-04-27 2017-10-10 Microsoft Technology Licensing, Llc Managing object lifetime for native/managed peers
US8266190B2 (en) * 2007-09-25 2012-09-11 International Business Machines Corporation Memory management for garbage collection of critical real time threads
WO2009040228A1 (en) * 2007-09-25 2009-04-02 International Business Machines Corporation Memory management
US9208081B1 (en) * 2007-11-30 2015-12-08 Oracle America, Inc. Concurrent object management
US20090220169A1 (en) * 2008-02-28 2009-09-03 Microsoft Corporation Image enhancement
US8245005B2 (en) * 2008-03-03 2012-08-14 Microsoft Corporation Probabilistic object relocation
US9110791B2 (en) * 2008-03-03 2015-08-18 Microsoft Technology Licensing, Llc Optimistic object relocation
US20090300030A1 (en) * 2008-05-30 2009-12-03 Microsoft Corporation Large capacity data processing models
US8527559B2 (en) * 2010-04-23 2013-09-03 Clausal Computing Oy Garbage collector with concurrent flipping without read barrier and without verifying copying
US20110264880A1 (en) * 2010-04-23 2011-10-27 Tatu Ylonen Oy Ltd Object copying with re-copying concurrently written objects
US8601036B2 (en) 2011-03-23 2013-12-03 International Business Machines Corporation Handling persistent/long-lived objects to reduce garbage collection pause times
US8825721B2 (en) * 2011-10-03 2014-09-02 Oracle International Corporation Time-based object aging for generational garbage collectors
JP6044181B2 (ja) * 2012-08-24 2016-12-14 富士通株式会社 ガーベジコレクションのための情報処理方法、プログラム及び装置
US9384037B2 (en) * 2013-03-14 2016-07-05 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
US9734053B2 (en) 2015-06-30 2017-08-15 International Business Machines Corporation Garbage collection handler to update object pointers
US10180902B2 (en) * 2015-06-30 2019-01-15 International Business Machines Corporation Pauseless location and object handle based garbage collection
US10176093B2 (en) * 2015-06-30 2019-01-08 International Business Machines Corporation Pauseless location and object handle based garbage collection
GB201704844D0 (en) 2017-03-27 2017-05-10 Microsoft Technology Licensing Llc Manual memory management using lazy patching
US10318415B2 (en) 2017-05-31 2019-06-11 International Business Machines Corporation Garbage collection facility grouping infrequently accessed data units in designated transient memory area
US10459656B1 (en) 2018-06-25 2019-10-29 International Business Machines Corporation Method and apparatus to represent activation frame for pause-less garbage collection
CN111208713B (zh) * 2020-03-17 2022-08-16 合肥芯碁微电子装备股份有限公司 处理曝光图形数据的方法、曝光控制单元和直写式曝光机
CN112463626B (zh) * 2020-12-10 2023-07-11 网易(杭州)网络有限公司 内存泄漏定位方法、装置、计算机设备及存储介质
US11789649B2 (en) 2021-04-22 2023-10-17 Nvidia Corporation Combined on-package and off-package memory system

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SE387763B (sv) * 1975-10-23 1976-09-13 Ellemtel Utvecklings Ab Anordning vid ett datorminne for att mojliggora en successiv forflyttning under drift av ett ledigt minnesfelt
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
JPS6393055A (ja) * 1986-10-07 1988-04-23 Fujitsu Ltd 実時間型ガ−ベジコレクシヨン支援装置
US4989134A (en) * 1987-03-20 1991-01-29 Hewlett-Packard Company Method and apparatus for enhancing data storage efficiency
US4807120A (en) * 1987-04-30 1989-02-21 Texas Instruments Incorporated Temporal garbage collector with indirection cells
US5136706A (en) * 1987-04-30 1992-08-04 Texas Instruments Incorporated Adaptive memory management system for collection of garbage in a digital computer
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
US5463778A (en) * 1989-11-16 1995-10-31 Texas Instruments Incorporated User controlled trap handler
US5321834A (en) * 1989-11-28 1994-06-14 Xerox Corporation Method and system for reclaiming unreferenced computer memory space
US5293614A (en) * 1991-04-08 1994-03-08 Texas Instruments Incorporated System and method for hard real-time garbage collection requiring a write barrier but no read barrier
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
US5873105A (en) 1999-02-16
DE69825751T2 (de) 2005-07-07
JP2002506549A (ja) 2002-02-26
EP0990207B1 (en) 2004-08-18
EP0990207A1 (en) 2000-04-05
JP3957770B2 (ja) 2007-08-15
WO1999000730A1 (en) 1999-01-07
DE69825751D1 (de) 2004-09-23

Similar Documents

Publication Publication Date Title
KR19990007400A (ko) 일부 재배치된 오브젝트의 소오스 인스턴스와 결합된 기록 배리어를 포함하는 유계 정지 시간 폐영역 회수 시스템 및 방법
US5857210A (en) Bounded-pause time garbage collection system and method including read and write barriers associated with an instance of a partially relocated object
US5873104A (en) Bounded-pause time garbage collection system and method including write barrier associated with source and target instances of a partially relocated object
EP0914633B1 (en) Generation isolation system and method for garbage collection
EP0914632B1 (en) Write barrier apparatus and method for trapping garbage collection page boundary crossing pointer stores
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
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
US7024437B2 (en) Better placement of objects reachable from special objects during collection based on the train algorithm
US7539713B2 (en) Allocation of likely popular objects in the train algorithm
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