KR20060023950A - 불필요 데이터 수집시스템 - Google Patents

불필요 데이터 수집시스템 Download PDF

Info

Publication number
KR20060023950A
KR20060023950A KR1020057013843A KR20057013843A KR20060023950A KR 20060023950 A KR20060023950 A KR 20060023950A KR 1020057013843 A KR1020057013843 A KR 1020057013843A KR 20057013843 A KR20057013843 A KR 20057013843A KR 20060023950 A KR20060023950 A KR 20060023950A
Authority
KR
South Korea
Prior art keywords
thread
pointer
memory
selection
memory area
Prior art date
Application number
KR1020057013843A
Other languages
English (en)
Other versions
KR101004483B1 (ko
Inventor
유코 이마니시
시게노리 도이
Original Assignee
마츠시타 덴끼 산교 가부시키가이샤
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마츠시타 덴끼 산교 가부시키가이샤 filed Critical 마츠시타 덴끼 산교 가부시키가이샤
Publication of KR20060023950A publication Critical patent/KR20060023950A/ko
Application granted granted Critical
Publication of KR101004483B1 publication Critical patent/KR101004483B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • G06F12/0269Incremental or concurrent garbage collection, e.g. in real-time systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • 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/99952Coherency, e.g. same view to multiple users
    • Y10S707/99953Recoverability
    • 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

AP의 모든 스레드 정지기간을 장기화하지 않고, 불필요 데이터 수집에 요하는 시간의 증가를 억제하는 것을 목적으로 하며, 복수 스레드로 구성되는 오브젝트 지향 프로그램의 실행과정에서, 복수 스레드를 차례대로 선택하는 선택수단과, 선택된 스레드에 대하여, 당해 스레드의 실행을 정지하고, 당해 스레드로부터 오브젝트 포인터의 참조를 통하여 액세스 가능한 오브젝트를 검출하여 당해 검출한 오브젝트를 비 해방대상으로 관리하며, 당해 스레드의 실행을 재개하는 순서로 이루어지는 검사처리를 실시하는 검사수단과, 상기 선택수단에 의한 상기 선택이 개시된 후에 있어서, 실행 중의 스레드에 의해 오브젝트 포인터가 처리대상이 된 것을 검지한 경우에는, 당해 오브젝트 포인터가 가리키는 오브젝트를 비 해방대상으로서 관리하는 검지수단과, 상기 복수 스레드 모두에 대하여 상기 검사처리가 완료한 후에 있어서, 비 해방대상으로서 관리되고 있는 오브젝트 이외의 오브젝트에 대응하는 메모리영역을 해방하는 해방수단을 구비한다.
불필요 데이터 수집, 오브젝트, 오브젝트 포인터, 메모리영역, 해방

Description

불필요 데이터 수집시스템{GARBAGE COLLECTION SYSTEM}
본 발명은 애플리케이션 프로그램(AP : Application Program)에 의해 사용된 메모리에 대한 불필요한 데이터의 수집(GC : Garbage Collection)에 관한 것이다.
종래의 오브젝트(object) 지향의 프로그래밍 언어에는, AP의 작성자에게 메모리영역의 확보나 해방을 의식하도록 하지 않으면서, AP가 사용된 후에 불필요하게 된 오브젝트(오브젝트 인스턴스(Object Instance)라고도 한다)에 대한 메모리영역의 해방을 실행환경 측에 맡기는 방법을 채용한 것이 있다. 예를 들어 Java언어이다. 또한, Java언어는 미국 선 마이크로시스템(Sun Microsystems) 사의 상표이다.
이와 같은 언어를 사용하여 기술된 AP는 불필요하게 된 오브젝트에 대응하는 메모리영역을 자동으로 해방하는 불필요 데이터 수집(GC)기구를 구비하는 실행환경상에서 동작된다.
GC기구는 AP의 실행시에 동적으로 확보된 오브젝트에 대응하는 메모리영역이 어디로부터도 참조 되어 있지 않은 상태로 되어 있는 것을 검출해서 그 메모리영역을 해방하여 재이용 가능상태로 한다.
멀티스레드(Multithreaded) 구성의 AP에서, 각 스레드(Thread)는, 각각 스택 영역(Stack Area)과 대응하며, 동작과정에 있어서, 스택영역 내에 데이터를 저장하거나, 저장한 데이터를 참조하거나, 오브젝트를 생성한다. 오브젝트를 생성한 경우에는 통상은 스택영역 내에 그 오브젝트의 포인터, 즉 그 오브젝트의 메모리 내에서의 소재 위치를 지시하는 데이터(이하 「오브젝트 포인터」라 한다)가 저장되고, 스레드로부터 오브젝트로의 액세스는 그 오브젝트 포인터를 참조함으로써 이루어진다. 또, 통상, 오브젝트의 영역 내에도 다른 오브젝트에 대한 오브젝트 포인터가 저장된다.
어느 시점에서 AP에 의해 참조 되어 있는 모든 오브젝트는, AP의 각 스레드에 대응하는 각 스택영역 내에 포함되는 오브젝트 포인터로부터, 직접 또는 1 이상의 오브젝트 내의 오브젝트 포인터를 매개로 하여 도달할 수 있다.
이에 대응하여 GC기구는, 기본적으로, 어느 시점에서 스택영역 내의 오브젝트 포인터로부터 도달할 수 없게 되어 있는 오브젝트에 대응하는 메모리영역을 불필요한 것으로 하여 해방의 대상으로 한다.
종래의 GC방식으로 알려져 있는 마크 앤드 스위프(Mark-And-Sweep)방식은, 특정 오브젝트 포인터로부터 도달하는 모든 오브젝트에 마크를 부여해 가는 처리를 행한 후에, 모든 오브젝트를 주사하여, 마크가 부가되어 있지 않은 오브젝트에 대응하는 메모리영역을 해방하는 방식이다.
이 마크 앤드 스위프방식의 CG를 멀티스레드 구성의 AP의 실행시에 행하는 경우에, GC의 신속성을 최우선 하여, 단순히 모든 스레드를 정지하고 나서 각 스레드에 대응하는 스택영역 내의 오브젝트 포인터로부터 도달된 모든 오브젝트에 마크 를 부여하는 처리를 행하고, 그 후에 모든 스레드의 정지를 해제하여, 마크가 부여되어 있지 않은 오브젝트의 해방을 행하는 것으로 하면 다음과 같은 문제가 발생한다.
즉, AP의 모든 스레드가 정지하고 있는 기간이 장기화할 가능성이 있고, 이 경우에, 사용자의 조작 등에 대하여 일체 반응을 하지 않는, 예를 들어 컴퓨터의 디스플레이의 표시내용이 변화하지 않는 상태가 되어 사용자를 당황하게 만드는 문제가 있다.
이 문제를 해결하는 방식으로, 일본국 특허 제3027845호 공보에는, 이 마크 앤드 스위프를 이용한 GC를, 멀티 스레드 구성의 AP를 전혀 정지하지 않고 실행하는 방식이 제안되어 있다.
이 방식은, 루트 노드(Root Node)의 오브젝트로부터 도달하는 모든 오브젝트 및 스레드별 각 스택영역 내의 오브젝트 포인터로부터 찾아내는 모든 오브젝트에 대하여 마크를 부여하는 제 1 처리를 행하고, 그 제 1 처리 중에 AP의 스레드(이하 「AP스레드」라 한다)의 동작에 의해 오브젝트 포인터가 오브젝트로 이동한 경우에 그 오브젝트를 나타내는 데이터를 마크 스택의 영역에 축적해 두고, 그 마크를 부여하는 처리가 완료한 단계에서, 마크 스택으로부터 도달할 수 있는 모든 오브젝트에 대하여 마크를 부여하는 제 2 처리를 행하며, 마지막으로, 마크되어 있지 않은 오브젝트에 대응하는 메모리영역을 해방하는 것이다.
그러나 상술한 AP를 전혀 정지시키지 않고 마크를 부여하는 방식에서는, AP 스레드의 동작에 의해서 스택영역 내의 데이터가 변화하므로, 제 1 처리 중, 스택 영역 내의 오브젝트 포인터로부터 도달하는 오브젝트에 대하여 마크를 부여하는 처리의 일부가 무의미해지게 될 가능성이 있다.
예를 들어, GC를 행하는 스레드가 AP의 하나의 스택영역 내의 오브젝트 포인터(여기서는 「오브젝트 포인터 A」라 한다)를 검출하여, 그 오브젝트 포인터 A로부터 도달할 수 있는 오브젝트에 대하여 마크를 부여하는 처리(여기서는 「처리 A」라 한다)를 실행하고 있는 동안에, 그 스택영역에 대응하는 AP스레드가, 오브젝트 포인터 A 혹은 그들 오브젝트 내의 하나 또는 복수의 오브젝트 포인터를 복사하여 스택영역에 새로 저장하는 동작을 한다면, GC를 행하는 스레드는 그 처리 A의 종료 후의 어느 시점에서 재차 처리 A와 일부 중복된 처리를 행하거나, 혹은 그 중복방지를 위한 체크 처리를 행하게 되므로 무의미한 처리가 된다. 이와 같은 무의미한 처리는 GC의 개시에서 완료까지 요하는 CPU 시간을 불필요하게 증가시키게 되어 CPU의 이용효율을 저하시킨다.
그래서, 본 발명은 상기 문제를 감안하여 이루어진 것으로, AP의 모든 스레드가 정지하고 있는 기간을 장기화시키지 않도록 함과 동시에, GC의 개시에서 완료까지에 요하는 CPU 시간의 무의미한 증가를 어느 정도 억제하도록 하는 GC방식을 이용한 불필요 데이터 수집시스템을 제공하는 것을 목적으로 한다.
상기 목적을 달성하기 위해, 본 발명의 GC시스템은, 복수의 스레드(thread)로 구성되는 오브젝트(object) 지향 프로그램의 실행과정에서 불필요하게 된 오브젝트에 대응하는 메모리영역을 해방하는 불필요 데이터 수집시스템으로서, 복수 스레드 각각을 차례로 선택하는 선택수단과, 선택된 스레드에 대하여, 당해 스레드의 실행을 정지하고, 당해 스레드로부터 오브젝트 포인터의 참조를 통하여 액세스 가능한 오브젝트를 검출하여 당해 검출한 오브젝트를 비 해방대상으로 관리하며, 당해 스레드의 실행을 재개하는 순서로 이루어지는 검사처리를 실시하는 검사수단과, 상기 선택수단에 의한 상기 선택이 개시된 후에 있어서, 실행 중의 스레드에 의해 오브젝트 포인터가 처리대상이 된 것을 검지한 경우에는, 당해 오브젝트 포인터가 가리키는 오브젝트를 비 해방대상으로서 관리하는 검지수단과, 상기 복수 스레드 모두에 대하여 상기 검사처리가 완료한 후에 있어서, 비 해방대상으로서 관리되고 있는 오브젝트 이외의 오브젝트에 대응하는 메모리영역을 해방하는 해방수단을 구비하는 것을 특징으로 한다.
여기서, 오브젝트 포인터가 스레드에 의해 처리대상이 된다고 하는 것은, CPU에 의한 스레드의 처리과정에서 오브젝트 포인터를 처리대상으로 하는 명령이 실행된다는 것을 의미한다.
또, 오브젝트를 비 해방대상으로서 관리한다는 것은, 예를 들어 그 오브젝트 포인터를 from 테이블에서 to 테이블로 옮기는 후술하는 방법 등에 의해, 마크 부여를 실현하는 것을 말한다.
이에 의해, AP스레드에서 스택 내 및 오브젝트 내의 오브젝트 포인터를 거쳐서 도달할 수 있는 오브젝트에 대한 비 해방대상으로서의 지정의 과정, 즉 마크 부여의 과정에 있어서는, 그 AP스레드를 정지시키고 있어서, 그 AP스레드가 동작함으로 인하여 스택영역 내의 데이터가 변화한다고 하는 사태가 일어나지 않으므로, 그 과정에서의 마크 부여가 무의미하게 되는 위험성은 없어지며, 이 점에 대해서는 CPU의 이용효율 저하를 방지할 수 있다.
또, 이에 의해, 모든 AP스레드를 정지하여 상술한 마크 부여를 행하고 있는 것은 아니므로, AP의 모든 스레드가 정지하고 있는 기간의 장기화를 방지할 수 있다. 또한, 모든 AP스레드를 정지시키지 않음에 따른 오브젝트에 대한 참조상태의 변화에 대해서는, 실행 중인 스레드에 의해 오브젝트 포인터가 처리대상이 된 것을 감시하여 대응하고 있으므로, 어느 한 스레드로부터 액세스 가능한 오브젝트에 대해서는 반드시 비 해방대상으로 관리되게 된다.
또, 상기 검지수단은 실행 중인 스레드에 대해서 아직 검사처리가 이루어져 있지 않은 경우에 한하여 상기 검지를 행하고, 상기 검지수단은, 상기 검지를 한 경우에, 당해 실행중인 스레드에 처리대상이 된 오브젝트 포인터 및 당해 오브젝트 포인터로부터 도달할 수 있는 오브젝트 포인터 내의 오브젝트 포인터를 당해 스레드에 대응하는 작업용 메모리영역에 보존하는 검출부와, 상기 검사수단에 의해 스레드의 실행이 정지되어 있는 동안에, 당해 스레드에 대응하는 작업용 메모리영역 내의 오브젝트 포인터로부터 도달할 수 있는 오브젝트를 비 해방대상으로서 관리하는 관리부를 갖는 것으로 해도 된다.
이에 의해, 스레드가 후술하는 참조처리의 대상이 되기까지의 사이에만, 즉, 스레드가, 그 스레드에 대응하는 스택 내 등에 저장되어 있는 오브젝트 포인터가 가리키는 오브젝트에 대한 마크 부여에 상당하는 처리의 대상이 되기까지의 사이에만, 인터프리터에 의한 그 스레드의 실행 시에 오브젝트 포인터가 스레드에 의한 처리대상이 되는 것을 검출하여 작업용 메모리영역, 즉, 오브젝트 참조정보의 메모리영역에 저장하는 처리를 하므로, 일단 스레드가 참조처리의 대상이 된 후에는, 그 스레드는 인터프리터에 의한 실행 시에 그 검출이 없는 것만큼 보다 고속으로 동작하게 된다.
또, 상기 검사처리는, 선택된 당해 스레드에 대응하는 스택 내의 오브젝트 포인터가 가리키는 오브젝트를 상기 액세스 가능으로 검출한 때에 있어서, 검출한 당해 오브젝트가 이미 비 해방대상으로 관리되고 있지 않고, 또한, 당해 오브젝트 내에 오브젝트 포인터가 있을 때에 한해, 당해 오브젝트 포인터가 가리키는 오브젝트를 상기 액세스 가능으로 더 검출하는 수순을 반복하여 행하는 것을 내용으로 하는 처리이고, 상기 선택수단은, 최초의 선택 후는, 상기 검사수단에 의해 상기 검사처리가 이루어진 후에 있어서 상기 복수 스레드 중 상기 검사처리가 실시되어 있지 않은 스레드가 있는 한 계속적인 선택을 행하며, 상기 선택수단은, 각 스레드에 관한 정보를 참조하여, 소정의 스레드 선정조건에 의거하여 상기 선택을 행하는 것으로 해도 된다.
이에 의해, 이미 비 관리대상으로 관리된 오브젝트의 하부의 오브젝트를 중복하여 검출을 위한 처리의 대상으로 하는 것을 방지할 수 있다. 또, 이 중복하여 검출을 위한 처리를 하지 않는 방식에 의해, 참조처리의 대상으로서 조기에 선택된 스레드보다 늦게 선택된 스레드 쪽이 참조처리에 걸리는 시간이 단축될 가능성이 높아지므로, 각 스레드에 요구되는 응답성능에 비춰서 미리 스레드 선정조건을 정해 둠으로써, 각 스레드가 적절한 응답성능을 발휘하여 실행되도록 어느 정도 제어할 수 있게 된다.
또, 상기 스레드 선정조건은 스레드 상태가 wait 상태인 스레드를 스레드 상태가 wait 상태 이외인 스레드보다 조기에 선택하는 것을 나타내는 조건을 포함하며, 상기 선택수단은, 상기 선택을 행하는 시점에서 wait 상태의 스레드가 있는 한, 당해 wait 상태의 스레드를 선택하는 것으로 해도 된다.
이에 의해, wait 상태의 스레드를 정지하는 것이 되므로, 현재 동작하고 있는 AP스레드에 대한 악영향의 발생이 억제된다.
또, 상기 스레드 선정조건은 스레드 우선도의 스레드 우선도가 낮은 스레드를 스레드 우선도가 높은 스레드보다 조기에 선택하는 것을 나타내는 조건을 포함하는 것으로 해도 된다.
이에 의해, 스레드 우선도가 높은 스레드는 참조처리가 단시간에 이루어질 가능성이 높아지며, 실행성능의 저하가 어느 정도 방지되게 된다.
또, 상기 스레드 선정조건은 스레드에 대응하는 스택 사이즈가 작은 스레드를 스택 사이즈가 큰 스레드보다 조기에 선택하는 것을 나타내는 조건을 포함하는 것으로 해도 된다.
이에 의해, 스레드로부터 액세스 가능한 오브젝트에 대한 오브젝트 포인터를 저장하는 스택의 유효범위가 작은 만큼 참조처리에 요하는 시간은 짧아지는 경향에 있다는 점에 비춰보면, 각 스레드의 정지시간을 어느 정도 균등화 하는 효과를 얻을 수 있어서, 특정 스레드의 응답성이 다른 스레드에 비해 현저하게 나빠지는 사태를 어느 정도 회피할 수 있게 된다.
또, 상기 불필요 데이터 수집시스템은, 메모리 관리유닛(MMU)를 이용하여 메모리를 관리하는 메모리 관리기구를 구비하며, 오브젝트를 생성할 필요가 있을 때마다, 상기 메모리 관리기구에 의해 당해 오브젝트에 대응하는 메모리영역을 확보하고, 상기 해방수단은, 상기 메모리 관리기구를 거쳐서, 메모리영역의 해방을 행하는 것으로 해도 된다.
이에 의해, MMU를 이용하는 메모리 관리기구에 의해 확보되어 있는 C언어 외의 언어에 의한 프로그램의 데이터영역 등과 동등한 위치 부여로 오브젝트에 대한 메모리영역이 확보되므로, 가령, 특정한 히프영역(Heap Area)을 독자로 관리하여 그 히프영역 내의 일부를 오브젝트에 대한 메모리영역으로 확보하는 제어를 하는 것으로 한 경우와 비교해서, 오브젝트의 생성 전부터 무용의 큰 히프영역을 확보해 둘 필요가 없는 점, 그 히프영역에 대한 메모리 압축(Memory Compaction) 처리를 할 필요가 없다는 점 등의 유리한 효과를 얻을 수 있다.
도 1은 본 발명의 실시 예 1에 관한 GC시스템의 기능볼록도이다.
도 2는 오브젝트와 오브젝트 포인터와의 관계를 예시하는 도면이다.
도 3 은 from 테이블 및 to 테이블을 나타내는 도면이다.
도 4 는 참조처리 후의 from 테이블 및 to 테이블의 상태를 나타내는 도면이다.
도 5 는 스레드정보, 스택 및 오브젝트 참조정보를 나타내는 도면이다.
도 6 은 참조처리와 AP스레드의 상태와의 관계를 나타내는 도면이다.
도 7 은 스레드 선정조건의 내용을 나타내는 도면이다.
도 8 은 GC 제어처리를 나타내는 플로우챠트이다.
도 9 는 대상 스레드 결정처리를 나타내는 플로우챠트이다.
도 10 은 공유 오브젝트 참조처리를 나타내는 플로우챠트이다.
도 11 은 대상 스레드 참조처리를 나타내는 플로우챠트이다.
도 12 는 참조처리를 나타내는 플로우챠트이다.
도 13 은 명령실행처리를 나타내는 플로우챠트이다.
도 14 는 오브젝트 체인 추적처리를 나타내는 플로우챠트이다.
도 15 는 본 발명의 실시 예 2에 관한 GC시스템의 기능블록도이다.
도 16 은 스레드정보 및 스택을 나타내는 도면이다.
도 17 은 실시 예에서의 GC 제어처리를 나타내는 플로우챠트이다.
도 18 은 실시 예 2에서의 명령실행처리를 나타내는 플로우챠트이다.
도 19 는 종래의 Java 실행환경에 의해 관리된 Java 오브젝트와 C언어 프로그램에서의 데이터와의 메모리 배치를 나타내는 도면이다.
1. 실시 예 1
이하, 본 발명의 실시 예 1에 관한 불필요 데이터 수집(GC)시스템에 대하여 도면을 이용하여 설명한다.
1. 1 구성
도 1은 본 발명의 실시 예 1에 관한 GC시스템의 기능블록도이다.
GC시스템(10)은, CPU, 메모리 등을 구비한 컴퓨터에서 메모리에 저장된 제어 프로그램이 CPU에 의해서 실행됨으로써 실현되며, 멀티스레드 제어를 행하는 일반적인 오퍼레이션시스템(OS : Operating System) 및 소위 가상머신을 포함하고, Java언어 등으로 작성된 애플리케이션 프로그램의 실행환경으로서의 위치를 갖는 시스템이다.
GC시스템(10)은, 도 1에 도시한 바와 같이, 인터프리터부(interpreter, 100), 오브젝트 관리부(200), 스레드관리부(300) 및 GC부(400)를 구비한다.
여기서, 인터프리터부(100)는, 기본적으로 인터프리터인 AP를 실행하는 기능을 담당하며, 명령실행부(110) 및 오브젝트참조 검출부(120)를 구비한다.
오브젝트관리부(200)는, 오브젝트를 관리하는 기능을 담당하며, from 테이블(221), to 테이블(222) 등에 대응하는 메모리영역인 오브젝트 관리정보 기억부(210), 오브젝트 생성부(230) 및 테이블 절환부(240)를 구비한다.
또한, from 테이블(221)은 GC 개시 전에 존재하는 모든 오브젝트에 대한 모든 오브젝트 포인터를 저장하는 테이블이고, to 테이블(222)은 마크 앤드 스위프방식에서의 마크 부여가 이루어진 오브젝트에 대한 오브젝트 포인터를 저장하기 위해 이용되는 테이블이다. 이들 테이블에 대해서는 나중에 상세히 설명한다.
스레드관리부(300)는, 멀티스레드 제어를 실현하여, 스레드를 관리하는 기능을 담당하는 것이며, 스레드제어부(310)와, AP스레드별로, 스레드정보(320), 오브젝트 참조정보(330) 및 스택(340)에 대응하는 메모리영역을 갖는다.
또한, 스레드정보(320)는 GC처리 전체의 개시시점에서 온(on)되고, 그 AP스 레드에 대한 참조처리가 종료하면 오프(off)가 되는 GC플래그를 포함한다. 참조처리는, 오브젝트에 대한 마크 부여에 상당하는 처리이며, 오브젝트를 참조하기 위해 스택 내 등에 저장되어 있는 오브젝트 포인터와 동일한 내용의 오브젝트 포인터를 from 테이블에서 to 테이블로 이동하는 것을 주 내용으로 하는 처리이다.
GC부(400)는, 기본적으로는 소위 불필요 데이터 수집기에 상당하며, GC제어부(410), 스레드 선정조건 기억부(420), 참조처리부(430) 및 해방부(440)를 갖는다. 이 GC부(400)를 중심으로 하여 행해지는 GC는, 기본적으로 마크 앤드 스위프방식을 사용하며, 참조처리의 대상이 되는 AP스레드를 차례로 선택하고, 선택한 AP스레드를 정지시켜서 참조처리를 행하고 나서 정지를 해제하는 방식이다.
인터프리터부(100)에서의 명령실행부(110)는, AP스레드를 구성하는 명령 열을 순차 해석하여 실행하고, 명령이 오브젝트의 생성명령인 경우에는 오브젝트 생성부(230)가 오브젝트를 생성하도록 하는 기능을 갖는다.
오브젝트 참조검출부(120)는, GC플래그가 온인 경우에 한해서, 명령실행부(110)에 의해 실행되는 스레드 내의 명령이 오브젝트의 오브젝트 포인터를 처리대상으로 하는 명령인 때에, 그 오브젝트 포인터를 오브젝트 참조정보(330)의 메모리영역 중에 저장하는 기능을 갖는다.
오브젝트 관리부(200)에서의 오브젝트 생성부(230)는, 이른바 클래스파일(Class File) 등의 오브젝트의 정의정보를 참조하여, 종래의 OS의 메모리 관리기구에 대하여, 오브젝트에 필요한 양의 메모리영역의 확보의 요구를 통해, 메모리 내에 오브젝트를 생성하는 기능을 갖는다. 또한, GC시스템(10)은, 메모리 관리유닛 (MMU)을 이용하여 물리적인 메모리를 논리어드레스 공간에 대응시켜서, 메모리의 확보 및 해방을 관리하는 종래의 OS의 메모리 관리기구도 포함하고 있고, 이 메모리 관리기구는, 어느 양의 메모리영역의 확보가 요구되면, 논리어드레스 공간 내의 미사용영역 중 요구된 양의 메모리영역을 확보한 것으로 하여 관리하며, 그 확보한 메모리영역의 선두 어드레스를 반납하는 기능을 한다. 따라서 오브젝트 생성부(230)는 메모리 관리기구를 통하여 어드레스에 대응하는 논리어드레스 공간 내의 영역을 확보함으로써, 메모리 내에 오브젝트를 생성한다.
또한, 이 논리어드레스 공간에는, 인터프리터부(100)에 의해 실행되는, Java언어 등으로 작성된 AP에서의 오브젝트 이외에, 인터프리터부(100)를 거치지 않고 종래의 일반적인 OS의 직접 제어 하에서 실행되는 프로그램의 데이터, 즉 예를 들어 컴파일러 등에 의해 이미 실행형식으로 되어 있는 프로그램에 관한 데이터(이하 「Native 데이터」라 한다)도 배치된다. 이 인터프리터부(100)를 거치지 않고 실행 가능한 형식의 프로그램이, Native 데이터를 배치하기 위해 종래의 OS의 메모리 관리기구를 통해서 메모리영역을 확보하고, 그곳에 Native 데이터를 배치하는 것과 동일한 방식으로 오브젝트 생성부(230)에 의해 생성되는 오브젝트에 대한 메모리영역의 확보는 이루어진다.
이와 같은 Native 데이터나 그에 관한 프로그램은 GC시스템(10)의 특징이 되는 GC의 동작과는 직접 관계하지 않으므로 여기서는 상세한 설명을 생략한다.
또한, 상술한 AP스레드란, 인터프리터부(100)를 거쳐서 실행되는 AP의 실행단위가 되는 스레드를 의미하며, 즉, Native 데이터에 관한 프로그램의 실행단위가 되는 스레드 이외의 스레드를 말한다. 또, 여기서 말하는 오브젝트에는 Native 데이터는 포함되지 않는다.
테이블 절환부(240)는, from 테이블을 가리키는 것으로 이용되고 있는 포인터와 to 테이블을 가리키는 것으로 이용되고 있는 포인터를 교환함으로써, 순간적으로 from 테이블의 내용과 to 테이블의 내용을 교환한 것과 같은 효과를 발생시키는 기능을 갖는다.
스레드 관리부(300)에서의 스레드 제어부(310)는, 멀티스레드 제어를 행하며, AP를 구성하는 각 AP스레드 및 GC처리의 스레드를 포함하는 각 스레드를 병렬적으로 실행한다. 즉, 스레드 제어부(310)는 미소한 시간마다 각 스레드를 절환하여 실행한다. 또한, 스레드 관리부(300)는, Native 데이터에 관한 프로그램의 병렬적으로 실행하나, 이 멀티스레드 제어의 기능은 기본적으로 OS 등이 갖는 기능이며, GC시스템(10)의 특징이 되는 GC의 동작과는 직접 관계하지 않으므로, 여기서는 주로 AP스레드 및 GC처리의 스레드에만 주목하여 설명한다.
GC부(400)에서의 스레드 선정조건 기억부(420)는 참조처리를 행하는 대상이 되는 AP스레드를 선택하기 위한 조건을 나타내는 스레드 선정조건을 기억하고 있는 메모리영역이다.
참조처리부(430)는 참조처리를 행하는 기능을 가지며, 해방부(440)는, 마크 부여가 이루어져 있지 않은 오브젝트의 해방, 즉, GC의 종료단계에서 from 테이블(221)에 잔존하고 있는 오브젝트 포인터가 가리키는 오브젝트에 대응하는 메모리영역을 해방하는 기능을 갖는다. 이 메모리영역의 해방은, 오브젝트 포인터, 즉 오브 젝트의 논리어드레스를 지정하여, MMU를 이용한 종래의 OS의 메모리 관리기구에 대한 해방요구를 실행함으로써 실현된다. 또한, GC시스템(10)에 포함되는 종래의 OS의 메모리 관리기구는, 논리어드레스를 지정한 해방요구에 대하여, 논리 어드레스와 대응되어 관리하고 있는 확보영역을, 새로 메모리를 확보할 필요가 있을 때에 할당할 수 있는 미사용영역으로서 관리한다.
또, GC제어부(410)는 GC 제어처리를 실행하는 기능을 갖는다. 즉, GC제어부(410)는, 스레드 선정조건을 참조함으로써, 참조처리의 대상으로 하는 AP스레드를 하나 선정하고, 선택한 AP스레드에 대하여, 스레드 제어부(310)에 그 AP스레드를 정지시키고 나서, 참조처리부(430)에 그 AP스레드에 대응하는 스택 및 오브젝트 참조정보에 의거하여 참조처리를 행하게 하고, 그 후에 AP스레드의 선택을 행하는 순서를 미처리 AP스레드가 존재하지 않게 될 때까지 반복하고 나서, 해방부(440)에 마크 부여가 이루어져 있지 않은 오브젝트의 해방을 행하도록 하는 기능을 갖는다.
1. 2 데이터
이하, GC시스템(10)에서 취급되는 데이터에 대하여 설명한다.
도 2는 오브젝트와 오브젝트 포인터와의 관계를 예시하는 도면이다.
동 도면에서는 오브젝트 포인터를 작은 흑색 원(filled-in circle)으로 표현하고 있다.
오브젝트를 가리키는, 즉 메모리(500)에 대응하는 논리어드레스 공간에 배치된 오브젝트의 소재위치를 가리키는 오브젝트 포인터는, 오브젝트 내, 스택 내, 또는 공유 오브젝트 관리정보(353) 내에 존재할 수 있다. 여기서, 공유 오브젝트 관 리정보(353)는 AP 실행환경으로서의 가상머신에서 필요에 의해 확보되어 있는 오브젝트 군에 대한 오브젝트 포인터 군을 포함하는 데이터이다.
도 2의 예에서는, 공유 오브젝트 관리정보(353) 내에 있는 오브젝트 포인터가 오브젝트 201c를 가리키고 있다.
또, AP스레드 351에 대응하는 스택 내에 있는 오브젝트 포인터는 오브젝트 201a를 가리키고 있다. 즉, 오브젝트 201a의 메모리 어드레스를 내용으로 하고 있고, 또 다른 오브젝트 포인터는 오브젝트 201d를 가리키고 있다. 따라서 AP스레드 351은 실행 중에 이들 오브젝트 포인터를 참조함으로써 오브젝트 201a, 오브젝트 201d에 액세스할 수 있는 상태이다.
또, AP스레드 352에 대응하는 스택 내에 있는 오브젝트 포인터는 오브젝트 201b를 가리키고 있고, 오브젝트 201b 내의 데이터로서 오브젝트 201e를 가리키는 오브젝트 포인터가 포함되어 있다. 따라서 AP스레드 352는 이들 오브젝트 포인터를 추적함으로써 오브젝트 201e에 액세스 가능한 상태이다.
또, 도 2는, 인터프리터부(100)를 거쳐서 실행되는 Java언어 등으로 작성된 AP에 대응하는 오브젝트 201a ~ 201e 이외에도, 동일하게 OS의 메모리 관리기구에 의해 영역이 확보된 것인 Native 데이터 501a ~ 501d가 메모리(500) 내에 혼재하고 있는 것도 표시하고 있다. 즉, 오브젝트 201a ~ 201e는 어떤 종류의 히프영역(Heap Area) 내에 모여 있는 것이 아니라, 각 Native 데이터와 마찬가지로, OS의 메모리 관리기구에 의해 각각 개별적으로 영역이 할당되어 있다.
또한, 도 2에는 도시되어 있지 않으나, 스레드정보(320), 스택(340) 및 오브 젝트 참조정보(330)도 메모리(500) 내에 확보되는 것이며, 또, 오브젝트 관리정보 기억부(210)는 메모리(500) 내의 일부에 상당한다. 또한, 인터프리터부(100)를 거쳐서 실행되는 AP의 프로그램 부분이나, Native 데이터에 액세스하는 프로그램 부분은, 판독 및 기입이 가능한 메모리(RAM) 내에 저장되는 것으로 해도, 판독만 가능한 메모리(ROM)에 저장되는 것으로 해도 좋다.
도 3은 from 테이블 및 to 테이블을 나타내는 도면이다.
메모리(500) 내의 오브젝트 관리정보 기억부(210) 내에 오브젝트 포인터 또는 널 값(Null Value)을 충분한 수만큼 저장하기 위한 2개의 테이블이 설치되어 있고, 또, from 테이블 포인터(211) 및 to 테이블 포인터(212)가 존재한다. from 테이블 포인터(211)는 이 2개의 테이블 중 한쪽을 가리키는 포인터이고, to 테이블 포인터(212)는 다른 쪽을 가리키는 포인터이다. 여기서는, 현 시점에서 from 테이블 포인터(211)가 가리키고 있는 테이블을 from 테이블이라고 하고, to 테이블 포인터(212)가 가리키고 있는 테이블을 to 테이블이라고 하고 있다.
from 테이블(221)은, GC 개시시점에서는, 그때에 존재하는 모든 오브젝트에 대한 모든 오브젝트 포인터를 저장하고 있다.
또, to 테이블(222)은 참조처리의 과정에서 from 테이블(221) 내로부터 이동하여 오브젝트 포인터를 저장하는 테이블이다. 또한, from 테이블(221) 내의 오브젝트 포인터가 to 테이블(222)로 이동되는 때에는 그 오브젝트 포인터가 저장되어 있던 from 테이블(221) 내의 위치에 해당하는 메모리 내용은 널 값이 된다.
도 4A 및 도 4B는, 참조처리에 의한 from 테이블 및 to 테이블의 내용의 변 화를 나타내기 위한 도면으로, 도 4A는 참조처리 개시 전의 상태를 나타내고, 도 4B는 참조처리 후의 상태를 나타낸다.
도 4A에서는, 참조처리 개시 전에서의 from 테이블 221x는, objA(202a), objB(202b), objC(202c)의 각각의 오브젝트를 가리키는 오브젝트 포인터를 포함하고 있다. 또한, 도 4A 및 도 4B에서는 각 오브젝트와 Native 데이터가 메모리(500) 내에 혼재하고 있는 것도 표현하고 있다.
그 후에 AP스레드(354)를 대상으로 하여 참조처리를 행한 경우에는, AP스레드(354)의 스택 내에 포함되어 있는 오브젝트 포인터와 동일한 값의 것이 from 테이블에서 to 테이블로 이동되며, 그 결과로 도 4B에 도시한 상태가 된다. from 테이블 221y에서는, objA(202a)를 가리키고 있던 오브젝트 포인터가 존재한 장소와, objC(202c)를 가리키고 있던 오브젝트 포인터가 존재한 장소의 양쪽이 널 값으로 갱신되어 있고, to 테이블 222y에는, objA(202a)를 가리키는 오브젝트 포인터와, objC(202c)를 가리키는 오브젝트 포인터가 저장되어 있다.
도 5는, 스레드정보, 스택 및 오브젝트 참조정보를 나타내는 도면이다.
스레드정보(320)는, AP스레드마다 그 스레드의 생성시에 생성되고, 그 AP스레드에 대한 정보를 포함하는 것이며, 구체적으로는, 상태(321), 우선도(322), 스택 포인터(323), GC 개시 시 스택 포인터(324), GC 플래그(325), 오브젝트 참조정보 선두 포인터(326) 및 오브젝트 참조정보 현재 포인터(327)를 포함한다. 또한, AP스레드 생성시에는 스레드정보(320)의 메모리영역만이 아니라 스택(340)의 메모리영역도 확보된다.
스레드정보(320)에서의 상태(321)는, 멀티스레드 제어를 위한 스레드 상태를 나타내는 정보이며, wait 상태, run 상태, ready 상태 등의 각각을 나타낸다.
우선도(322)는, 스레드의 우선도를 나타내는 정보이며, 우선도는 예를 들어, 스레드 생성 시에 AP로부터 지정을 받아서 정해진다. 또한, 멀티스레드 제어에서 우선도가 높은 스레드가 ready 상태이면 그보다 우선도가 낮은 스레드보다도 우선적으로 run 상태가 된다.
스택 포인터(323)는 해당하는 스레드에 대한 스택 내에서의 현재의 유효한 데이터 범위의 종단을 나타내는 것이다. 또한, 멀티스레드 제어에 있어서, 스레드가 run 상태로부터 다른 상태, 즉, 정지한 상태로 절환(switching)되는 때에, 그때까지 스택 포인터를 가리키는 소정의 레지스터에 저장되어 있던 값이 이 스택 포인터(323)에 저장되며, 스레드가 run 상태로 절환되는 때에, 이 스택 포인터(323) 내의 값이 그 소정의 레지스터에 설정된다.
GC 개시 시 스택 포인터(324)는 GC 개시 시에서의 스택 내에서의 유효한 데이터 범위의 종단을 나타내는 것이다.
GC플래그(325)는, GC처리 전체의 개시시점에서 온되고, 그 AP스레드에 대한 참조처리가 종료하면 오프가 된다.
오브젝트 참조정보 선두 포인터(326)는, 해당 AP스레드에 대응하는 오브젝트 참조정보의 메모리영역의 선두를 나타내는 것이며, AP스레드 생성 시의 그 메모리영역 확보 시에 설정된다.
또, 오브젝트 참조정보 현재 포인터(327)는, 해당 AP스레드에 대응하는 오브 젝트 참조정보의 메모리영역에 있어서, 오브젝트 참조 검출부(120)가 다음에 오브젝트 포인터를 저장하여야 할 위치를 나타내는 정보이며, 오브젝트 참조 검출부(120)에 의해서 참조 및 갱신된다.
도 6은 참조처리와 AP스레드의 상태와의 관계를 나타내는 도면이다.
GC스레드(356)는, GC제어부(410)에 의한 GC를 실행하는 스레드이며, GC로서 각 AP스레드를 순서대로 대상으로 하여 참조처리를 행한다. 여기서는, AP스레드 355a, AP스레드 355b, AP스레드 355c의 순으로 참조처리가 이루어지는 경우의 예를 나타내고 있다.
AP스레드 355a는, 참조처리가 이루어진 후의 상태이며, 실행 중이다. 여기서 말하는 실행 중은, sleep 상태, 즉 정지상태가 아닌 것이며, 각 순간에 있어서는 run 상태나 ready 상태 등으로 변화할 수 있다.
AP스레드 355b는, 참조처리가 이루어지고 있는 상태이며, 정지하고 있다. 참조처리는, AP스레드를 강제로 정지상태로 하여, 스택 및 오브젝트 참조정보를 참조하여 행하여진다.
AP스레드 355c는 참조처리가 아직 이루어지고 있지 않은 상태이며, 실행 중이다.
도 7은 스레드 선정조건의 내용을 나타내는 도면이다.
스레드 선정조건(421)은, 어느 AP스레드를 우선하여 참조처리의 대상으로 하는가의 판단기준이 되는 정보이며, 스레드 상태(422), 스레드 우선도(423) 및 스택 사이즈(424)로 구성된다.
스레드 상태(422)는, 어느 상태의 AP스레드를 우선하는가를 나타내는 정보이며, 도 7의 예는 wait 상태의 AP스레드를 run 상태 등의 AP스레드보다 우선한다는 취지를 나타내고 있다.
스레드 우선도(423)는, AP스레드에 대해서 정해져 있는 우선도가 높은 것을 참조처리의 대상으로 하여 우선도를 선정하는가, 또는 낮은 것을 우선적으로 선정하는가를 나타내는 정보이며, 도 7의 예에서는 우선도가 낮은 것을 우선적으로 선정한다는 취지를 나타내고 있다.
또, 스택 사이즈(424)는, AP스레드에 대응하는 스택영역의 유효범위의 크기가 큰 곳의 AP스레드를 우선적으로 선정하는가, 또는 작은 곳의 AP스레드를 우선적으로 선정하는가를 나타내는 정보이며, 도 7의 예에서는 스택영역의 유효범위의 크기가 작은 것을 우선적으로 선정한다는 취지를 나타내고 있다.
1. 3 동작
이하 GC시스템의 동작에 대하여 설명한다.
도 8은 GC 제어처리를 나타내는 플로우챠트이다.
GC 제어처리는 타이머에 의거하여 일정한 주기로 행해진다.
GC제어부(410)는, 먼저, from 테이블 포인터(211)와 to 테이블 포인터(212)의 내용을 교환함으로써, from 테이블과 to 테이블의 내용을 바꾼다(스텝 S11). 이에 따라, 현재 해방되어 있지 않은 모든 오브젝트를 가리키는 모든 오브젝트 포인터가 from 테이블에 저장되어 있는 상태가 된다.
이어서, GC제어부(410)는, 스레드 제어부(310)에 모든 AP스레드를 정지시키 고(스텝 S12), 모든 AP스레드에 대한 스레드정보 중의 GC 플래그(325)를 온하며, 현재의 스택 포인터를 스레드정보 중의 GC 개시 시 스택 포인터(324)로 설정하고(스텝 S13), 스레드 제어부(310)에 모든 AP스레드의 정지를 해제시킨다(스텝 S14). 스텝 S13에서는, 또한, AP스레드별로, 오브젝트 참조정보의 메모리영역을 확보하고, 그 메모리영역의 선두를 가리키는 포인터를 오브젝트 참조정보 선두 포인터(326) 및 오브젝트 참조정보 현재 포인터(327)로 설정한다.
또한, 스레드 제어부(310)는 종래의 OS의 멀티스레드 제어기구와 동일한 방식에 의해 스레드의 정지 및 정지 해제를 행한다. 이 스레드의 정지는, 스레드를 정지상태, 즉, sleep 상태로 하는 제어이며, 스레드의 정지 해제는 sleep 상태를 해제하여 ready 상태로 되돌리는 제어이다.
스텝 S14에 이어서, GC제어부(410)는, 공유 오브젝트 관리정보(353) 내의 오브젝트 포인터를 추적함으로써 도달하는 오브젝트에 대한 마크 부여를 행하기 위해 공유 오브젝트 참조처리를 행하고(스텝 S15), GC 미처리 스레드, 즉 아직 참조처리의 대상으로 선정되어 있지 않은 AP스레드가 존재하는가 여부를 판정한다(스텝 S16). 또한, 공유 오브젝트 참조처리에 대해서는 후술한다.
스텝 S16에 있어서 GC 미처리 스레드가 존재한다고 판정한 경우에는, GC제어부(410)는, 참조처리의 대상이 되는 AP스레드를 결정하기 위한 대상 스레드 결정처리를 행하고(스텝 S17), 스레드 제어부(310)에 그 결정한 AP스레드를 정지시키며(스텝 S18), 그 결정한 AP스레드에 관한 참조처리를 내용으로 하는 대상 스레드 참조처리를 실행하고(스텝 S19), 그 결정한 AP스레드의 GC 플래그(325)를 오프로 하 며(스텝 S20), 스레드 제어부(310)에 그 결정한 AP스레드의 정지를 해제시키고(스텝 S21), 다시, 스텝 S16의 판정으로 복귀한다. 또한, 대상 스레드 결정처리 및 대상 스레드 참조처리에 대해서는 후술한다. 또, 스텝 S20의 직후에, GC 제어부(410)는 대상 AP스레드에 대응하는 오브젝트 참조정보의 메모리영역을 해방한다.
또, 스텝 S16에서, GC 미처리 스레드가 존재하지 않는다고 판정한 경우에는, GC제어부(410)는, 해방부(440)에 마크 부여가 이루어져 있지 않은 오브젝트를 해방시키고(스텝 S22), GC처리를 종료한다. 스텝 S22에서는, 해방부(440)는, 참조처리에 의해서 to 테이블로 오브젝트 포인터가 이동되어 있지 않은 곳의 오브젝트, 즉 from 테이블에 잔존하고 있는 오브젝트 포인터가 가리키는 오브젝트에 대응하는 메모리영역을 해방한다. 이 해방은, 오브젝트 생성부(230)가 오브젝트 생성을 위해 오브젝트에 할당하기 위한 메모리영역을 MMU를 이용한 OS의 메모리 관리기구에 의하여 확보하는 것에 대응하며, 그 확보된 메모리영역의 해방을 의미한다. 또한, 이 해방된 메모리영역은 메모리 관리기구에 의해 새로이 오브젝트나 Native 데이터의 저장영역으로서 할당될 수 있게 된다.
도 9는 대상 스레드 결정처리를 나타내는 플로우챠트이다.
GC제어부(410)는, 스레드 선정조건 기억부(420) 내의 스레드 선정조건(421)을 참조하여, 대상 스레드 결정처리를 행한다.
먼저, GC제어부(410)는, 각 AP스레드에 대응하는 스레드정보를 참조하여, 상태 321이 wait 상태인 AP스레드를 검색한다(스텝 S31). 이 검색결과의 스레드 수를 판정하여(스텝 S32), 1이면 그 검색결과의 AP스레드를 참조처리의 대상 스레드로 결정하고(스텝 S37), 대상 스레드 결정처리를 종료한다.
또, 스텝 S32에서 검색결과의 스레드 수가 0이면, GC제어부(410)는, 스레드의 우선도(322)가 가장 낮은 AP스레드를 검색하고(스텝 S33), 검색결과의 스레드 수가 1인가 여부를 판정한다(스텝 S35). 또, 스텝 S32에서 검색결과의 스레드 수가 2 이상이면, 검색결과의 AP스레드 중에서 범위를 더 축소하기 위해, 스레드의 우선도(322)가 가장 낮은 AP스레드를 검색하고(스텝 S34), 검색결과의 스레드 수가 1인가 여부를 판정한다(스텝 S35).
스텝 S35에서 스레드 수가 1로 판정된 경우에는, GC제어부(410)는, 그 결과인 AP스레드를 참조처리의 대상 스레드로 결정하고(스텝 S37), 대상 스레드 결정처리를 종료한다.
또, 스텝 S35에서, 검색결과 스레드 수가 1이 아니라고 판정한 경우, 즉, 가장 낮은 우선도의 AP스레드가 복수 존재하는 경우에는, GC제어부(410)는, 검색결과의 AP스레드 중에서 스택 사이즈가 최소인 AP스레드를 검색하여(스텝 S36), 스택 사이즈가 최소인 AP스레드를 참조처리의 대상으로 결정하고(스텝 S37), 대상 스레드 결정처리를 종료한다.
도 10은 공유 오브젝트 참조처리를 나타내는 플로우챠트이다.
GC제어부(410)는, 오브젝트 포인터 군을 포함하는 공유 오브젝트 관리정보(353)의 선두 오브젝트 포인터에 주목(focused)하여(스텝 S41), 참조처리부(430)가 참조처리(스텝 S42)를 행하도록 함으로써, AP의 실행환경으로서의 가상머신에서 필요에 의해 확보되어 있는 오브젝트 군 모두에 마크 부여를 행한다.
도 11은 대상 스레드 참조처리를 나타내는 플로우챠트이다.
GC제어부(410)는, 대상 스레드에 대응하는 스레드정보 중의 GC 개시 시 스택 포인터(324)가 가리키는 위치에 주목하여(스텝 S51), 참조처리부(430)가 참조처리(스텝 S52)를 행하도록 함으로써, 스택영역 내의 오브젝트 포인터로부터 도달할 수 있는 모든 오브젝터에 대한 마크 부여를 행한다. 또한, GC 제어처리(도 8 참조)의 개시시점과, 이 대상 스레드 참조처리를 개시하는 시점은 다르므로, GC 개시 시 스택 포인터(324)가 가리키는 위치와 그에 이어지는 각 위치의 내용은 GC 개시시점과는 다르지만, 후속되는 스텝 S53 및 스텝 S54에 의해서, GC개시 이후에는, 대상 스레드의 동작에 따라서 변화한 오브젝트 포인터로부터 도달할 수 있는 모든 오브젝트에 대한 마크 부여가 이루어지므로, 과잉의 마크 부여를 하는 경우는 있을 수 있으나, 참조 되어 있음에도 불구하고 마크 부여가 누락되는 사태는 발생하지 않는다.
이어서, GC제어부(410)는, 오브젝트 참조정보 선두 포인터(326)가 가리키는 위치에 주목하여(스텝 S53), 참조처리부(430)가 참조처리(스텝 S54)를 행하도록 하고, 대상 스레드 참조처리를 종료한다.
도 12는 참조처리를 나타내는 플로우챠트이다.
참조처리부(430)는, 주목되고 있는 메모리 위치에서, 오브젝트 포인터를 검색하고(스텝 S61), 오브젝트 포인터를 검출했는가 여부를 판정하며(스텝 S62), 검출한 경우에는 그 검출한 오브젝트 포인터와 같은 값의 오브젝트 포인터가 from 테이블에 존재하는가 여부를 판정하여(스텝 S64), from 테이블에 존재하면, from 테 이블에서 to 테이블로 그 오브젝트 포인터를 복사하고, from 테이블 내의 그 오브젝트 포인터가 존재하고 있던 위치에 널 값을 기록하며(스텝 S66), 그 오브젝트 포인터가 가리키는 오브젝트의 데이터 선두에 주목하여(스텝 S67), 다시 스텝 S61로 복귀한다.
또, 스텝 S64에서 from 테이블에는 그 오브젝트 포인터가 존재하지 않는다고 판정한 경우에는, 이미 from 테이블에서 to 테이블로 이동되어 있으므로, 참조처리부(430)는, 주목하고 있는 위치의 다음의 위치에 주목하여(스텝 S65), 다시 스텝 S61로 복귀한다. 스텝 S65 및 스텝 S61의 조합에 의해, 공유 오브젝트 관리정보(353) 내의 오브젝트 포인터를 차례차례 검색하고, 스택 내의 오브젝트 포인터를 차례차례 검색하며, 개개의 오브젝트 내의 데이터 멤버로서의 오브젝트 포인터를 차례차례 검색하는 것 등이 실현된다.
또, 스텝 S62에서 오브젝트 포인터를 검색할 수 없었다고 판정한 경우에는, 참조처리부(430)는 주목 위치가 오브젝트 포인터 내인가 여부를 판정한다(스텝 S63). 또한, 오브젝트 포인터를 검출할 수 없었다고 하는 것은, 주목 위치가 공유 오브젝트 관리정보(353) 내이면 그 공유 오브젝트 관리정보(353) 내에서 오브젝트 포인터를 검출할 수 없었다고 하는 것이고, 주목 위치가 스택 내이면 스택 내에서 오브젝트 포인터를 검출할 수 없었다고 하는 것이며, 주목 위치가 오브젝트 내이면 그 오브젝트 내에서 오브젝트 포인터를 검출할 수 없었다고 하는 것이다.
스텝 S63에서 주목 위치가 오브젝트 내라고 판정한 경우에는, 참조처리부(430)는, 그 오브젝트 내에 주목 전의 주목 위치의 다음 위치에 주목하여(스텝 S68), 다시 스텝 S61로 복귀한다. 이 스텝 S68에 의해서, 참조처리부(430)는 스텝 S67에 의해서 오브젝트 내에 주목하기 전에 주목하고 있던 오브젝트 포인터의 다음 위치에 주목하게 된다.
또, 스텝 S63에서 주목 위치가 오브젝트 내가 아니라고 판정한 경우에는, 참조처리부(430)는 참조처리를 종료한다.
도 13은 명령실행처리를 나타내는 플로우챠트이다.
인터프리터부(100)에서의 명령실행부(110)는 run 상태가 된 AP스레드에서의 프로그램 중의 명령기술(Instruction Description)을 순차 해석하여 실행하는 명령실행처리를 행한다.
먼저, 명령실행부(110)는 AP스레드의 현재의 실행위치에서의 명령을 해석하여 실행하고(스텝 S71), 오브젝트 참조검출부(120)는, 그 AP스레드에 대응하는 스레드정보 중의 GC 플래그(325)가 온인가 여부를 판정하여(스텝 S72), 온이면 명령실행부(110)가 다음 명령의 해석 실행을 행한다(스텝 S71).
스텝 S72에서 GC 플래그(325)가 온이라고 판정한 경우에는, 오브젝트 참조검출부(120)는, 스텝 S71에서 명령실행부(110)에 의해 실행된 명령이 오브젝트 포인터를 처리대상으로 하는 명령이었는가를 판정하고(스텝 S73), 오브젝트 포인터를 처리대상으로 하는 명령이 아니었으면, 명령실행부(110)가 다음 명령의 해석 실행을 행한다(스텝 S71). 또한, 오브젝트 포인터를 처리대상으로 하는 명령이란, 스택 내의 오브젝트 포인터를 오브젝트 내로 복사하는 연산을 지시내용으로 하는 명령이나, 오브젝트 내의 오브젝트 포인터를 다른 오브젝트 내로 복사하는 연산을 지시내 용으로 하는 명령이다.
스텝 S73에서 오브젝트 포인터를 처리대상으로 하는 명령이었다고 판정한 경우에는, 오브젝트 참조검출부(120)는 그 오브젝트 포인터와 같은 값의 것이 오브젝트 참조정보영역에 이미 저장되어 있는가 여부를 판정하여(스텝 S74), 저장되어 있는 경우에는 명령실행부(110)가 다음 명령의 해석 실행을 행한다(스텝 S71).
스텝 S74에서 그 오브젝트 포인터와 같은 값의 것이 오브젝트 참조정보의 메모리영역에 저장되어 있지 않은 경우에는, 오브젝트 참조검출부(120)는, 그 오브젝트 포인터를 오브젝트 참조정보 현재 포인터(327)가 가리키는 오브젝트 참조정보 중의 위치에 저장하고(스텝 S75), 그 오브젝트 포인터가 가리키는 오브젝트에 주목하여, 오브젝트 체인(object chain) 추적처리(스텝 S76)를 행하며, 그 후에는 명령실행부(110)가 다음 명령의 해석 실행을 행한다(스텝 S71).
또한, 스텝 S71에서의 실행대상이 되는 명령이 오브젝트를 생성하는 명령인 경우에는, 명령실행부(110)는, 오브젝트 생성부(230)에 오브젝트 생성을 지시하고, 이것을 수신하여, 오브젝트 생성부(230)는 오브젝트를 생성함과 동시에 그 오브젝트를 가리키는 오브젝트 포인터를 AP스레드에 대해서 반납하고, 그 오브젝트 포인터의 사본을 to 테이블 내에 설정한다.
도 14는 오브젝트 체인 추적처리를 나타내는 플로우챠트이다.
오브젝트 참조검출부(120)는, 주목하고 있는 오브젝트에 미 주목(non-focused) 오브젝트 포인터가 존재하는가 여부를 판정하고(스텝 S81), 존재하는 경우에는 그 미 주목의 하나의 오브젝트 포인터에 주목하여(스텝 S82), 그 주목한 오 브젝트 포인터를 오브젝트 참조정보의 메모리영역에 저장하며(스텝 S83), 그 주목한 오브젝트 포인터가 가리키는 오브젝트에 주목하여 오브젝트 체인 처리를 더 행한다(스텝 S84). 또한, 오브젝트 포인터를 오브젝트 참조정보의 메모리영역에 저장한 때에는, 오브젝트 참조검출부(120)는 오브젝트 참조정보 현재 포인터를 그 오브젝트 포인터의 사이즈만큼 진행시킨다.
또, 스텝 S81에서, 주목하고 있는 오브젝트에 미 주목의 오브젝트 포인터가 존재하고 있지 않다고 판정한 경우에는, 오브젝트 참조검출부(120)는 오브젝트 체인 추적처리를 종료한다.
따라서 이 명령실행처리 및 오브젝트 체인 추적처리에 의해서, GC 플래그(325)가 온인 경우에 있어서 오브젝트 포인터가 처리대상이 된 때에는, 그 오브젝트 포인터로부터 추적해 낼 수 있는 오브젝트 포인터는 모두 오브젝트 참조정보의 메모리영역에 저장되게 된다.
또한, AP스레드에 의한 오브젝트 포인터를 처리대상으로 하는 연산의 실행에 의해서, 그 오브젝트 포인터에서 지시되고 있던 오브젝트에 그 AP스레드가 액세스할 수 없는 상태가 된 경우, 즉, AP스레드의 동작에 의해, (a) 오브젝트 포인터가 클리어된 경우, (b) 오브젝트 포인터가 다른 내용으로 갱신된 경우, (c) 오브젝트 포인터가 스택영역의 유효범위 내에 존재하는 경우에 있어서, 스택 포인터의 변경이 이루어져 스택영역의 범위 외가 되어 AP스레드로부터 기본적으로 액세스 불능이 된 경우에도, 그 AP스레드에 의해서 미리 그 오브젝트 포인터가 다른 AP스레드로부터는 액세스 가능한 장소에 복사되어 있었다면, 그 오브젝트 포인터에서 지시되는 오브젝트에는 마크 부여가 필요하게 되므로, 이를 위해, 상술한 스텝 S72 내지 스텝 S76, 스텝 S81 내지 스텝 S84의 처리가 행해진다.
2. 실시 예 2
이하, 본 발명의 실시 예 2에 관한 GC시스템에 대하여 도면을 이용하여 설명한다.
실시 예 2에 관한 GC시스템은, AP스레드를 순차 정지하여 참조처리를 행하는 점에서 실시 예 1의 GC시스템과 기본적으로 동일하다. 다만, 실시 예 2에 관한 GC시스템은, 주로, AP스레드별로 오브젝트 참조처리나 GC 플래그를 갖는 것이 아니라 시스템 전체에서 집약하여 오브젝트 참조정보나 GC 플래그를 갖는 점 및 스레드정보의 내용을 일반적인 멀티스레드 제어에 요하는 정도로 축소하고 있는 점이 GC시스템 10과 다르다.
도 15는 본 발명의 실시 예 2에 관한 GC시스템의 기능블록도이다.
도 15에 도시한 GC시스템 20의 구성요소 중, 실시 예 1에서 제시된 GC시스템 10과 동일한 구성요소에 대해서는 도 1과 동일한 부호를 부여하고 있고, 여기서는 GC시스템 20의 특유한 점을 중심으로 설명한다. 또한, 특별히 설명하지 않는 점에 대해서는 GC시스템 20은 GC시스템 10과 동일하다.
GC시스템 20은, 도 15에 도시한 바와 같이, 인터프리터부(1100), 오브젝트 관리부(200), 스레드 관리부(1300), 및 GC부(1400)를 구비한다.
여기서, 인터프리터부(1100)는, 기본적으로 인터프리터로서 AP를 실행하는 기능을 담당하며, 명령실행부(110) 및 오브젝트 참조검출부(1120)를 갖는다.
스레드 관리부(1300)는, 멀티스레드 제어를 행하는 스레드를 관리하는 기능을 담당하며, 스레드 제어부(310)와, AP스레드별로 스레드정보(1320) 및 스택(340)에 대응하는 메모리영역을 갖는다. 또한, 스레드정보(1320)는, 도 16에 도시한 바와 같이, 상태(321), 우선도(322) 및 스택 포인터(323)를 포함하는 것이다.
GC부(1400)는, 기본적으로 소위 불필요 데이터 수집기에 상당하며, GC제어부(1410)와, 스레드 선정조건 기억부(420)와, 참조처리부(1430)와, 해방부(440)와, 오브젝트 참조정보(1450) 및 GC플래그(1460)에 대응하는 메모리영역을 갖는다.
인터프리터부(1100)에서의 오브젝트 참조검출부(120)는, GC플래그(1460)가 온인 경우에 한해서, 명령실행부(110)에 의해 실행되는 AP스레드 내의 명령이 오브젝트의 오브젝트 포인터를 처리대상으로 하는 명령인 때에, 그 오브젝트 포인터를 오브젝트 참조정보(1450)의 메모리영역 내에 저장하는 기능을 가진다.
GC부(1400)를 중심으로 하여 행해지는 GC는, 기본적으로 마크 앤드 스위프방식을 이용하며, 참조처리의 대상이 되는 AP스레드를 순차로 선택하여, 선택한 AP스레드를 정지시켜서 참조처리를 행하고 나서 그 정지를 해제하는 방식의 것이다.
GC부(1400)에서의 참조처리부(1430)는 스택 및 오브젝트 참조정보(1450)를 참조함으로써 참조처리를 행하는 기능을 갖는다. 오브젝트 참조정보(1450)는, GC시스템 10에서의 오브젝트 참조정보와 마찬가지로 오브젝트 포인터를 내용으로 하는 정보이나, AP스레드별로 존재하는 것은 아니다. 이 오브젝트 참조정보(1450)의 메모리영역에는, 모든 AP스레드에 대한 오브젝트 참조검출부(1120)에 의해, 오브젝트 포인터가 명령의 처리대상이 된 경우에 그 오브젝트 포인터가 저장된다. 또한, 스 레드정보(1320), 스택(340), 오브젝트 참조정보(1450), GC 플래그(1460)는, 오브젝트나 Native와 마찬가지로, 오브젝트 관리정보 기억부(210)를 포함하는 메모리에 저장된다.
또, GC제어부(1410)는 도 17에 도시하는 GC 제어처리를 실행하는 기능을 갖는다.
도 17은 실시예 2에서의 GC 제어처리를 나타내는 플로우챠트이다. 또한, 이 플로우챠트 중의 처리스텝 중, 실시 예 1의 GC 제어처리와 동일한 것에 대해서는 도 8과 동일한 부호를 부여하여 표시하고 있다.
이 GC 제어처리는 타이머에 의거하여 일정 주기로 행해진다.
GC제어부(1410)는, 먼저, from 테이블 포인터(211)와 to 테이블 포인터(212)의 내용을 교환함으로써 from 테이블과 to 테이블의 내용을 바꾸고(스텝 S11), GC 플래그(1460)를 온으로 한다(스텝 S111).
스텝 S111에 이어서, GC제어부(1410)는, 공유오브젝트 관리정보(353) 내의 오브젝트 포인터를 추적함으로써 도달하는 오브젝트에 대한 마크 부여를 행하기 위한 공유 오브젝트 참조처리를 행하고(스텝 S15), GC 미처리 스레드, 즉 아직 참조처리의 대상으로 선정되어 있지 않은 AP스레드가 존재하는가 여부를 판정한다(스텝 S16).
스텝 S16에서 GC 미처리 스레드가 존재한다고 판정한 경우에는, GC제어부(1410)는, 참조처리의 대상이 되는 AP스레드를 결정하기 위한 대상 스레드 결정처리를 행하고(스텝 S17), 스레드 제어부(310)에 그 결정한 AP스레드를 정지시키며( 스텝 S18), 그 결정한 AP스레드에 대응하는 스택 포인터의 위치에 주목하여(스텝 S112), 참조처리부(1430)에 참조처리(도 12)를 실행시키고(스텝 S113), 스레드 제어부(310)에 그 결정한 AP스레드의 정지를 해제시켜서(스텝 S21), 재차 스텝 S16의 판정으로 복귀한다.
또, 스텝 S16에서 GC 미처리 스레드가 존재하지 않는다고 판정한 경우에는, GC제어부(1410)는, 스레드 제어부(310)에 모든 스레드를 정지시키고(스텝 S114), 오브젝트 참조정보(1450)의 메모리영역의 선두 위치에 주목하여(스텝 S115), 참조처리부(1430) 참조처리를 실행시키며(스텝 S116), GC 플래그(1460)를 오프 하고(스텝 S117), 스레드 제어부(310)에 모든 AP스레드의 정지를 해제시키며(스텝 S118), 해방부(440)에 마크 부여가 이루어져 있지 않은 오브젝트를 해방시키고(스텝 S22), GC 제어처리를 종료한다.
여기서, 인터프리터부(1100)에 의해 이루어지는 명령실행처리에 대해 간단히 설명한다.
도 18은 실시 예 2에서의 명령실행처리를 나타내는 플로우챠트이다.
동 도면에 도시한 바와 같이, 이 명령실행처리는 도 13에 도시한 명령실행처리에서 스텝 S76을 삭제한 것과 기본적으로 동일하다.
먼저, 명령실행부(110)는 AP스레드의 현재의 실행위치에서의 명령을 해석하여 실행하고(스텝 S71), 오브젝트 참조검출부(1120)는 GC 플래그(1460)가 온인가 여부를 판정하여(스텝 S72), 온이 아니면 명령실행부(110)가 다음 명령의 해석 실행을 행한다(스텝 S71).
스텝 S72에서 GC 플래그(325)가 온이라고 판정한 경우에는, 오브젝트 참조검출부(1120)는, 스텝 S71에서 명령실행부(110)에 의해 실행된 명령이 오브젝트 포인터를 처리대상으로 하는 명령이었던가 여부를 판정하고(스텝 S73), 오브젝트 포인터를 처리대상으로 하는 명령이 아니었다면 명령실행부(110)가 다음 명령의 해석 실행을 행한다(스텝 S71).
스텝 S73에서 오브젝트 포인터를 처리대상으로 하는 명령이었다고 판정한 경우에는, 오브젝트 참조검출부(1120)는, 그 오브젝트 포인터와 같은 값의 것이 오브젝트 참조정보영역에 이미 저장되어 있는가 여부를 판정하고(스텝 S74), 저장되어 있는 경우에는 명령실행부(110)가 다음 명령의 해석 실행을 행한다(스텝 S71).
스텝 S74에서 오브젝트 포인터와 같은 값의 것이 오브젝트 참조정보의 메모리영역에 저장되어 있지 않은 경우에는, 오브젝트 참조검출부(1120)는, 그 오브젝트 포인터를 오브젝트 참조정보 중의 위치에 저장하고(스텝 S75), 그 후는 명령실행부(110)가 다음 명령의 해석 실행을 행한다(스텝 S71).
이와 같이 하여 GC제어부(1410)는, 스레드 선정조건을 참조함으로써 참조처리의 대상으로 하는 AP스레드를 하나 선정하고, 선택한 AP스레드에 대해서, 스레드 제어부(310)에 그 AP스레드를 정지시키고 나서, 참조처리부(1430)에 그 AP스레드에 대응하는 스택에 의거하여 참조처리를 행하도록 하고, 그 후에 스레드 제어부(310)에 선택한 AP스레드의 정지를 해제시키고 나서, 다음의 AP스레드의 선택을 행한다고 하는 순서를, 미처리 AP스레드가 존재하지 않게 될 때까지 반복하며, 그 후, 스레드 제어부(310)에 모든 AP스레드를 정지시켜서, 참조처리부(1430)에 오브젝트 참 조정보에 의거하여 참조처리를 행하도록 하고, 스레드 제어부(310)에 모든 AP스레드의 정지를 해제시키고, 해방부(440)에 마크 부여가 이루어져 있지 않은 오브젝트의 해방을 행하도록 한다.
3. 고찰
이하, 상술한 본 발명에 관한 GC시스템이 관리하는 오브젝트와 종래의 Java 실행환경에서의 불필요 데이터 수집장치 등에 의해 취급되는 오브젝트(이하, 특히 「Java 오브젝트」라 한다)의 메모리영역의 차이에 대하여 간단히 대비 설명한다.
상술한 실시 예 1, 2에 제시한 본 발명의 GC시스템에서는, 프로그래머에게 확보한 메모리의 해방을 의식하지 않도록 하는 Java 언어 등의 오브젝트 지향 언어에 의해 작성된 AP를 실행할 때의 오브젝트의 생성 시의 메모리 확보와, GC 처리에서의 그 오브젝트에 대응하는 메모리의 해방을, MMU를 이용한 종래의 OS의 메모리 관리기구를 통해서 행한다. 이에 따라, 오브젝트에 대해서 확보되는 메모리영역은, Native 데이터, 즉, 예를 들어 C언어 등, 다른 언어에 의해 작성된 프로그램의 데이터에 대해서 확보되는 메모리영역과 논리어드레스 공간에서 혼재한다. 도 3에서는 이 혼재하는 이미지를 표현하고 있다.
이에 대해서, 종래의 Java 실행환경에 의해 관리된 Java 오브젝트와, 여기서는 C언어의 프로그램에서의 데이터(이하 「C 데이터」라 한다)와의 메모리에서의 존재상황을 나타내는 도면이 도 19이다.
도 19에 도시한 바와 같이, 각 C언어의 프로그램( 953, 954)은 C 데이터(921, 922) 용의 메모리영역을 OS의 메모리 관리기구를 통해서 랜덤 액세스 메모리 (RAM)(900) 내에 확보한다.
또, 각 Java 프로그램(951, 952)으로부터 생성되는 각 Java 오브젝트(911~913)는 하나의 히프영역(910) 내에 확보되며, 그 히프영역(910) 내에서의 배치의 관리는, OS에 의해서가 아니라, 불필요 데이터 수집기(950)를 포함하는 Java 실행환경에 의해서 이루어진다. 이 때문에, Java 실행환경은, 먼저 OS의 메모리 관리기구를 통해서 히프영역을 확보하고 있어서, 오브젝트를 생성할 때에는 그 히프영역 내의 한 영역을 그 오브젝트에 대해서 할당한다. 이 히프영역은 다른 언어의 프로그램이 이용할 수 있는 메모리의 양을 삭감시켜 버린다.
또, Java 실행환경은, 오브젝트를 해방하는 경우에는, 히프영역 내의 그 오브젝트에 할당되어 있었던 영역을 새로 오브젝트에 대해 할당할 수 있는 미사용영역으로서 관리하나, 히프영역 내에서 단편화한 모든 미사용영역을 연속시키기 위한 소위 메모리 압축(Memory Compaction)처리를 수시로 행할 필요가 있다.
또한, 이 점, 실시 예 1, 2에 제시한 본 발명의 GC시스템에서는, 히프영역의 확보 및 그 내부의 관리를 행하는 것이 아니라, 오브젝트에 대한 메모리 할당을 MMU를 이용한 종래의 OS의 메모리 관리기구를 통해서 직접적으로 행하고 있으므로, 당연히 히프영역 내의 메모리 압축 등은 불필요하게 된다.
4. 보충
이상, 본 발명의 GC시스템에 대하여 실시 예 1, 2에 의하여 설명하였으나, 본 발명은 물론 이들 실시 예에 한정되는 것은 아니다. 이하 실시 예의 변형에 대하여 설명한다.
⑴ 스레드 선정조건은, 스레드 상태, 스레드 우선도, 스택 사이즈라는 3개의 조건이 그 순서대로 우선 적용되는 것으로 하였으나, 각 조건이나 적용순서 등은 이에 한정되는 것이 아니며, 또, 예를 들어 스레드 우선도가 높은 것을 조건으로 하거나 스택 사이즈가 큰 것을 조건으로 해도 된다.
다만, 실시 예에서 제시한 바와 같이, 스레드 상태가 wait 상태인 AP스레드를 참조처리 대상으로 선정하는 것은 현재 동작하고 있는 AP에 대한 악영향이 적다는 효과와 연결된다. 또, 참조처리(도 12)의 알고리즘에 따라, 어떤 AP스레드에 대한 참조처리에 걸리는 시간은 참조처리를 먼저 행하는 AP스레드보다 후에 행하는 AP스레드 쪽이 비교적 짧으므로, 실시 예에서 제시한 바와 같이 스레드 우선도가 낮은 것을 먼저 참조처리 대상으로 선정하도록 해둠으로써, 즉응성이 요구되는 곳의 스레드 우선도가 높은 AP스레드의 정지시간을 짧게 할 수 있다는 효과가 발생한다. 또, 같은 이유와, 스택 사이즈가 클수록 참조처리에는 시간이 걸린다고 하는 이유에서, 대응하는 스택 사이즈가 작은 AP스레드로부터 순서대로 참조처리를 행하도록 함으로써, 동일한 어드레스 우선도의 AP스레드 사이에서 어느 정도 동일하게 되도록 AP스레드의 정지시간을 분산시킬 수 있다고 하는 효과가 발생된다.
⑵ 실시 예에서는 GC 제어처리가 타이머에 의거하여 일정 주기로 행해지는 것으로 하였으나, 이에 한정되는 것은 아니며, AP에 할당되는 빈 메모리의 양이 소정 양보다 적어진 경우에 GC처리를 행하도록 해도 된다.
⑶ 실시 예에 제시한 오브젝트 참조정보의 메모리영역은, 연속한 물리어드레스로 표시되는 메모리영역이라도 좋고, 오브젝트 포인터의 저장에 즈음하여 필요가 발생할 때마다 일정 양의 메모리영역을 추가로 확보하여, 그 확보한 복수의 단속적인 메모리영역을 논리어드레스 상에서 연속하고 있는 것으로 취급하는 것으로 해도 좋다.
⑷ 실시 예 1에 제시한 GC시스템에서는, 인터프리터에 의한 명령 실행처리 중에, GC 플래그가 온이면 오브젝트 포인터를 처리대상으로 한 때에 오브젝트 참조정보의 메모리영역에 그 오브젝트 포인터를 보존하는 처리를 행하여 두는 것으로 하고, 명령 실행처리 중에서는, 그 오브젝트 포인터와 같은 값의 것을 from 테이블에서 to 테이블로 옮기는 것을 내용으로 하는 참조처리를 행하지 않아서 인터프리터에 의한 명령실행의 고속성을 확보하도록 하였으나, 명령 실행처리 중에 그 참조처리를 행하는 것으로 해도 된다.
⑸ 실시 예에서는 공유 오브젝트 관리정보 내의 오브젝트 포인터로부터 도달할 수 있는 오브젝트에 대한 포인터는 참조처리에 의해서 from 테이블에서 to 테이블로 옮기는 것으로 하였으나, 참조처리를 행하지 않아도, 공유 오브젝트 관리정보에 의해서 관리되고 있는 오브젝트는 해방부에 의한 해방의 대상에서 제외되기만 하면 된다.
⑹ 실시 예에 제시한 GC시스템은, 컴퓨터상에 실장되는 것만이 아니라, CPU를 구비하는 휴대단말, 가전기기 등에서 실장되는 것으로 해도 된다.
⑺ 실시 예에서 제시한 스레드 제어부는, 미소 시간마다 각 스레드를 절환하여 실행함으로써 각 스레드를 병렬적으로 실행하는, 즉, 의사적으로 병렬실행하는 것으로 하였으나, 각 스레드를 멀티프로세서에서의 복수의 프로세서 엘리먼트에 의 해서 실제로 병렬로 실행하는 것으로 해도 된다.
⑻ 실시 예에서는, 오브젝트 생성부에 의해 생성되는 각 오브젝트는, 종래의 OS의 메모리 관리기구에 의해 각 Native 데이터와 동등하게, 논리어드레스 공간에 메모리가 할당되는 것인 것으로 하였으나, 각 오브젝트는 논리어드레스 공간에서 일체의 히프영역 내에 각각 메모리가 할당되도록 특별한 관리를 행하는 것으로 해도 된다. 이 특별관리는, 히프영역을 종래의 OS의 메모리 관리기구에 의해 확보하고, 오브젝트의 생성에 대응하여 그 내부의 미 할당영역을 각 오브젝트에 할당하며, 오브젝트의 해방에 대응하여 그 내부의 영역을 미 할당영역으로 정함으로써 실현된다. 이 특별관리를 하는 경우에, 히프영역 내에서 단편화한 모든 미 할당영역을 연속시키기 위한 소위 메모리 압축처리를 수시로 행할 필요가 있다. 또한, 이 점에서, 히프영역을 이용하는 방식은 상술한 「3. 고찰」에서 설명한 바와 같이 반드시 최적의 것은 아니다.
⑼ 실시 예에서 제시한 GC시스템은 종래의 OS의 메모리 관리기구를 포함하고 있는 것으로 하였으나, GC시스템의 외부에, 그 GC시스템의 기반 환경으로서, MMU를 이용하여 메모리를 관리하는 종래의 OS의 메모리 관리기구가 존재하는 것으로 하고, GC시스템은 메모리의 확보 및 해방을 그 외부의 메모리 관리기구를 통해서 행하는 것으로 해도 된다.
⑽ 실시 예에서 제시한 GC시스템의 각 기능을 실현시키기 위한 각종 처리(도 8~도 14, 도 17, 도 18 참조)를 CPU에 실행시키기 위한 프로그램을 기록매체에 기록하거나 또는 각종 통신로 등을 경유하여 유통시켜서 반포할 수 있다. 이와 같은 기록매체에는, IC카드, 광디스크, 플렉시블 디스크, ROM 등이 있다. 유통, 반포된 프로그램은 CPU를 구비하는 장치에서의 CPU에서 판독 가능한 메모리 등에 저장됨으로써 이용에 제공되고, 그 CPU가 그 프로그램을 실행함으로써 실시 예에서 제시된 GC시스템의 각 기능이 실현된다.
본 발명의 GC시스템은 애플리케이션 프로그램의 작성자에게 메모리영역의 확보나 해방을 의식하도록 하지 않는 Java 등의 오브젝트 지향의 프로그래밍 언어로 작성된 AP용의 컴퓨터상의 실행환경으로서 이용된다.

Claims (14)

  1. 복수의 스레드(thread)로 구성되는 오브젝트(object) 지향 프로그램의 실행과정에서 불필요하게 된 오브젝트에 대응하는 메모리영역을 해방하는 불필요 데이터 수집시스템(Garbage Collection System)으로서,
    복수 스레드 각각을 차례로 선택하는 선택수단과,
    선택된 스레드에 대하여, 당해 스레드의 실행을 정지하고, 당해 스레드로부터 오브젝트 포인터의 참조를 통하여 액세스 가능한 오브젝트를 검출하여 당해 검출한 오브젝트를 비 해방대상으로 관리하며, 당해 스레드의 실행을 재개하는 순서로 이루어지는 검사처리를 실시하는 검사수단과,
    상기 선택수단에 의한 상기 선택이 개시된 후에 있어서, 실행 중의 스레드에 의해 오브젝트 포인터가 처리대상이 된 것을 검지한 경우에는, 당해 오브젝트 포인터가 가리키는 오브젝트를 비 해방대상으로서 관리하는 검지수단과,
    상기 복수 스레드 모두에 대하여 상기 검사처리가 완료한 후에 있어서, 비 해방대상으로서 관리되고 있는 오브젝트 이외의 오브젝트에 대응하는 메모리영역을 해방하는 해방수단을 구비하는 것을 특징으로 하는 불필요 데이터 수집시스템.
  2. 제 1 항에 있어서,
    상기 검지수단은 실행 중인 스레드에 대해서 아직 검사처리가 이루어져 있지 않은 경우에 한하여 상기 검지를 행하고,
    상기 검지수단은,
    상기 검지를 한 경우에, 당해 실행중인 스레드에 처리대상이 된 오브젝트 포인터 및 당해 오브젝트 포인터로부터 도달할 수 있는 오브젝트 포인터 내의 오브젝트 포인터를 당해 스레드에 대응하는 작업용 메모리영역에 보존하는 검출부와,
    상기 검사수단에 의해 스레드의 실행이 정지되어 있는 동안에, 당해 스레드에 대응하는 작업용 메모리영역 내의 오브젝트 포인터로부터 도달할 수 있는 오브젝트를 비 해방대상으로서 관리하는 관리부를 갖는 것을 특징으로 하는 불필요 데이터 수집시스템.
  3. 제 2 항에 있어서,
    상기 검사처리는, 선택된 당해 스레드에 대응하는 스택 내의 오브젝트 포인터가 가리키는 오브젝트를, 상기 액세스 가능으로 검출한 때에 있어서, 검출한 당해 오브젝트가 이미 비 해방대상으로서 관리되고 있지 않고, 또한, 당해 오브젝트 내에 오브젝트 포인터가 있을 때에 한해, 당해 오브젝트 포인터가 가리키는 오브젝트를 상기 액세스 가능으로 더 검출하는 수순을 반복하여 행하는 것을 내용으로 하는 처리이고,
    상기 선택수단은, 최초의 선택 후는, 상기 검사수단에 의해 상기 검사처리가 이루어진 후에 있어서 상기 복수 스레드 중 상기 검사처리가 실시되어 있지 않은 스레드가 있는 한 계속적인 선택을 행하며,
    상기 선택수단은, 각 스레드에 관한 정보를 참조하여, 소정의 스레드 선정조 건에 의거하여 상기 선택을 행하는 것을 특징으로 하는 불필요 데이터 수집시스템.
  4. 제 3 항에 있어서,
    상기 스레드 선정조건은 스레드 상태가 wait 상태인 스레드를 스레드 상태가 wait 상태 이외인 스레드보다 조기에 선택하는 것을 나타내는 조건을 포함하며,
    상기 선택수단은, 상기 선택을 행하는 시점에서 wait 상태의 스레드가 있는 한, 당해 wait 상태의 스레드를 선택하는 것을 특징으로 하는 불필요 데이터 수집시스템.
  5. 제 4 항에 있어서,
    상기 스레드 선정조건은 스레드 우선도의 스레드 우선도가 낮은 스레드를 스레드 우선도가 높은 스레드보다 조기에 선택하는 것을 나타내는 조건을 포함하는 것을 특징으로 하는 불필요 데이터 수집시스템.
  6. 제 5 항에 있어서,
    상기 스레드 선정조건은 스레드에 대응하는 스택 사이즈가 작은 스레드를 스택 사이즈가 큰 스레드보다 조기에 선택하는 것을 나타내는 조건을 포함하는 것을 특징으로 하는 불필요 데이터 수집시스템.
  7. 제 6 항에 있어서,
    상기 불필요 데이터 수집시스템은, 메모리 관리유닛(MMU)를 이용하여 메모리를 관리하는 메모리 관리기구를 구비하고, 오브젝트를 생성할 필요가 있을 때마다, 상기 메모리 관리기구에 의해 당해 오브젝트에 대응하는 메모리영역을 확보하며,
    상기 해방수단은, 상기 메모리 관리기구를 거쳐서, 메모리영역의 해방을 행하는 것을 특징으로 하는 불필요 데이터 수집시스템.
  8. 제 3 항에 있어서,
    상기 스레드 선정조건은 스레드에 대응하는 스택 사이즈가 작은 스레드를 스택 사이즈가 큰 스레드보다 조기에 선택하는 것을 나타내는 조건을 포함하는 것을 특징으로 하는 불필요 데이터 수집시스템.
  9. 제 3 항에 있어서,
    상기 스레드 선정조건은 스레드 우선도의 스레드 우선도가 낮은 스레드를 스레드 우선도가 높은 스레드보다 조기에 선택하는 것을 나타내는 조건을 포함하는 것을 특징으로 하는 불필요 데이터 수집시스템.
  10. 제 1 항에 있어서,
    상기 불필요 데이터 수집시스템은, 메모리 관리유닛(MMU)를 이용하여 메모리를 관리하는 메모리 관리기구를 이용하는 것이고, 오브젝트를 생성할 필요가 있을 때마다, 상기 메모리 관리기구에 의해 당해 오브젝트에 대응하는 메모리영역을 확 보하며,
    상기 해방수단은, 상기 메모리 관리기구를 거쳐서, 메모리영역의 해방을 행하는 것을 특징으로 하는 불필요 데이터 수집시스템.
  11. 컴퓨터상에서 복수 스레드로 구성되는 오브젝트 지향 프로그램의 실행과정에서 불필요하게 된 오브젝트에 대응하는 메모리영역을 해방하는 불필요 데이터 수집방법(Garbage Collection Method)으로서,
    복수 스레드 각각을 차례로 선택하는 선택단계와,
    선택된 스레드에 대하여, 당해 스레드의 실행을 정지하고, 당해 스레드로부터 오브젝트 포인터의 참조를 통하여 액세스 가능한 오브젝트를 검출하여 당해 검출한 오브젝트를 비 해방대상으로 관리하며, 당해 스레드의 실행을 재개하는 순서로 이루어지는 검사처리를 실시하는 검사단계와,
    상기 선택단계에 의한 상기 선택이 개시된 후에 있어서, 실행 중의 스레드에 의해 오브젝트 포인터가 처리대상이 된 것을 검지한 경우에는, 당해 오브젝트 포인터가 가리키는 오브젝트를 비 해방대상으로서 관리하는 검지단계와,
    상기 복수 스레드 모두에 대하여 상기 검사처리가 완료한 후에 있어서, 비 해방대상으로서 관리되고 있는 오브젝트 이외의 오브젝트에 대응하는 메모리영역을 해방하는 해방단계를 포함하는 것을 특징으로 하는 불필요 데이터 수집방법.
  12. 제 11 항에 있어서,
    상기 컴퓨터는, 메모리 관리유닛(MMU)를 이용하여 메모리를 관리하는 메모리 관리기구를 이용하는 것으로서, 오브젝트 지향 프로그램의 실행과정에서 오브젝트를 생성할 필요가 있을 때마다, 상기 메모리 관리기구에 의해 당해 오브젝트에 대응하는 메모리영역을 확보하는 것이며,
    상기 해방단계는, 상기 메모리 관리기구를 거쳐서, 메모리영역의 해방을 행하는 것을 특징으로 하는 불필요 데이터 수집방법.
  13. 복수 스레드로 구성되는 오브젝트(object) 지향 프로그램의 실행과정에서 불필요하게 된 오브젝트에 대응하는 메모리영역을 해방하는 불필요 데이터 수집처리를 컴퓨터에 실행시키기 위한 컴퓨터 프로그램으로서,
    상기 불필요 데이터 수집처리는,
    복수 스레드 각각을 차례로 선택하는 선택단계와,
    선택된 스레드에 대하여, 당해 스레드의 실행을 정지하고, 당해 스레드로부터 오브젝트 포인터의 참조를 통하여 액세스 가능한 오브젝트를 검출하여 당해 검출한 오브젝트를 비 해방대상으로 관리하며, 당해 스레드의 실행을 재개하는 순서로 이루어지는 검사처리를 실시하는 검사단계와,
    상기 선택단계에 의한 상기 선택이 개시된 후에 있어서, 실행 중의 스레드에 의해 오브젝트 포인터가 처리대상이 된 것을 검지한 경우에는, 당해 오브젝트 포인터가 가리키는 오브젝트를 비 해방대상으로서 관리하는 검지단계와,
    상기 복수 스레드 모두에 대하여 상기 검사처리가 완료한 후에 있어서, 비 해방대상으로서 관리되고 있는 오브젝트 이외의 오브젝트에 대응하는 메모리영역을 해방하는 해방단계를 포함하는 것을 특징으로 하는 컴퓨터 프로그램.
  14. 제 13 항에 있어서,
    상기 컴퓨터는, 메모리 관리유닛(MMU)를 이용하여 메모리를 관리하는 메모리 관리기구를 이용하는 것으로서, 오브젝트 지향 프로그램의 실행과정에서 오브젝트를 생성할 필요가 있을 때마다, 상기 메모리 관리기구에 의해 당해 오브젝트에 대응하는 메모리영역을 확보하는 것이며,
    상기 해방단계는, 상기 메모리 관리기구를 거쳐서, 메모리영역의 해방을 행하는 것을 특징으로 하는 컴퓨터 프로그램.
KR1020057013843A 2003-06-30 2004-06-21 불필요 데이터 수집시스템 KR101004483B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2003187690 2003-06-30
JPJP-P-2003-00187690 2003-06-30

Publications (2)

Publication Number Publication Date
KR20060023950A true KR20060023950A (ko) 2006-03-15
KR101004483B1 KR101004483B1 (ko) 2010-12-31

Family

ID=33549730

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020057013843A KR101004483B1 (ko) 2003-06-30 2004-06-21 불필요 데이터 수집시스템

Country Status (8)

Country Link
US (1) US7395285B2 (ko)
EP (1) EP1659496B1 (ko)
JP (1) JP4569926B2 (ko)
KR (1) KR101004483B1 (ko)
CN (1) CN100437515C (ko)
AT (1) ATE479942T1 (ko)
DE (1) DE602004028945D1 (ko)
WO (1) WO2005001695A1 (ko)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US7600223B2 (en) * 2004-10-25 2009-10-06 Microsoft Corporation Abstracted managed code execution
JP4769946B2 (ja) * 2007-02-05 2011-09-07 国立大学法人京都大学 メモリ管理方法、メモリ管理装置、及びメモリ管理プログラムが記録されている記録媒体
CN101599039B (zh) * 2008-06-03 2011-11-02 华为技术有限公司 嵌入式c语言环境下异常处理方法及装置
US8316064B2 (en) 2008-08-25 2012-11-20 Emc Corporation Method and apparatus for managing data objects of a data storage system
US8291192B2 (en) * 2008-10-30 2012-10-16 Kyocera Document Solutions, Inc. Memory management system
US20100153675A1 (en) * 2008-12-12 2010-06-17 Microsoft Corporation Management of Native Memory Usage
CN101866298B (zh) * 2009-04-14 2013-08-07 上海科泰世纪科技有限公司 线程托管对象的方法
CN102209016B (zh) * 2010-03-29 2014-02-26 成都市华为赛门铁克科技有限公司 一种数据处理方法、装置和数据处理系统
CN101894049A (zh) * 2010-07-14 2010-11-24 中兴通讯股份有限公司 一种自适应回收垃圾对象的系统及方法
CN102023891A (zh) * 2010-12-20 2011-04-20 复旦大学 基于Java虚拟机的并发垃圾收集器框架
US8527560B2 (en) * 2011-03-29 2013-09-03 Microsoft Corporation Conservative garbage collecting with concurrent marking and concurrent sweeping for memory management
US9430164B1 (en) 2013-02-08 2016-08-30 Emc Corporation Memory efficient sanitization of a deduplicated storage system
US9317218B1 (en) 2013-02-08 2016-04-19 Emc Corporation Memory efficient sanitization of a deduplicated storage system using a perfect hash function
JP6078515B2 (ja) * 2014-11-13 2017-02-08 京セラドキュメントソリューションズ株式会社 電子機器およびプログラム
US9852046B1 (en) * 2015-05-07 2017-12-26 Cadence Design Systems, Inc. Method and system for automated debugging memory allocation and memory release
CN105739466B (zh) * 2016-02-29 2018-09-04 广西升禾环保科技股份有限公司 具有垃圾监控功能的用于卫生的运营作业系统
CN108459898B (zh) * 2017-02-20 2022-01-14 阿里巴巴集团控股有限公司 一种资源回收方法及装置
US10459656B1 (en) * 2018-06-25 2019-10-29 International Business Machines Corporation Method and apparatus to represent activation frame for pause-less garbage collection
WO2020237621A1 (en) * 2019-05-31 2020-12-03 Intel Corporation Avoidance of garbage collection in high performance memory management systems
CN113449316B (zh) * 2020-03-27 2023-07-18 武汉瓯越网视有限公司 一种程序的加密解密方法、装置和可读存储介质
US11580017B2 (en) * 2020-04-27 2023-02-14 Silicon Motion, Inc. Method and apparatus and computer program product for preparing logical-to-physical mapping information for host side

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5930807A (en) * 1997-04-23 1999-07-27 Sun Microsystems Apparatus and method for fast filtering read and write barrier operations in garbage collection system
JP3027845B2 (ja) * 1997-11-21 2000-04-04 オムロン株式会社 プログラム制御装置および方法
US6317756B1 (en) * 1998-10-07 2001-11-13 International Business Machines Corporation On-the-fly garbage collector
US6317119B1 (en) * 1998-11-13 2001-11-13 Creative Technology Ltd Speed-compensated joystick
GB9825102D0 (en) * 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US6763370B1 (en) * 1998-11-16 2004-07-13 Softricity, Inc. Method and apparatus for content protection in a secure content delivery system
SE9903890L (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
US6505275B1 (en) * 2000-07-24 2003-01-07 Sun Microsystems, Inc. Method for scalable memory efficient thread-local object allocation
US6745310B2 (en) * 2000-12-01 2004-06-01 Yan Chiew Chow Real time local and remote management of data files and directories and method of operating the same
US20030023655A1 (en) * 2001-07-26 2003-01-30 Stepan Sokolov Method and apparatus to facilitate suspending threads in a platform-independent virtual machine
KR100737345B1 (ko) * 2006-03-28 2007-07-09 한국전자통신연구원 점진적인 가비지 콜렉션 수행 시에 순환적 가비지의 회수방법 및 장치

Also Published As

Publication number Publication date
JPWO2005001695A1 (ja) 2006-08-10
JP4569926B2 (ja) 2010-10-27
EP1659496B1 (en) 2010-09-01
EP1659496A1 (en) 2006-05-24
US7395285B2 (en) 2008-07-01
CN100437515C (zh) 2008-11-26
KR101004483B1 (ko) 2010-12-31
ATE479942T1 (de) 2010-09-15
CN1761949A (zh) 2006-04-19
EP1659496A4 (en) 2008-11-26
WO2005001695A1 (ja) 2005-01-06
US20060074988A1 (en) 2006-04-06
DE602004028945D1 (de) 2010-10-14

Similar Documents

Publication Publication Date Title
KR101004483B1 (ko) 불필요 데이터 수집시스템
US6839726B2 (en) Apparatus, method, and program for implementing garbage collection suitable for real-time processing
JP3027845B2 (ja) プログラム制御装置および方法
US7779054B1 (en) Heuristic-based resumption of fully-young garbage collection intervals
US6192517B1 (en) Method, apparatus, and product for improved garbage collection in a memory system through the removal of reference conflicts
US7711920B2 (en) Method and system for dynamically managing storage of data objects generated during execution of a computer program
JP4265610B2 (ja) プログラム制御装置、プログラム制御方法、およびプログラム記録媒体
JP4756231B2 (ja) 掃除用のガーベッジコレクションの効果を高めるための方法、コンピュータ読み取り可能媒体、コンピュータシステム、及び、メモリ
US20180217779A1 (en) Multiple stage garbage collector
EP3577565B1 (en) Garbage collector
US8397045B2 (en) Memory management device, memory management method, and memory management program
US6681234B2 (en) Method and apparatus for storing long-lived objects in a virtual machine
US8966212B2 (en) Memory management method, computer system and computer readable medium
JP4333676B2 (ja) プログラム制御装置、プログラム制御方法、およびプログラム記録媒体
US8176286B2 (en) Memory recycling in computer systems
JP3826626B2 (ja) プログラム制御装置、プログラム制御方法、およびプログラム記録媒体
JP2004503869A (ja) モジュール式ガーベッジコレクタを実現するための方法および装置
JP4345748B2 (ja) メモリ割当装置、メモリ割当方法、およびプログラム記録媒体
EP3987402A1 (en) Arena-based memory management
Klemm et al. Latency reduction in software-dsms by means of dynamic function splicing
Choi et al. Protected heap sharing for memory-constrained java environments
KR20030094658A (ko) 자동화된 동적 메모리 관리 기반의 시스템 환경에서어플리케이션이 직접 동적 메모리를 관리하는 방법

Legal Events

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

Payment date: 20131202

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20141203

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20151118

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20161123

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20171114

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20181121

Year of fee payment: 9