KR100384905B1 - 컴퓨터 메모리에서 데이터 관리 방법, 장치 및 기록매체 - Google Patents

컴퓨터 메모리에서 데이터 관리 방법, 장치 및 기록매체 Download PDF

Info

Publication number
KR100384905B1
KR100384905B1 KR10-2000-0021291A KR20000021291A KR100384905B1 KR 100384905 B1 KR100384905 B1 KR 100384905B1 KR 20000021291 A KR20000021291 A KR 20000021291A KR 100384905 B1 KR100384905 B1 KR 100384905B1
Authority
KR
South Korea
Prior art keywords
data objects
data
access
objects
memory
Prior art date
Application number
KR10-2000-0021291A
Other languages
English (en)
Other versions
KR20010007010A (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 KR20010007010A publication Critical patent/KR20010007010A/ko
Application granted granted Critical
Publication of KR100384905B1 publication Critical patent/KR100384905B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/40Data acquisition and logging
    • 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
    • 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • 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/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computer Hardware Design (AREA)
  • Databases & Information Systems (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Devices For Executing Special Programs (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Memory System (AREA)

Abstract

본 발명은 데이터 객체들간의 액세스 관계를 기반으로(예를 들어, 시간적 근접성 및/또는 액세스의 상대적인 빈도를 근거로) 객체 힙(object heap)에서 데이터 객체들을 조직화하는 장치, 프로그램 제품 및 방법에 관한 것이다. 이렇게 하므로써, 서로 근접하게 연속해서 액세스되는 데이터 객체는 서로 동일한 페이지내에 위치될 가능성이 많고, 가능한 경우에 동일한 캐시라인내에 위치되기 싶다. 결과적으로, 이러한 객체를 액세스할 때, 다단계 메모리 구조(예를 들면, 특정한 구조에 적절한 특정 캐시 메모리 또는 가상 메모리 구조)내에서 메모리 교체(memory swapping)의 빈도를 종종 감소시키며, 결과적으로 시스템 성능을 전반적으로 개선시킨다.

Description

컴퓨터 메모리에서 데이터 관리 방법, 장치 및 기록매체{RELATION-BASED ORDERING OF OBJECTS IN AN OBJECT HEAP}
본 발명은 컴퓨터 및 컴퓨터 소프트웨어에 관한 것으로, 특히 객체 힙(object heap)에서의 객체 관리에 관한 것이다.
사용가능한 메모리를 관리하는 일은 컴퓨터와 같은 데이터 처리 시스템의 성능 및 신뢰성에 있어 상당히 중요하다. 특히, 컴퓨터 프로그램이 사용하는 데이터는 전형적으로 컴퓨터에서 제한된 어드레스 공간을 가지는 메모리내에 저장된다. 다수의 컴퓨터에서, 데이터는 "객체 힙"으로 지칭되는 메모리 부분의 공간에 할당되는 "객체"의 형태로 저장된다. 또한, 객체는 종종 다른 객체에 대한 "참조(reference)"(또한, 포인터로 알려짐)를 포함하여, 컴퓨터 프로그램은 또다른 객체로부터의 참조를 따르므로써 한 객체에서의 정보를 액세스할 수 있다. 각 컴퓨터는 전형적으로 그 자신의 객체 힙을 가지므로, 다수의 컴퓨터 프로그램이 컴퓨터에서 활성화되며, 다수의 객체 힙이 컴퓨터에서 유지관리될 수 있다.
컴퓨터 프로그램이 새로운 데이터를 사용할 때 마다, 메모리 "할당(allocating)"으로 알려진 처리를 사용하여 이 데이터를 위한 프리(free) 메모리 부분을 예약한다. 컴퓨터에서 사용가능한 메모리의 양이 제한되어 있다면, 컴퓨터에서 더이상 사용되지 않는 데이터를 위해 예약되어 있던 메모리를 자유롭게 하거나 혹은 "할당해제" 해주는 일이 중요하다. 그렇지 않은 경우, 사용가능한 메모리를 모두 사용함에 따라, 컴퓨터의 성능이 전형적으로 저하되거나 혹은 시스템 고장이 발생될 수 있다.
가베지 수집기(a garbage collector)로서 알려진 컴퓨터 프로그램은 종종, 컴퓨터에서 다른 컴퓨터 프로그램에 의해 할당되어 있는 미사용 메모리를 자유롭게 하는 데 사용된다. 종종, 가베지 수집기는 객체 힙(들)을 통해 주기적으로 스캔하고, 미사용 객체에 할당된 임의 메모리를 할당해제시키기 위해 다른 컴퓨터 프로그램과 동시에 실행된다. 컴퓨터에서 동시에 동작하는 상이한 컴퓨터 프로그램은 종종 서로 동시에 실행되는 하나 또는 그이상의 "스레드(threads)"를 포함한다. 또한, 상이한 컴퓨터 프로그램이 상이한 객체 힙을 사용할 때, 수집기 스레드로서 지칭되는 개별 가베지 수집기 컴퓨터 프로그램을 각 객체 힙을 관리하는 데 사용할 수 있다.
한 특정 유형의 가베지 수집기는 복사 가베지 수집기(a copying garbage collector)로서, 이는 객체 힙을 "프롬-스페이스" 파티션("from-space" partition)및 "투-스페이스" 파티션(to-space partition)으로 분할하고, 프롬-스페이스로부터 유효하며 현재 사용되는 객체를 투-스페이스에 복사하므로써 사실상 미사용 객체를 남겨두어 객체 힙을 관리한다. 복사 가베지 수집기의 특정 구현으로 객체 힙을 새로운 파티션 및 구 파티션으로 분할하는 세대 가베지 수집기(a generational gabage collector)가 있다. 세대 가베지 수집기는 보다 새로운 객체가 보다 오래된 객체보다 빈번히 "죽거나(die)" 혹은 사용이 중지되는 경향에 의존한다. 달리 말하면, 객체가 시간에 걸쳐 사용됨에 따라, 객체의 사용이 중지될 확률은 점점 적어진다.
세대 가베지 수집기는 객체 힙의 새로운 파티션에서 보다 새로운 객체를 통해 반복적으로 스캐닝하고, 더이상 사용되지 않는 객체에 대해 메모리를 폐기 및 할당해제시키고, 그리고, 임계 시간주기를 넘어서 살아있는 객체를 객체 힙의 구 파티션으로 이동시키므로써 객체 힙을 관리한다. 보다 구 객체가 보다 안정된 경향이 있다면, 전형적으로 객체 힙의 구 파티션을 스캐닝할 필요가 없다.
세대 가베지 수집기는 전형적으로 선형 방식으로 - 즉, 각 객체가 구 파티션으로 이동시키기 위한 표준을 만족시키는 차례대로 - 객체를 객체힙의 구 파티션에 저장한다. 마찬가지로, 객체 힙의 새로운 파티션에서의 객체는 전형적으로, 가베지 수집기에 의한 객체의 할당해제 및 이동, 그리고, 파티션에서 그다음 사용가능한 위치로의 새로운 객체 추가로 인해 새로운 파티션에 걸쳐 널리 분산된다.
세대 가베지 수집기에서와 같이, 다른 복사 가베지 수집기 구현은 또한 선형 방식으로 프롬-스페이스로부터 투-스페이스 객체를 복사한다. 그러나, 가베지 수집기와 다른 처리에 의해 발생되는 프롬-스페이스에서의 객체를 할당 및 초기 배치하므로써, 객체는 이들 복사 가베지 수집기 이행으로 프롬-스페이스에 걸쳐서도 널리 분산되는 경향이 있다.
객체 힙에 객체를 저장하는 통상적인 방식의 고유한 결과로 인해 컴퓨터 프로그램에 의해 사용되는 다양한 객체가 시간에 걸쳐 객체 힙을 통해 널리 분산될 수 있다. 그러나, 객체가 객체 힙에서 비교적 넓은 분산을 가지므로써 메모리 교체 문제(memory swapping concerns)로 인해 컴퓨터가 최적 이하의 성능을 가지게 된다.
특히, 대부분의 컴퓨터는 메모리 성능과 비용의 균형을 맞추기 위한 다단계 메모리 구조에 따른다. 대부분의 컴퓨터는 하나 또는 그이상의 레벨의 작은 용량 및, 보다 큰 용량이지만 비교적 저속인 주 메모리와 인터페이스하는 고속 캐시 메모리를 포함한다. 컴퓨터 프로그램이 데이터를 필요함에 따라, 데이터는 컴퓨터에서 프로세스에 의한 액세스를 위하여 주 메모리로부터 캐시 메모리로 복사된다. 데이터는 전형적으로 블럭 또는 "캐시 라인(cache lines)"으로 조직되는 데, 모든 데이터는 그룹으로 캐시내 및 캐시 밖으로 교체되는 특정한 캐시 라인으로 할당된다.
또한, 소정 컴퓨터는 주소지정가능한 메모리 공간이 주 메모리에서 사용가능한 물리적 저장소보다 큰 가상 메모리 방안을 구현한다. 캐싱과 유사하게, 가상 메모리 방안에서, 데이터는 페이지로 조직화되고, 데이터는 주 메모리와, 직접 액세스 저장 장치(DASD)와 같은 외부 저장 장치 사이에서 페이지 단위로(page-by-page) 교체된다.
다단계 메모리 구조의 주된 이점은 데이터를 보다 신속하게 액세스할 수 있도록 보다 빈번히 사용되는 데이터를 종종 보다 높은 단계의 메모리에서 유지관리하는 데 있다. 캐시 메모리로부터 액세스할 데이터가 캐시 메모리에 현재 저장되지 않은 캐시 라인으로 할당될 때 마다, 캐시 미스(cache miss)가 발생되고, 보다 낮은 단계의 메모리로부터 데이터를 검색해야 하므로 데이터의 검색이 보다 오래 걸린다. 유사하게, 주 메모리로부터 액세스할 데이터가 주 메모리에 현재 저장되지 않은 페이지로 할당될 때 마다, 페이지 폴트가 발생되고, 외부 저장소로부터 데이터를 교체해야 하므로 데이터의 검색은 여전히 오래 걸린다.
객체 힙은 전형적으로 다수의 캐시 라인을 차지하고, 많은 경우에 다수의 페이지를 차지한다. 결과적으로, 객체 힙에서 객체가 보다 넓게 분산된 경우, 객체 힙에서 상이한 위치에 위치된 객체를 연속적으로 액세스하기 위해서는 각 캐시 메모리 내, 가능하다면 주 메모리내의 상당한 양의 메모리 교체를 필요로 할 수 있다. 결과적으로, 객체 힙에 대한 액세스는 보다 오래 걸리며, 컴퓨터는 최고보다는 낮은 효율성으로 동작하게 된다.
따라서, 본 기술분야에서는 특히 가베지 수집 기법을 통해 객체 힙을 액세스할 시에 컴퓨터의 성능을 개선시키는 방식이 반드시 필요하다.
본 발명은 데이터 객체들간의 액세스 관계를 근거로 객체 힙에서 데이터 객체를 조직화하는 장치, 프로그램 제품 및 방법을 제공하므로써 종래 기술과 관련된 상기 및 다른 문제들을 해결한다. 이렇게 하므로써, 서로 밀접하게 연속적으로 액세스되는 데이터 객체는 서로 동일한 페이지내에, 가능하다면 동일한 캐시 라인내에 위치될 가능성이 보다 많다. 결과적으로, 이러한 객체를 액세스할 때, 다단계 메모리 구조(예를 들면, 특정한 구조를 위해 적절한 특정 캐시 메모리 또는 가상 메모리 구조)내에서 메모리 교체의 빈도가 종종 감소되어, 결국, 시스템의 성능이 전반적으로 개선된다.
예를 들면, 객체 그룹이 컴퓨터 프로그램의 실행동안 차례로 액세스될 때, 둘 또는 그이상의 데이터 객체들간의 액세스 관계는 적어도 일부분은 적당한 시간적 근접성(a likely temporal proximity)을 근거로 할 수 있다. 또한, 다수 데이터 객체들간의 액세스 관계는 적어도 일부분은 상이한 데이터의 액세스의 상대적인 빈도수를 근거로 할 수 있다. 당업자라면 본 명세서에 개시된 내용으로부터 액세스 관계를 정의하는 다른 방식을 명백히 알 수 있을 것이다.
본 발명의 일 특정한 실시예에서, 객체 힙에서 데이터 객체의순서화(ordering)는 컴퓨터 프로그램에 의해 사용되는 상이한 클래스의 데이터 객체에 대해 발생된 프로파일링된 액세스 정보(profiled access information)에 의존한다. 프로파일링은 컴퓨터 프로그램의 컴파일, 로딩 또는 실행동안을 포함해서 다수번 수행될 수 있다. 전형적으로, 데이터 객체에 대한 액세스의 수 및/또는, 데이터 객체가 액세스되는 순서와 같은 정보를 예견할 수 있으며, 이를 사용하여 객체 힙내의 데이터 객체를 순서화하는 방법을 결정할 수 있다.
본 발명을 특징짓는 상기 및 다른 이점 및 특징들은 첨부되어 본 명세서의 부분을 형성하는 특허청구의 범위에서 설명된다. 그러나, 본 발명 및, 이를 사용하여 얻어지는 장점 및 목적을 보다 잘 이해하기 위하여, 본 발명의 전형적인 실시예가 도시된 첨부된 도면을 참조해야 한다.
도 1은 본 발명에 따르는 통신망 컴퓨터 시스템의 블럭도,
도 2는 도 1의 통신망 컴퓨터 시스템으로부터 컴퓨터를 위한 전형적인 하드웨어 및 소프트웨어 환경을 도시한 블럭도,
도 3은 도 2의 환경에서의 소프트웨어 구성요소의 블럭도,
도 4a 및 도 4b는 도 3의 객체 액세스 프로파일링 루틴의 프로그램 흐름을 도시하는 흐름도,
도 5는 도 4a 및 도 4b의 객체 액세스 프로파일링 루틴에 의해 발생되는 전형적인 로드/저장 카운트 테이블의 블럭도,
도 6은 도 4a 및 도 4b의 객체 액세스 프로파일링에 의해 발생되는 전형적인 액세스 트리의 블럭도,
도 7은 전형적인 자바 클래스 파일의 블럭도,
도 8은 도 3의 가베지 수집 논리부에 의해 실행되는 수집기 스레드의 프로그램 흐름을 도시하는 흐름도,
도 9a 및 도 9b는 도 8에서 참조되는 루트 복사 루틴의 프로그램 흐름을 도시하는 흐름도,
도 10은 도 8에서 참조되는 파티션 교체 루틴의 프로그램 흐름을 도시하는 흐름도,
도 11은 도 8의 수집기 스레드의 실행동안의 전형적인 호출 스택을 도시하는 흐름도,
도 12a 내지 도 12c는 도 8의 수집기 스레드에 의해 동작되는 전형적인 객체 힙의 블럭도.
도면의 주요 부분에 대한 부호의 설명
31 : 프로세서 32 : 메모리
32a : 주 저장소 32b : 캐시 메모리
42 : 컴파일러 44 : 가상 머신
46 : 소스 코드 48 : 클래스 파일
몇몇 도면에서의 동일한 참조번호는 동일한 부분을 표시하며, 도 1은 본 발명에 따르는 컴퓨터 시스템(10)을 도시한다. 컴퓨터 시스템(10)은 통신망(18)을 통해 서버(16)(예를 들면, PC기반 서버, 미니컴퓨터, 미드레인지 컴퓨터, 대형 컴퓨터등)에 연결된 하나 또는 그이상의 클라이언트 컴퓨터(12, 14, 20)(예를 들면, 데스크탑 또는 PC기반 컴퓨터, 워크스테이션등)를 포함하는 통신망 컴퓨터 시스템으로서 도시된다. 통신망(18)은 사실상, 근거리, 광역, 무선 및 공용망(예를 들면, 인터넷)을 포함하지만 이들로 제한되지 않는 임의 유형의 통신망 상호접속을 나타낼 수 있다. 또한, 예를 들면, 다수의 서버와 같이, 임의 수의 컴퓨터 및 다른 장치가 통신망(18)을 통해 네트워킹될 수 있다.
컴퓨터(12, 14)일 수 있는 클라이언트 컴퓨터(20)는 많은 것들 중에서 중앙처리 장치(COU)(21), 컴퓨터 디스플레이(22), 저장 장치(23), 프린터(24) 및 각종 입력 장치(예를 들면, 마우스(26) 및 키보드(27))와 같은 다수의 주변 구성요소를 포함할 수 있다. 본 기술분야에 잘 알려진 바와 같이, 서버 컴퓨터(16)는 전형적으로 보다 나은 처리 성능 및 저장 용량을 가지지만 유사하게 구성될 수 있다.
도 2는 본 발명에 따르는 장치(30)에 대한 전형적인 하드웨어 및 소프트웨어 환경을 다른 방식으로 도시한다. 본 발명의 목적을 위하여, 장치(30)는 (예를 들면, 도 1의 컴퓨터(12, 14, 20)와 유사한) 클라이언트 컴퓨터, (예를 들면, 도 1의 서버(16)와 유사한) 서버 컴퓨터, 휴대용 컴퓨터, 내장 제어기등을 포함하는 임의 유형의 컴퓨터, 컴퓨터 시스템 또는 프로그램가능한 전자디바이스를 나타낼 수 있다. 장치(30)는 도 1에 도시된 통신망에서 연결되거나 혹은, 이 대신에 독립 디바이스일 수 있다. 이후로부터, 장치(30)를 "컴퓨터"로 지칭할 것이지만, 용어 "장치"는 본 발명에 따르는 다른 적당한 프로그램가능 전자 디바이스를 포함할 수 있다는 것을 알아야 할 것이다.
컴퓨터(30)는 메모리(32)에 연결된 적어도 하나의 프로세서(31)를 포함한다. 프로세서(31)는 하나 또는 그이상의 프로세서(예를 들면, 마이크로프로세서)를 나타낼 수 있고, 메모리(32)는 다양한 비휘발성 또는 백업 메모리(예를 들면, 프로그램가능 또는 플래시 메모리), 판독전용 메모리등 뿐만 아니라 예를 들어, 임의 액세스 메모리(RAM) 디바이스를 사용하여 구현된 주 저장소(32a), 그리고, 하나 또는그이상의 추가 레벨의 메모리, 예를 들면, (프로세서(31)에 외부이던지 혹은 내부인던지) 하나 또는 그이상 레벨의 캐시 메모리(32b)를 포함하는 다수의 알려진 다단계 메모리 구조중의 하나를 사용하여 구현될 수 있다. 본 기술분야에 알려진 바와 같이, 데이터는 주 저장소와 캐시 메모리 사이에 및/또는 캐시 메모리의 상이한 레벨들 사이에서 교체되며, 특정 레벨의 캐시에 상주하지 않은 데이터를 액세스함으로 인해 "캐시 미스" 및 다른 메모리 레벨로부터 필요한 데이터를 검색하는 것과 관련된 부가적인 지연이 있을 수 있다.
또한, 메모리(32)는 컴퓨터의 어느 곳에 물리적으로 위치된 메모리 저장소, 예를 들면, (전술한 바와 같이) 임의 캐시 메모리 또는, 프로세서(31)에서의 레지스터 뿐만 아니라, 예를 들면, 대용량 저장 장치(36) 또는 통신망(38)을 통해 컴퓨터에 연결된 또다른 컴퓨터상에 저장된 가상 메모리로 사용되는 임의 저장 용량을 포함하는 것으로 볼 수 있다. 본 기술분야에 알려진 바와 같이, 가상 메모리 구조인 경우, 데이터는 대용량 저장소와 주 저장소 사이에서 "페이지" 형태로 교체되는 데, 주 저장소에 상주하지 않는 데이터에 대한 액세스는 "페이지 폴트"를 일으키고, 외부 저장소로부터 필요한 데이터를 검색하는 것과 관련된 부가적인 지연이 발생한다.
또한, 컴퓨터(30)는 전형적으로 정보를 외부적으로 교류하기 위해 다수의 입력 및 출력을 가진다. 사용자 또는 오퍼레이터와의 인터페이스를 위하여, 컴퓨터(30)는 전형적으로 하나 또는 그이상의 입력장치(그중에서 예를 들면, 키보드, 마우스, 트랙볼, 조이스틱, 터치패드 및/또는 마이크로폰) 및 디스플레이(34)(예를 들면, 그중에서 예를 들면, CRT 모니터, LCD 디스플레이 패널 및/또는 스피커)를 포함한다. 그러나, 컴퓨터(30)의 소정 구현, 예를 들면, 소정의 서버 구현시에, 컴퓨터는 직접 사용자 입력 및 출력을 지원할 수 없다는 것을 이해해야 한다.
또한, 컴퓨터(30)는 하나 또는 그이상의 대용량 저장 장치(36), 그중에서 예를 들면, 플로피 또는 다른 착탈가능 디스크 드라이브, 하드 디스크 드라이브, 직접 액세스 저장 장치(DASD), 광 드라이브(예를 들면, CD 드라이브, DVD 드라이브등) 및/또는 테이프 드라이브를 포함할 수 있다. 게다가, 컴퓨터(30)는 하나 또는 그이상의 통신망(38)(그중에서 예를 들면, LAN, WAN, 무선 통신망 및/또는 인터넷) 과의 인터페이스를 포함하여, 통신망에 연결된 다른 컴퓨터와의 정보 교류를 할 수 있다. 본 기술분야에 잘 알려진 바와 같이, 컴퓨터(30)는 프로세서(31)와 각 구성요소(32, 33, 34, 36, 38)의 적당한 아날로그 및/또는 디지탈 인터페이스를 포함한다.
컴퓨터(30)는 운영체제(40)의 제어하에 동작하고, 각종 컴퓨터 소프트웨어 애플리케이션, 구성요소, 프로그램, 객체, 모듈, 데이터 구조등(그중에서 예를 들면, 컴파일러(42), 가상 머신(44), 소스 코드(46) 및 클래스 파일(48))을 실행하거나 아니면 의존한다. 게다가, 다양한 애플리케이션, 구성요소, 프로그램, 객체, 모듈등은 또한 예를 들어, 분산 또는 클라이언트-서버 컴퓨팅 환경에서 통신망(38)을 통해 컴퓨터(30)에 연결된 또다른 컴퓨터에서 하나 또는 그이상의 프로세서를 실행할 수 있으므로, 컴퓨터 프로그램의 기능을 구현하는 데 필요한 처리는 통신망을 통해 다수의 컴퓨터로 할당된다.
통상적으로, 본 발명의 실시예를 구현하기 위해 실행되는 루틴이 운영체제의 부분 또는 특정 애플리케이션, 구성요소, 프로그램, 객체 모듈 또는 인스트럭션열 부분으로서 구현될 때 마다 "컴퓨터 프로그램" 또는 단순히 "프로그램"으로 지칭할 것이다. 컴퓨터 프로그램은 전형적으로 컴퓨터의 각종 메모리 및 저장 장치에 다양한 횟수로 상주하고 컴퓨터의 하나 또는 그이상의 프로세서에 의해 판독 및 실행될 때 컴퓨터로 하여금 본 발명의 다양한 양상을 구현하는 단계 또는 요소를 실행하는 데 필요한 단계를 수행토록 만드는 하나 또는 그이상의 인스트럭션을 포함한다. 또한, 본 발명은 충분히 기능하는 컴퓨터 및 컴퓨터 시스템을 가지며, 이후로부터 이를 기술할 것이지만, 당업자라면 본 발명의 각종 실시예가 각종 형태로 프로그램 제품으로서 분산될 수 있으며, 본 발명은 실제로 분산을 수행하는 데 사용되는 특정 유형의 신호 보유 매체에 관계없이 동일하게 적용가능하다는 것을 이해해야 한다. 신호 보유 매체의 예는 그중에서 휘발성 및 비휘발성 메모리 장치, 플로피 및 다른 착탈가능 디스크, 하드 디스크 드라이브, 광 디스크(예를 들면, CD-ROM, DVD등), 디지탈 및 아날로그 통신 회선과 같은 전송 유형 매체를 포함한다.
또한, 이후로부터 기술되는 각종 프로그램은 본 발명의 특정 실시예에서 구현되는 애플리케이션을 기반으로 식별될 수 있다. 그러나, 특정 프로그램 목록은 단지 편리성을 위하여 사용되므로, 따라서, 본 발명은 이러한 목록에 의해 식별 및/또는 포함되는 특정 애플리케이션만으로 유일하게 제한되어서는 안된다는 것을이해해야 할 것이다.
당업자라면 도 1 및 도 2에 도시된 전형적인 환경이 본 발명을 제한하려는 것이 아님을 알 수 있을 것이다. 진실로, 당업자라면 본 발명의 범주를 벗어나지 않고서도 다른 대체 하드웨어 및/또는 소프트웨어 환경을 사용할 수 있음을 알 수 있을 것이다.
관계 기반의 객체 순서화
본 명세서에 기술된 실시예는 데이터 객체들간의 액세스 관계를 근거로 객체 힙에서의 데이터 객체들을 조직화하므로써 동작한다. 객체 힙은 컴퓨터 프로그램을 위한 작업 메모리를 나타내는 컴퓨터 메모리의 세그먼트, 전형적으로 메모리의 세그먼트는 컴퓨터 프로그램의 실행 동안에 데이터가 동적으로 할당, 사용 및 관리되는 메모리의 세그먼트를 포함할 수 있다. 전형적으로, 가베지 수집이 수행될 때 마다, 컴퓨터 프로그램과 동시에 실행될 수 있거나 혹은, 컴퓨터 프로그램의 실행을 중지시킬 수 있는 "스탑-더-월드(stop-the-world)" 수집기로서 동작할 수 있는 가베지 수집기가 객체 힙을 관리하지만 필수적인 것은 아니다. 본 발명에 따라서, 본 기술분야에 잘 알려진 각종 유형의 가베지 수집기를 사용할 수 있다.
둘 또는 그이상의 데이터 객체들 사이에 적어도 일부분은 데이터 객체에 대한 액세스의 적당한 시간적 근접성을 기반으로, 및/또는 적어도 일부분은 상이한 데이터 객체의 액세스의 상대적인 빈도를 기반으로, 본 명세서에 기술된 바와 같은 액세스 관계가 존재한다. 예를 들면, 두 객체들 사이에 부모(parent)-자식(child)관계가 존재할 때 마다, 즉, 한 객체(부모)가 다른 객체(자식) 메모리의 소정 부분을 액세스할 때 마다, 액세스 관계를 정의할 수 있다. 또한, 그다음, 자식들의 부모가 다른 객체일 지라도, 자식은 그들이 부모가 되는 곳에서 그 자신의 관계를 가질 수 있다. 본 명세서에 기술한 방식으로 객체들을 조직화하므로써, 단시간 프레임내에 액세스되는 객체가 메모리에서 동일한 조직화 블럭(예를 들면, 적절한 대로 캐시 라인 또는 가상 메모리 페이지)내에 있을 가능성이 증가하므로, 다단계 메모리 구조에서 캐시 미스 및/또는 페이지 폴트가 감소된다.
이후로부터 기술되는 소정 실시예에서, 동일한 액세스 체인내에 있는 다수의 데이터 객체(즉, 특정 루트 객체가 액세스 된 후에 다양한 순서로 참조되는 객체)는 이러한 그룹에서 객체들간의 시간적 근접성을 근거로 메모리에(예를 들면, 객체 힙에서 연속된 메모리 세그먼트내에) 함께 논리적으로 그룹화될 수 있다. 또한, 소정 실시예에서, 이러한 그룹내의 특정 객체는 상대적인 액세스 빈도 및/또는 객체가 액세스되는 순서를 근거로 서로에 대해 배치될 수 있다.
이후로부터 기술되는 특정 실시예는 선 마이크로시스템에 의해 개발된 자바 프로그래밍 환경에서 실행되는 컴퓨터 프로그램의 성능을 최적화할 시에 본 발명의 특정 애플리케이션에 관한 것이다. 그러나, 본 발명은 객체 힙을 이용하는 다른 객체지향 프로그래밍 환경에 적용될 수 있다는 것을 이해해야 한다. 또한, (객체지향 센스에서 "객체"로서 지칭되지 않을 때 조차) 모든 데이터가 객체로서 표현될 수 있는 경우, 본 발명은 또한 비객체지향 프로그래밍 환경에 적용될 수 있다. 따라서, 본 발명은 이후로부터 기술되는 특정 자바-기반의 구현으로 제한되지 않는 다.
도 3은 본 발명에 따르는 관계기반의 객체 순서화를 구현하기 위하여 도시된 실시예에서 사용되는 주 소프트웨어 구성요소를 도시한다. 특히, 도 3은 가상 머신(44)에 연결된 컴파일러(42)를 도시하는 데, 컴파일러는 입력으로서 소스 코드(46)를 수신하고 그에 응답하여 가상 머신(44)에 의해 실행될 수 있는 하나 또는 그이상의 클래스 파일(48)을 출력한다.
각 구성요소(42, 48)는 다양하게 알려진 자바 언어 명세와 호환될 수 있도록 구성된다. 소스 코드(46)는 인간이 판독가능한 자바 소스 코드 표현 형태인 컴퓨터 프로그램이다. 블럭(50)에 도시된 바와 같이, 컴파일러(42)는 자바 소스 코드(46)로부터 자바 컴퓨터 프로그램의 중간 표현을 나타내는 다수의 바이트코드(a plurarity of bytecodes)를 발생하는 데 이용된다.
발생된 바이트코드는 하나 이상의 클래스로 조직화되는데, 이 클래스는 가상 머신(44)에 의해 컴퓨터 프로그램의 실행 동안에 할당 및 이용될 객체에 대한 템플릿을 나타낸다. 클래스는 실행가능한 코드 및, 이러한 실행가능한 코드에 의존하는 데이터를 포함하는 클래스 파일로 조직화된다. 본 기술분야에 알려진 바와 같이, 클래스 파일은 또한 전형적으로 객체에 대한 다른 정보를 포함한다.
클래스는 일단 발생되면 클래스 검증 블럭(51)에 의해 처리되는데, 클래스 검증 블럭(51)은, 클래스에 에러가 없고 그리고 다양한 런타임 에러를 일으키지 않으며 자바 언어의 모든 보안 요건이 충족되도록, 클래스에 대해 각종 검증 및 분석 동작을 수행한다. 바이트코드 발생 및 클래스 검증은 잘 알려져 있으므로 여기서 더이상 상세히 설명할 필요가 없을 것이다.
클래스는 일단 검증되면 객체 액세스 프로파일링 블럭(52)으로 넘어가서, 본 발명에 따르는 방식으로 액세스 프로파일링이 수행된다. 특히, 클래스내에 정의된 실행가능한 코드의 시뮬레이션을 근거로 클래스에 대한 액세스 형태를 생성한다(이는 도 4a 및 도 4b를 참조하여 보다 상세히 후술할 것이다). 블럭(52)의 출력은 하나 또는 그이상의 클래스 파일(48)이다. 보다 상세히 후술하는 바와 같이, 이러한 클래스 파일은 그에 내장된 프로파일링된 액세스 정보를 포함할 수 있으나, 소정의 실시예에서는 프로파일링된 액세스 정보가 클래스 파일에 저장되지 않을 수 있어 블럭(52)에서 객체 액세스 프로파일링이 수행되지 않을 수도 있다.
클래스 파일은 일단 생성되면 차후의 실행을 위해 제 3 부분에 분산되거나 소정의 영구 매체에 저장될 수 있다. 가상 머신(44)은 특정한 컴퓨터 플랫폼상에서의 가설 마이크로프로세서의 동작을 본래 모방하는 자바 가상 머신(JVM)을 구현한다. 클래스 파일이 상이한 플랫폼상에서 실행될 수 있도록 상이한 가상 머신을 이용할 수 있다. 또한, 컴파일러(42) 및 가상 머신은 동일한 컴퓨터 시스템에 상주할 필요는 없다.
가상 머신(44)은 본 기술분야에 잘 알려진 방식으로 클래스 로더 구성요소를 사용하여 클래스 파일을 로딩한다. 또한, 클래스에 대한 프로파일링된 액세스 정보가 컴파일러에 의해 클래스 파일에 내장되지 않았던 경우에 이 정보를 얻기 위하여, 도시된 실시예에서 구성요소(54)는 로딩된 클래스 파일을 객체 액세스 프로파일링 블럭(56)으로 전달할 수 있다. 또한, 본 기술분야에 알려진 방식으로, 클래스 로더(54)는 자바 보안 규칙을 만족시키는 지를 확인하기 위해 부가적인 클래스검증을 수행할 수 있다.
컴퓨터 프로그램의 실행 동안에 작업 저장소를 제공하기 위하여, 가상 머신(44)은 "프롬" 파티션(60) 및 "투" 파티션(62)을 포함한 객체 힙(58)을 포함한다. 런타임 동안, 작업 저장소로 사용하기 위하여 프롬 파티션(60)에 데이터 저장소가 할당된다. 그후, (가베지 수집 논리부(70)에 의해 표현되는) 가베지 수집기는 주기적으로 프롬 파티션(60)"으로부터 투 파티션(62)"으로 도달가능한 객체를 복사하고, 이전의 투 파티션이 새로운 프롬 파티션이 되도록 프롬 파티션과 투 파티션을 교체하는 데, 역도 가능하다. 이러한 객체 힙 관리 알고리즘은 복사형 가베지 수집으로 알려져 있다. 그러나, 다른 객체 힙 관리 알고리즘을 사용할 수 있으므로, 다른 객체 힙 조직화를 또한 이용할 수 있다.
클래스 로더(54)에 의한 클래스 로딩에 응답하여, 각 바이트코드에 대해 각 가상 머신이 실행되는 플랫폼에 적절한 적당한 원래 코드를 발생하는 인터프리터(63)가 하나 또는 그이상의 스레드(64)를 실행한다. 따라서, 각 스레드는 상이한 매쏘드 호출(method calls)을 통해 일관성을 유지하기 위해 필요한 데이터를 유지관리하는 할당된 호출 스택(66)을 가진다. 또한, 참조번호(68)에 도시된 바와 같이, 런타임동안 필요한 경우에 부가적인 객체 액세스 프로파일링을 수행할 수 있다. 도시된 예에서는 복사형 가베지 수집기인 가베지 수집 논리부(70)가 객체 힙을 관리한다.
도 3에 도시된 바와 같이, 각 스레드는 단일 가베지 수집기 스레드에 의해 관리되는 객체 힙을 공유한다. 또한, 동일한 컴퓨터 시스템상에서 동시에 실행되는 다수의 컴퓨터 프로그램은 동일한 객체 힙을 공유할 수 있다. 그러나, 도시된 예에서 도면에는 도시되지 않았지만 부가적인 컴퓨터 프로그램에 개별 객체 힙( 및 관련된 가베지 수집기)이 할당된다.
가상 머신(44)에 의한 자바 바이트코드의 해석 및 실행은 본 기술분야에 잘 알려져 있다는 것을 알 수 있을 것이다. 다른 것들중에서 저스트-인-타임 컴파일(just-in-time compilation)을 포함한 가상 머신에 대한 부가적인 변형이 또한 가상 머신(44)에서 구현될 수 있다.
전술한 바와 같이, 본 발명에 따르는 객체 액세스 프로파일링은 예를 들어, (블럭(52)에 도시된) 컴파일동안, (블럭(56)에 도시된) 로딩동안 및/또는 (블럭(68)에 도시된) 실행동안에 컴퓨터 프로그램이 살아있을 때 다수 번 수행될 수 있다. 예를 들어, 가상 머신이 컴파일동안 객체 액세스 프로파일링에 대한 액세스를 가지지 않는 다른 컴퓨터 시스템에 의해 발생된 클래스 파일을 실행할 수 있다고 예견되는 경우에, 클래스 로딩동안에, 객체 액세스 프로파일링이 수행되어 적당한 액세스 정보가 발생되었는 지를 알기 위해 검사할 필요가 있을 수도 있지만, 전형적으로 프로파일링은 이러한 한 시간 주기에만 수행될 것이라는 것을 이해해야한다. 일반적으로, 컴퓨터 프로그램의 실행동안 성능 패널티를 최소화하기 위하여 예를 들어, 컴파일동안 또는 로딩동안에 프로세스에서 가능한 일찍 프로파일링을 수행하는 것이 보다 바람직하다.
도 4a 및 도 4b에는 본 발명에 따르는 객체 액세스 프로파일링을 수행하기 위한 하나의 적당한 루틴이 도시되어 있다. 도 4a에 도시된 바와 같이, 루틴(100)은 필요한 경우에 클래스를 검색하므로써 블럭(102)에서 시작한다. 전술한 바와 같이, 객체 액세스 프로파일링은 클래스 파일에 저장된 프로그램 코드의 실행동안 및/또는 이미 클래스가 로딩된 후에 수행될 수 있다. 이러한 경우에, 클래스의 검색이 반드시 필요한 것은 아니다.
다음, 블럭(104)에서, 로드/저장 카운트 테이블 및 액세스 순서 트리 데이터 구조를 초기화한다. 로드/저장 테이블은 로드 액세스 및 저장 액세스에 의해 분리되는, 클래스에서 참조된 각 객체에 대한 예견된 액세스의 카운트를 유지관리하는 데 사용된다. 예를 들면, 로드/저장 카운트 테이블을 위한 하나의 적당한 데이터 구조는 객체 ID 필드(78), 로드 카운트 필드(80) 및 저장 카운트 필드(82)를 각각 포함하는 다수의 엔트리(76)를 가지는 도 5의 참조번호(75)에 도시되어 있다. 객체 ID 필드(78)는 참조된 객체를 식별할 수 있는 고유 식별자를 포함한다. 프로파일링 정보를 근거로, 로드 카운트 필드(80)는 로드형 액세스(예를 들면, 자바에서 aload 및 get 필드 동작)의 수를 저장하고, 저장 카운트 필드(82)는 저장형 액세스(예를 들면, 자바에서 astore 및 put 필드)의 수를 저장한다. 전형적으로, 테이블(75)은 모든 엔트리의 데이터를 클리어시키므로써 초기화된다.
그 중에서도 링크된 리스트 및 해시 테이블을 포함하여, 소정의 클래스를 위한 로드 및 저장 액세스의 수를 나타내기 위해 다른 데이터 구조를 사용할 수 있다는 것을 이해해야 한다. 또한, 소정의 실시예에서, 로드 및 저장 액세스에 대한 개별 카운트를 유지관리할 필요가 없을 수도 있으므로, 로드 및 저장 카운트 필드(80, 82)는 동일한 필드로 결합될 수 있다는 것을 이해해야 한다. 더욱이, 보다 상세히 후술하는 바와 같이, 소정 객체에 대한 액세스 정보는 액세스 순서 트리 데이터 구조내에 유지관리될 수 있으므로, 테이블(75) 또는 동등한 데이터 구조가 필요없을 수도 있다.
도 6은 다수의 노드(88)가 의존하는 루트 노드 또는 객체(86)를 포함한 하나의 전형적인 액세스 순서 트리 데이터 구조(85)를 도시한다. 특정 매쏘드가 모든 객체를 참조한다는 명목하에, 루트 노드(86)는 트리에 대한 시작점을 나타낸다. 노드(88)는 일반적으로, 루트(86)에 의해 표현되는 특정 매쏘드내 필드 또는 참조된 객체를 나타낸다. 소정 노드(88)는 다른 노드(88)에 의해 참조될 수 있는 데, 이는 참조된 객체의 체인을 나타낸다. 예를 들면, 트리(85)에서 전형적인 클래스의 "this" 객체인 경우, "this 객체로부터 "table[]" 객체, "tempObject" 객체, 그다음, "next" 객체로의 호출 또는 액세스 체인이 도시되어 있는 데, 이것은 전형적인 클래스에 의해 정의된 객체의 실행동안에, "table[]", tempObject" 및 "next" 객체가 "this" 객체에 대한 참조에 바로 후속되는 순서로 참조된다는 것을 나타낸다.
각 노드내에는 호출 체인에서의 객체에 대한 객체 식별자가 단순히 저장될 수 있다. 다른 실시예에서, 각 노드내에 그 객체에 대한 액세스의 수를 나타내는 액세스 카운트를 포함하는 것이 바람직할 수 있다. 이러한 액세스 카운트는 로드 및 저장에 의해 분리되거나 혹은 함께 그룹화될 수 있다. 전술한 바와 같이, 이 정보는 개별 액세스 테이블을 사용하는 것에 대한 대안으로 노드에 저장될 수 있다.
또한, 각 트리는 전형적으로 그 클래스를 위해 정의된 각 매쏘드에 의해 참조되는 객체에 의해 분리된다. 이러한 경우에, 예를 들면, 매쏘드가 필드 노드를 분류할 수 있도록 루트 노드(86)와 각 필드 노드(88) 사이에 부가적인 노드를 삽입하는 것이 바람직할 수 있다. 또한, 예를 들어, 링크된 리스트등과 같은 다양한 데이터 구조를 사용하여 본 발명에 따르는 호출 트리를 나타낼 수 있다는 것을 이해해야 한다. 전형적으로, 액세스 순서 트리의 초기화는 이와 관련된 자식 노드를 가지지 않도록 루트 노드 객체를 초기화하는 것을 포함한다.
다시 도 4a를 참조하면, 일단 로드/저장 카운트 테이블 및 액세스 순서 트리를 초기화하면, 제어는 블럭(106)으로 넘어가서, 로드/저장 카운트 테이블을 구축하기 위하여 클래스에서 각 바이트코드를 분석하는 루프로 들어간다. 특히, 클래스에서 각 바이트코드에 대해, 제어는 블럭(108)으로 넘어가고, 여기서, 바이트코드가 새로운 객체상에서 동작하는 지의 여부를 결정한다-즉, 바이트코드가 로드/저장 카운트 테이블에 대응하는 엔트리를 가지지 않는 객체를 참조하는 지의 여부를 결정한다. 만약 그러하다면, 블럭(110)에서 새로운 엔트리에 객체 식별자를 저장하고 로드 및 저장 카운트를 0으로 초기화하는 것을 포함하여, 새로운 객체를 위해 로드/저장 카운트 테이블에 새로운 엔트리를 추가시킨다. 다음, 블럭(112)에서 바이트코드가 객체에 대한 로드 액세스를 수행하는 지의 여부를 결정한다. 또한, 블럭(108)으로 되돌아가 보면, 바이트코드가 새로운 객체상에서 동작하지 않는 경우에, 제어는 블럭(110)을 거치지 않고 직접 블럭(112)으로 넘어간다.
바이트코드가 객체에 대한 로드형 액세스를 수행하는 경우, 제어는 블럭(114)으로 넘어가서, 이 객체에 대한 로드 카운트를 증분시킨다-즉, 객체에 대응하는 엔트리의 로드 카운트 필드에 저장된 값을 1만큼 증가시킨다. 그후, 제어는 블럭(106)으로 넘어가 부가적인 바이트코드를 처리한다.
블럭(112)으로 되돌아가보면, 바이트코드가 객체에 대한 로드 액세스를 수행하지 않는 경우, 제어는 블럭(116)으로 넘어가서, 바이트코드가 객체에 대한 저장형 액세스를 수행하는 지의 여부를 결정한다. 그렇지 않은 경우, 더이상의 필요한 바이트코드의 처리가 발생되지 않으며, 제어는 블럭(106)으로 반환된다. 그러나, 바이트코드가 객체에 대한 저장 액세스를 수행하는 경우, 제어는 블럭(118)로 넘어가고, 이 객체를 위한 저장 카운트를 증분시킨 후, 제어는 블럭(106)으로 반환된다.
일단 클래스에서 모든 바이트코드가 처리되면, 블럭(106)은 제어를 도 4b에 도시된 블럭(120)으로 넘긴다. 블럭(120)은 클래스를 위한 액세스 순서 트리를 구축하기 위해 클래스에서 각 바이트코드를 처리하는 제2 루프를 시작한다.
각 바이트코드에 대해, 제어는 블럭(122)로 넘어가서, 시뮬레이션 스택을 사용하여 바이트코드를 검사한다. 특히, "시뮬레이션(simulated)" 호출 스택을 구축하기 위하여 바이트코드의 결과를 모의실험한다.
일단 시뮬레이션 스택을 사용하여 바이트코드를 검사한 경우, 제어는 블럭(122)으로 넘어가서, 바이트코드가 로드 또는 저장할 객체 참조를 사용하는 로드 또는 저장 동작인지의 여부를 결정한다-즉, 바이트코드가 로드 또는 저장 동작을 수행하기 위하여 여기서 "참조된 객체"로 지칭되는 또다른 객체를 액세스하는 지의 여부를 결정한다. 그렇지 않은 경우, 제어는 블럭(120)으로 넘어가서 부가적인 바이트코드를 처리한다.
그러나, 바이트코드가 객체 참조를 사용하는 로드 또는 저장 동작인 경우, 제어는 블럭(126)으로 넘어가고, 여기서, 이 참조된 객체를 로딩 또는 저장했던 이전 객체가 있는 지의 여부를 결정한다. 본 명세서에 사용되는 이전 객체는 질문시에 참조된 객체에 대한 액세스를 이루기 위해 미리 액세스된 객체를 나타낸다. 이와 같이, (이러한 객체가 존재한다면) 이전 객체와 참조된 객체 간에 호출 또는 액세스 체인을 정의한다.
먼저, 참조된 객체에 대한 이전 객체가 아직 존재하지 않는 경우에, 제어는 블럭(128)로 넘어가서, 참조된 객체가 이미 액세스 순서 트리에 있는 지의 여부를 결정한다. 참조된 객체가 액세스 순서 트리에 없는 경우, 참조된 객체를 위한 새로운 노드를 트리에 추가시키고, 제어는 블럭(132)으로 넘어가서 참조된 객체를 위한 액세스 카운트를 증분시킨다. 블럭(128)으로 되돌아가 보면, 객체가 이미 트리에 있는 경우에 새로운 노드를 추가시키지 않으며, 제어는 블럭(132)로 넘어가서, 참조된 객체를 위한 액세스 카운트를 증분시킨다.
전술한 바와 같이, 액세스 카운트는 트리의 각 노드내에서 유지관리될 수 있다. 이 대신에, 액세스 카운트 정보는 로드/저장 카운트 테이블에서 유지관리될 수 있으므로 블럭(132)가 필요없을 수도 있다.
참조된 객체를 위한 액세스 카운트를 증분한 후에, 제어는 블럭(134)으로 넘어가서, 바이트코드가 로드 동작인지의 여부를 결정한다. 바이트코드가 로드 동작이 아닌 경우, 제어는 블럭(120)으로 반환되어 부가적인 바이트코드를 처리한다.그러나, 바이트코드가 로드 동작인 경우, 제어는 먼저 블럭(136)으로 넘어가서, 이전 객체를 참조된 객체로 설정한다. 후속된 로드 또는 저장 동작을 위해 이전 객체로서 참조된 객체를 설정하기 위해 트리를 한 단계 아래로 순회한다. 그후, 제어는 블럭(120)으로 넘어가서, 부가적인 바이트코드를 처리한다.
이제 블럭(126)으로 돌아가 보면, 로드 또는 저장 동작을 위한 이전 객체가 존재하는 경우, 제어는 블럭(138)으로 넘어가서, 이전 객체에 대한 자식 리스트에 참조된 객체가 존재가 존재하는 지의 여부를 결정한다. 만약 존재한다면, 제어는 직접 블럭(132)로 넘어가서, 참조된 객체를 위한 액세스 카운트를 증분시킨다. 그러나, 자식 리스트에 참조된 객체가 존재하지 않는 경우, 제어는 먼저 블럭(140)으로 넘어가서, 이전 객체의 자식 리스트에 참조된 객체를 위한 노드를 추가시키는 데, 이는 참조된 객체가 이전 객체에 대한 액세스에 바로 후속하여 액세스되므로써 이전 객체와의 액세스 관계를 가진다는 것을 가리킨다.
일단 모든 바이트코드가 클래스에 대해 처리된다면, 클래스에 대하여 액세스 순서 트리 데이터 구조가 구성되는 데, 이로부터 클래스에서 어떤 객체가 어떤 순서로 액세스되는 지를 확인할 수 있다. 그후, 제어는 블럭(120)으로부터 블럭(142)으로 넘어가고, 여기서, 액세스 카운트를 근거로 각 노드의 자식들을 순서화한다. 특히, 각 노드에 대해, 이들 각 노드에 저장된 액세스 카운트를 근거로 자식들을 액세스 트리에서 순서화하는 데, 가장 높은 액세스 카운트를 가지는 자식이 먼저 배치되고, 다른 자식들은 액세스 카운트의 내림차순으로 후속하여 배치한다. 따라서, 순서화의 제2 단계는 보다 자주-순회하는 호출 또는 액세스 체인이서로에 대해 가능한 근접하게 저장되도록 보장하기 위해 부모 노드에 보다 자주 근접하게 액세스되는 자식 노드를 조직화한다.
일단 각 노드의 자식들을 전술한 방식으로 조직화한 경우, 제어는 블럭(144, 146)으로 넘어가서, 선택사양적으로 런타임동안 차후의 사용을 위해 클래스 파일에 최근-발생된 프로파일링 액세스를 저장한다. 그러나, 객체 액세스 프로파일링이 런타임에 수행되는 경우, 클래스 파일에 객체를 순서화하거나 또는 클래스 파일내에 액세스 정보를 저장할 필요가 없을 수도 있다는 것을 이해해야 한다. 이와 같이, 이들 환경에서는 블럭(144, 146)을 생략할 수 있다.
블럭(144)에서, 트리에서 고유한 액세스 정보를 사용하는 액세스 순서 트리에 따라서, 클래스 파일에서의 객체 참조를 순서화하므로써, (즉, 시간적 근접성을 가진) 특정한 체인 또는 시퀀스에서 액세스되는 객체에 대한 참조를 서로 근접하게 순서화하여 그룹을 형성하는 데, 이러한 그룹내의 객체(예를 들어, 동일 부모 객체에 종속되는 형제 객체(sibling objects))에 대한 참조는 상대적인 액세스 빈도에 의해 순서화된다. 이러한 유형의 순서화는 현재 처리중인 노드에 대해 남겨진 대부분의 미처리 자식으로서 클래스에 저장시킬 다음 노드를 순환적으로 선택하는 알고리즘을 통해 트리를 순회하므로써 단순히 수행될 수 있다는 것을 이해해야 한다.
결과적으로, 전술한 알고리즘을 사용하여 관련된 객체에 대한 참조를 서로 보다 근접하게 위치시키는 방식으로 클래스 파일 자체를 조직화한다. 그 결과, 이러한 방식으로 최적화된 클래스 파일을 런타임동안 객체 힙으로 로딩시키면 개선된 가베지 수집과 관련된 이득에 관계없이 객체 힙의 프롬 파티션내의 페이지 폴트 및/또는 캐시 미스를 감소시킬 수 있는 능력을 가지게 된다.
블럭(144)에서 일단 클래스에서 객체 참조를 순서화한 경우, 제어는 블럭(146)으로 넘어가서, 클래스 파일에 로드/저장 카운트 테이블 및 액세스 순서 트리를 저장한다. 그후, 프로파일링은 완료되고, 루틴(100)은 종료된다.
도 7은 도 3의 컴파일러(42)에 의해 출력되는 전형적인 자바 클래스 파일(150)을 도시하는 데, 이는 도 4a 및 도 4b의 루틴(100)에 의해 발생된 프로파일링된 액세스 정보를 포함한다. 클래스 파일(150)은 자바의 "이식성(portability)" (JVM(자바 가상 머신)을 지원하는 플랫폼의 하부 구조에 관계없이 적합한 자바 가상 머신으로써 어떤 시스템상에서도 실행시킬 수 있는 능력)을 가능하게 하는 자바 클래스의 표준 외부 표현이다. "매직(MAgic)" 데이터 필드(152)는 파일을 자바 클래스 파일로서 식별할 수 있게 하는 특정한 임의 비트열이다. 비트열은 파일을 자바 클래스 파일로서 확인할 수 있도록 16진수값 OxCAFEBABE를 가져야 한다. 또한, "부 버전(minor version)" 및 "주 버전(major version)"은 클래스 파일의 버전을 식별한다.
"상수 풀(Constant pool)" 데이터 필드(159)는 가변 길이의 엔트리 리스트를 정의하는 데, 상수 풀의 크기는 "상수 풀 카운트" 데이터 필드(158)에 의해 식별된다. 각 엔트리는 클래스 파일의 어느 곳에 사용되는 상수 또는 외부 참조를 나타낸다. 상수 풀의 사용으로 클래스 파일내의 다수의 요구를 서비스하기 위한 값의 단일 발생이 가능하다.
"액세스 플래그" 데이터 필드(160)는 클래스 파일에 의해 표현되는 클래스의기본 특성의 일부를 정의하는 데, 다른 클래스로부터 이 클래스를 참조하는 데 필요한 권한을 포함한다. "디스 클래스(this class)" 데이터 필드(162)는 디스 클래스의 이름을 포함하는 엔트리의 상수 풀에 대한 인덱스이고, "수퍼클래스" 데이터 필드(164)는 디스 플래스의 수퍼클래스의 이름을 포함하는 엔트리의 상수 풀에 대한 인덱스이다.
"인터페이스" 데이터 필드(167)는 디스 클래스가 구현되는 인터페이스의 이름을 식별하는 상수 풀 인덱스 값의 리스트를 정의하는 데, 크기는 "인터페이스 카운트" 데이터 필드(166)에 의해 식별된다. 인터페이스는 "다중 상속성(multiple inheritance)"이 다른 객체지향 언어에 제공하는 동일한 기능의 일부를 성취하도록 자바에 사용된다.
"필드" 데이터 필드(169)는 디스 클래스의 필드를 기술하는 가변 길이의 엔트리 리스트를 정의하는 데, 크기는 "필드 카운트" 데이터 필드(168)에 의해 식별된다. 필드의 이름, 제공되는 곳, 그들의 초기화 값은 상수 풀에 대한 인덱스로서 나타난다.
"매쏘드" 데이터 필드(171)는 디스 클래스의 매쏘드를 기술하는 가변 길이의 엔트리 리스트를 정의하는 데, 크기는 "매쏘드 카운트" 데이터 필드9170)에 의해 식별된다. 필드의 이름은 상수 풀에 대한 인덱스로서 표현된다. 각 매쏘드에 대한 실제 해석가능한 코드(즉, 바이트코드 집합)가 그의 매쏘드 엔트리의 단부에 추가된다.
"속성(attribute)" 데이터 필드(173)는 클래스의 다른 특성에 대한 저장소를정의하는 데, 크기는 "속성 카운트" 데이터 필드(172)에 의해 식별된다.
클래스에 의해 참조되는 객체에 대한 참조는 필드 데이터 필드(169)에 저장되고, 참조가 도 4b의 블럭(144)에 관해 전술한 방식으로 조직화되는 이 데이터 필드내에 있다. 클래스에 대한 프로파일링된 액세스 정보는 전형적으로 클래스 파일의 속성 필드(173)내에 저장되고, 도 7의 테이블(75) 및 액세스 순서 트리(85)의 배치에 의해 표현된다.
도 8은 가베지 수집 논리부(70)(도 3)에 의해 실행되는 수집기 스레드(200)를 도시한다. 일반적으로, 블럭(202)에서 수집기 스레드를 초기화하는 데, 이는 전형적으로 메모리에서 객체 힙의 할당을 포함한다. 다음 블럭(204)에서, 수집기 스레드는 예를 들면, 타이머의 종료, 사용가능한 메모리가 사전결정된 임계치 아래로 감소등과 같은 트리거링 사건(triggering events)을 기다리는 데, 이는 가베지 수집 분야에서 잘 알려져 있다.
일단 트리거링 사건이 발생되면, 블럭(206)에서 수집 사이클을 초기화한다. 그후, 객체 힙의 프롬 파티션으로부터 투 파티션으로 모든 도달가능한 객체들을 복사하기 위해 복사 루트 루틴(208)을 실행한다. 다음, 투 파티션으로 복사된 객체가 본질적으로 프롬 파티션으로 "반환되도록(return)" 투 파티션과 프롬 파티션을 교체하기 위해 파티션 교체 루틴(210)을 실행한다. 그 결과, 새로운 객체가 이전의 프롬 파티션으로 복사됨에 따라, 루틴(208)에서 투 파티션으로 복사된 객체를 다음 가베지 수집 사이클에서 사실상 버릴 것이다.
도 9a 및 도 9b는 본 발명에 따르는 방식으로 관계기반의 객체 순서화를 구현시에 루트 복사 루틴(208)의 동작을 도시한다. 도 9a에 도시된 바와 같이, 루틴(208)은 블럭(212)에서, 프로파일링된 액세스 정보가 객체 힙을 이용하는 컴퓨터 프로그램에서 각 클래스에 대해 사용가능한 지를 확인하기 위한 루프를 개시한다. 이러한 각 클래스에 대하여, 제어는 블럭(212)으로 부터 블럭(214)으로 넘어가고, 여기서, 루틴(100)에서 클래스 파일이 전술한 바와 같이 발생된 프로파일링된 액세스 정보를 포함하는 지의 여부를 결정한다. 만약 포함하는 경우, 더이상의 클래스 처리가 발생되지 않고, 제어는 블럭(212)로 반환되어 부가적인 클래스를 처리한다.
그러나, 만약 사용가능한 이러한 액세스 정보가 없다면, 이 클래스에 대하여 객체 액세스 프로파일링 루틴(100)을 호출하고, 후속적인 블럭(216)에서 상대적인 액세스 빈도를 근거로 클래스 객체 참조 필드를 재순서화한다. 그후, 제어는 블럭(212)로 반환되어 부가적인 클래스를 처리한다.
일단 모든 클래스가 처리되면, 각 클래스에 대한 프로파일링된 액세스 정보를 가베지 수집기에 사용할 수 있다. 그후, 제어는 블럭(218)으로 넘어가서, 호출 스택에 현재 배치된 객체 참조를 처리하기 위한 루프를 개시한다. 전술한 바와 같이, 호출 스택은 전형적으로 컴퓨터 프로그램에서 하나 또는 그이상의 매쏘드를 실행하는 동안 이용되는 객체에 대한 참조를 포함한다. 컴퓨터 프로그램이 매쏘드를 호출할 때 마다, 이 매쏘드가 사용할 매개변수는 이러한 매개변수를 포함하는 호출 스택상에 엔트리를 푸시(push)하므로써 이 매쏘드로 전달된다. 또한, 일단 호출된 매쏘드가 종료한다면 프로그램이 재개시할 수 있도록, 호출 매쏘드에 대한 반환 정보가 엔트리에 추가된다. 호출된 매쏘드가 종료하거나 혹은 완료될 때 마다, 그의 엔트리는 호출 스택으로부터 팝(pop)되고, 정보는 호출 매쏘드로 반환된다. 호출 스택의 사용 및 동작은 본 기술분야에 잘 알려져 있다.
블럭(218)은 특히, 현재 호출 스택상의 각 객체 참조를 호출 또는 클래스 체인에서 볼 수 있는 모든 객체를 포함하는 "순서" 리스트와, 모든 다른 객체에 대한 "고아" 리스트("orphaned" list)의 두 리스트 중의 한 리스트로, 정렬하기 위한 FOR 루프를 개시한다. 따라서, 이러한 각 참조에 대해, 제어는 블럭(220)으로 넘어가서, 그 객체 참조에 대한 참조된 객체가 그 클래스에 대한 액세스 순서 트리에 있는 지의 여부를 결정한다.
만약 참조된 객체가 액세스 순서 트리에 있는 경우, 제어는 블럭(222)으로 넘어가서, 참조된 객체를 "순서" 리스트에 추가시킨다. 만약 참조된 객체가 액세스 순서 트리에 없는 경우, 블럭(224)에서 참조된 객체를 "고아" 리스트에 추가시킨다. 일단 모든 객체가 이런 방식으로 처리되면, 블럭(218)은 제어를 블럭(226, 228)으로 넘기고, 여기서, 각 리스트에서의 객체들을 개별적으로 처리한다.
블럭(226)은 액세스 순서 트리에 의해 정의된 액세스 순서대로 "순서" 리스트의 각 객체에 의해 참조되는 객체를 투 파티션으로 복사하는 식으로, "순서" 리스트의 객체를 처리한다. 또한, 이때, 전위 포인터(a forwarding pointer)를 프롬 파티션의 각 원래 객체에 추가시켜, 투 파티션의 이 객체의 새로운 사본을 가리키게 한다. 결과적으로, 프롬 파티션에서의 객체의 구 사본에 대한 참조는 단순히 전위 포인터를 따르므로써 객체의 새로운 사본을 위치시킬 수 있다.
"고아" 리스트에서의 객체에 대하여, 블럭(228)은 각 객체를 투 파티션으로 복사하고, 프롬 파티션에서의 객체의 원래 사본에 전위 포인터를 추가시킨다. "고아" 리스트에서의 객체가 액세스 순서 트린상에 제공되지 않으므로, 이러한 객체의 특정한 조직을 사용하지 않는 다.
블럭(226, 228)이 완료시에, 호출 스택상의 객체 참조의 처리가 완료되고, 제어는 블럭 도9b의 블럭(230)으로 넘어가서, 객체 힙에서 모든 정적 객체를 처리하기 위한 루프를 개시한다. 본 기술분야에 알려진 바와 같이, 정적 객체는 전형적으로 전체적으로 액세스가능한 객체이다.
블럭(230)은 각 정적 객체를 처리하기 위한 루프를 시작한다. 이러한 각 객체에 대하여, 제어는 블럭(232)로 넘어가서, 이 정적 객체에서 각 참조를 처리한다. 이러한 각 참조에 대하여, 제어는 블럭(234)로 넘어가서, 이 참조에 의해 참조된 객체가 투 파티션으로 이미 복사되었는 지의 여부를 결정한다. 만약 이미 복사된 경우, 제어는 블럭(232)로 넘어가서, 정적 객체에서 부가적인 참조를 처리한다. 그러나, 만약 참조된 객체가 투 파티션에 없는 경우, 제어는 블럭(236)으로 넘어가서, 참조된 객체를 투 파티션으로 복사하고, 투 파티션에서 새로운 사본을 가리키는 프롬 파티션에서의 원래 사본에 전위 포인터를 추가시킨다. 그후, 제어는 블럭(232)로 반환되어 부가적인 참조를 처리한다.
일단 블럭(232)에서 현 정적 객체에서 모든 참조가 처리되면, 제어는 블럭(230)으로 넘어가서, 전술한 방식으로 부가적인 정적 객체를 처리한다. 그후, 일단 모든 정적 객체가 처리되면, 블럭(230)은 제어를 블럭(238)으로 넘기고, 여기서, 투 파티션에서 도달가능한 객체에 의해 참조된 모든 객체가 투 파티션으로 복사된다.
특히, 블럭(238)은 객체에서 각 참조를 처리하기 위해 블럭(240)으로 제어를 넘기므로써 투 파티션에서의 각 객체를 처리한다. 이러한 각 참조에 대해, 제어는 블럭(242)로 넘어가고, 여기서, 참조된 객체가 프롬 파티션에 있는 지의 여부를 결정한다. 만약 없는 경우, 제어는 블럭(240)으로 반환되어, 현재 처리중인 객체에서의 부가적인 참조를 처리한다. 그러나, 만약 참조된 객체가 여전히 프롬 파티션에 있는 경우, 제어는 블럭(244)으로 넘어가서, 참조된 객체가 현재 전위 포인터를 가지는 지의 여부를 결정한다.
만약 참조된 객체가 전위 포인터를 가지지 않는 경우, 참조된 객체는 아직 투 파티션으로 복사되지 않았으므로, 블럭(246)에서 참조된 객체를 투 파티션으로 복사하고 프롬 파티션에서의 원래 사본에 전위 포인터를 추가시킨다. 그후, 제어는 블럭(240)으로 반환되어, 객체에서 부가적인 참조를 처리한다.
그러나, 만약 참조된 객체가 전위 포인터를 가지는 경우, 참조된 객체는 이미 투 파이션으로 복사되었으므로, 블럭(248)에서 현재 처리중인 객체에서의 참조를 전위 포인터에 저장된 값으로써 대체한다. 본래, 이 동작은 투 파티션에서 객체의 새로운 사본을 가리키도록 참조를 갱신한다. 그후, 제어는 블럭(240)으로 반환되어 객체에서 부가적인 참조를 처리한다.
일단 현재 처리중인 객체에서 모든 참조가 처리되면, 블럭(240)은 제어를 블럭(238)으로 넘기고, 여기서, 투 파티션에서의 부가적인 객체를 처리한다. 또한,일단 투 파이션에서의 모든 이러한 객체가 복사되면, 가베지 수집 사이클의 복사 단계가 완료되고, 루틴(200)은 종료된다.
도 10은 파티션 교체 루틴(210)을 보다 상세히 도시한다. 전술한 바와 같이, 루트 복사 루틴이 완료시에, 객체 힙에서 모든 도달가능한 객체가 투 파티션으로 복사되었다. 따라서, 루틴(210)은 먼저 블럭(250)에서, 프롬 파티션 및 투 파티션에 대한 포인터를 교체하는 데, 수집기 스레드의 다음 사이클동안에 사용하기 위해 모든 도달가능한 객체를 새로이 형성된 프롬 파티션으로 반환한다. (새로운 사본에대한 전위 포인터를 여전히 포함하는) 도달가능한 객체의 원래 사본뿐만 아니라 도달할 수 없는 모든 객체는 현재 새로운 투 파티션으로 할당된 공간에 남아있다. 원하는 경우에 새로운 투 파이션을 클리어할 수 있는 반면에, 전형적으로 이 단계는, 수집기 스레드의 다음 사이클이 이 파티션에 여전히 남아있는 임의 정보를 단순히 중복기록하므로 생략될 수 있다.
블럭(250)에서 일단 포인터가 교체되면, 제어는 블럭(252)으로 넘어가서, 전위 포인터를 사용하기 위해 모든 참조를 갱신한다. 특히, 전위 포인터와 관련된 값을 저장하기 위해 전위 포인터를 가지는 객체를 가리키는 모든 참조를 갱신하는 데, 본래 프롬 파티션으로 현재 할당된 공간에 새로운 사본을 가리키도록 참조를 갱신한다. 블럭(252)이 완료시에, 객체 힙을 수집하고, 수집기 스레드의 현 사이클이 완료된다. 따라서, 도 8에 도시된 바와 같이, 제어는 블럭(204)로 넘어가서 수집기 스레드의 다음 사이클을 위해 트리거링 사건을 기다린다.
전술한 특정한 실시예의 동작을 설명하기 위하여, 아래의 표 Ⅰ은 "Hashtable"로 명명된 클래스의 구성요소가 제공되며, 다수의 "HashtableElement" 객체를 가지는 대표적인 자바 언어 매쏘드 "containKey"를 보여준다:
아래의 표 Ⅱ는 표 Ⅰ에 도시된 매쏘드의 컴파일동안 발생되는 대표적인 바이트코드를 보여준다:
전술한 객체 코드를 근거로, 도 4a 및 도 4b의 루틴(100)의 실행 및은 도 5의 테이블(75)과 같은 로드/저장 테이블을 생성하는 데, 이 테이블에 도시된 데이터는 "table[]" 객체가 (바이트코드 오프셋 1, 14, 19에서) 3번 참조되고, "tempObject" 객체는 (바이트코드 오프셋 28 및 51에서) 2번 참조되고, "this", "value", "next" 및 "key" 객체는 (제각기 바이트코드 오프셋 0, 5, 39에서) 한번 참조되었음을 나타낸다. 유사하게, 루틴(100)은 도 6의 트리(85)와 같은 액세스 순서 트리를 생성하는 데, 이 트리는 매쏘드에서 참조되는 각종 객체의 상대적인 액세스 순서를 가리킨다.
이제 도 12a 내지 도 12c를 참조하면, 객체가 할당되는 순서를 근거로, 프롬 파티션은 "Hashtable" 객체(306), "table[]" 객체(308), 한 쌍의 "HashtableElement" 객체(310, 312) 및, "HashtableElement" 객체에 의해 참조되는 한 쌍의 객체(314, 316)를 가질 수 있다. 도 12a에 도시된 바와 같이, 이들 객체는 (318)로서 표시된 부가적인 객체가 산재해 있는 프롬 파티션(302)내에 널리 분산될 수 있다.
이제 도 12b를 참조하면, (도 9a의 블럭(218)에서 시작하는) 프롬 파티션(302)으로부터 투 파티션(304)로 객체를 복사한 결과가 도시되어 있으므로, (기초적으로 표기된) 사본은 "Hashtanle" 객체(306), "table[]" 객체(308), "HashtableElement" 객체(310, 312) 및, 객체(314, 316)으로 만들어 진다. 객체 사본은 투 파티션으로 함께 패킹되고, 사본 순서는 폭 우선 순서화(breadth first ordering)를 기반으로 할 수 있다(또한, 깊이 우선 순서화(depth first ordering)를 사용할 수 있다). 프롬 파티션에서 객체에 전위 포인터를 추가시키므로써, 투 파티션에서 사본에 대한 참조를 유지관리한다는 것에 주목해야 한다. 또한, 참조번호(318)로 표시된 고아 객체는 투 파티션으로 복사되지 않으므로, 파티션이 교체될 때 버려진다.
이제 도 12c를 참조하면, 특히 루틴(208)의 블럭(238)로부터 시작하는 도 9b와 관련하여 전술한 바와 같이 객체내에 포함된 참조를 클리닝한다. 파티션의 교체시에, 그후, 투 파티션(304)는 다음 가베지 수집 사이클을 위해 프롬 파티션이 된다.
본 발명의 사상 및 범주를 벗어나지 않고서도 본 발명에 부가적인 변경을 행할 수 있다. 따라서, 본 발명은 첨부된 특허청구의 범위에 따른다.
본 발명은 데이터 객체들간의 액세스 관계를 근거로 객체 힙에서 데이터 객체를 조직화하는 장치, 프로그램 제품 및 방법을 제공하므로써 종래 기술과 관련된 상기 및 다른 문제들을 해결한다. 이렇게 하므로써, 서로 밀접하게 연속적으로 액세스되는 데이터 객체는 서로 동일한 페이지내에, 가능하다면 동일한 캐시 라인내에 위치될 가능성이 보다 많다. 결과적으로, 이러한 객체를 액세스할 때, 다단계 메모리 구조(예를 들면, 특정한 구조를 위해 적절한 특정 캐시 메모리 또는 가상 메모리 구조)내에서 메모리 교체의 빈도가 종종 감소되어, 결국, 시스템의 성능이 전반적으로 개선된다.

Claims (33)

  1. 컴퓨터 메모리에서 데이터를 관리하는 방법으로서,
    컴퓨터 프로그램에 응답하여 액세스되는 다수의 데이터 객체를 객체 힙(an object heap)에 저장하는 단계와,
    상기 컴퓨터 프로그램의 컴파일 및 로딩의 적어도 하나의 단계 동안 상기 다수의 데이터 객체 중의 제 1 데이터 객체와 제 2 데이터 객체 사이에 액세스 관계가 존재하는 지를 결정하는 단계와,
    상기 제 1 및 제 2 데이터 객체 중의 적어도 하나가 액세스될 때 메모리 교체(memory swapping)가 요구될 가능성을 감소시키기 위해, 상기 액세스 관계에 기반하여 상기 컴퓨터 프로그램의 실행 동안 객체 힙 내에 상기 제 1 및 제 2 데이터 객체를 배치하는 단계를 포함하는
    컴퓨터 메모리의 데이터 관리 방법.
  2. 삭제
  3. 제 1 항에 있어서,
    상기 제 1 및 제 2 데이터 객체 간에 액세스 관계가 존재하는 지를 결정하는 단계는, 상기 제 1 및 제 2 데이터 객체들에 대한 액세스들간의 적당한 시간적 근접성(a likely temporal proximity)을 결정하는 단계를 포함하는 컴퓨터 메모리의 데이터 관리 방법.
  4. 제 3 항에 있어서,
    상기 제 1 및 제 2 데이터 객체 간에 액세스 관계가 존재하는 지를 결정하는 단계는, 상기 제 1 및 제 2 데이터 객체가 차례대로 액세스될 것 같은 지를 결정하는 단계를 포함하는 컴퓨터 메모리의 데이터 관리 방법.
  5. 제 1 항에 있어서,
    상기 제 1 및 제 2 데이터 객체 간에 액세스 관계가 존재하는 지를 결정하는 단계는, 상기 제 1 및 제 2 데이터 객체에 대한 상대적인 액세스 빈도를 결정하는 단계를 포함하는 컴퓨터 메모리의 데이터 관리 방법.
  6. 삭제
  7. 제 1 항에 있어서,
    상기 제 1 및 제 2 데이터 객체 간에 액세스 관계가 존재하는 지를 결정하는 단계는, 프로파일링된 액세스 정보를 발생하기 위해 적어도 컴퓨터 프로그램의 일부분의 실행을 시뮬레이션하는 단계를 포함하는 컴퓨터 메모리의 데이터 관리 방법.
  8. 제 7 항에 있어서,
    상기 프로파일링된 액세스 정보는 상기 제 1 및 제 2 데이터 객체에 대한 액세스 순서를 나타내는 액세스 순서 트리를 포함하는 컴퓨터 메모리의 데이터 관리 방법.
  9. 제 8 항에 있어서,
    상기 프로파일링된 액세스 정보는 상기 제 1 및 제 2 데이터 객체에 대한 액세스 카운트를 더 포함하는 컴퓨터 메모리의 데이터 관리 방법.
  10. 제 7 항에 있어서,
    상기 프로파일링된 액세스 정보를 상기 컴퓨터 프로그램과 관련시키는 단계를 더 포함하는 컴퓨터 메모리의 데이터 관리 방법.
  11. 제 10 항에 있어서,
    상기 프로파일링된 액세스 정보를 상기 컴퓨터 프로그램과 관련시키는 단계는, 상기 컴퓨터 프로그램에 대한 실행가능한 코드와 동일한 파일에 상기 프로파일링된 액세스 정보를 저장하는 단계를 포함하는 컴퓨터 메모리의 데이터 관리 방법.
  12. 컴퓨터 메모리에서 데이터를 관리하는 방법으로서,
    다수의 데이터 객체를 객체 힙(an object heap)에 저장하는 단계와,
    상기 객체 힙 내의 제 1 및 제 2 데이터 객체 중의 적어도 하나가 액세스될 때 메모리 교체(memory swapping)가 요구될 가능성을 감소시키기 위해, 상기 데이터 객체 간의 액세스 관계에 기반하여 상기 객체 힙 내의 적어도 상기 제 1 및 제 2 데이터 객체를 배치하는 단계를 포함하며,
    상기 제 1 및 제 2 데이터 객체는 다수의 데이터 객체들중에 있으며,
    상기 객체 힙 내의 적어도 상기 제 1 및 제 2 데이터 객체를 그들간의 액세스 관계를 기반으로 배치하는 단계는, 데이터 객체의 부집합을 상기 이 데이터 객체의 부집합에서의 각 데이터 객체들간의 액세스 관계를 기반으로 상기 객체 힙에서의 객체 그룹으로 함께 그룹화하는 단계를 포함하는 컴퓨터 메모리의 데이터 관리 방법.
  13. 제 12 항에 있어서,
    상기 데이터 객체의 부집합을 함께 그룹화하는 단계는, 상기 데이터 객체의 부집합에서의 상기 데이터 객체를 메모리의 인접한 세그먼트에 저장하는 단계를 포함하는 컴퓨터 메모리의 데이터 관리 방법.
  14. 제 13 항에 있어서,
    상기 데이터 객체들의 상대적인 액세스 빈도에 적어도 일부분 기반하여 상기 객체 그룹내의 상기 데이터 객체들을 배치하는 단계를 더 포함하는 컴퓨터 메모리의 데이터 관리 방법.
  15. 제 13 항에 있어서,
    상기 데이터 객체가 액세스될 것같은 순서에 적어도 일부분 기반하여 상기 객체 그룹내의 상기 데이터 객체들을 배치하는 단계를 더 포함하는 컴퓨터 메모리의 데이터 관리 방법.
  16. 제 1 항에 있어서,
    상기 객체 힙에 상기 다수의 데이터 객체를 저장하는 단계는, 각 데이터 객체를 위하여 상기 객체 힙에서의 공간을 할당하는 단계를 포함하는 컴퓨터 메모리의 데이터 관리 방법.
  17. 컴퓨터 메모리에서 데이터를 관리하는 방법으로서,
    다수의 데이터 객체를 객체 힙(an object heap)에 저장하는 단계와,
    상기 객체 힙 내의 제 1 및 제 2 데이터 객체 중의 적어도 하나가 액세스될 때 메모리 교체(memory swapping)가 요구될 가능성을 감소시키기 위해, 상기 데이터 객체 간의 액세스 관계에 기반하여 상기 객체 힙 내의 적어도 상기 제 1 및 제 2 데이터 객체를 배치하는 단계를 포함하며,
    상기 객체 힙 내에 상기 다수의 데이터 객체를 저장하는 단계는, 각각의 데이터 객체에 대해 객체 힙 내의 공간을 할당하는 단계를 포함하며,
    상기 객체 힙은 프롬 파티션(From partition) 및 투 파티션(To partition)으로 분할되고,
    상기 객체 힙에 상기 다수의 데이터 객체를 저장하는 단계는, 컴퓨터 프로그램의 실행동안 상기 제 1 및 제 2 데이터 객체를 상기 프롬 파티션에 동적으로 저장하는 단계를 포함하고,
    상기 제 1 및 제 2 데이터 객체를 상기 객체 힙에 배치하는 단계는, 상기 액세스 관계에 기반하여 사전결정된 순서대로 상기 프롬 파티션으로부터 상기 투 파티션으로 복사하는 단계를 포함하는
    컴퓨터 메모리의 데이터 관리 방법.
  18. 제 17 항에 있어서,
    상기 객체 힙에 상기 제 1 및 제 2 데이터 객체를 배치하는 단계는, 가베지 수집기(a garbage collector)에 의해 이따금 수행되고,
    상기 방법은 상기 객체 힙에 상기 제 1 및 제 2 데이터 객체를 배치한 후에 상기 프롬 파티션과 투 파티션을 교체하는 단계를 더 포함하는 컴퓨터 메모리의 데이터 관리 방법.
  19. 제 17 항에 있어서,
    상기 데이터 객체는 자바 가상 머신에 의한 자바 클래스 파일의 실행에 응답하여 액세스되는 컴퓨터 메모리의 데이터 관리 방법.
  20. 제 19 항에 있어서,
    상기 제 1 및 제 2 데이터 객체는 상기 자바 가상 머신에서 호출 스택상의 액세스 체인에서 차례대로 참조되고,
    상기 객체 힙에 상기 제 1 및 제 2 데이터 객체를 배치하는 단계는, 상기 제 1 및 제 2 데이터 객체가 차례대로 참조되는 지를 결정하는 단계에 응답하여 메모리의 인접한 세그먼트에 상기 제 1 및 제 2 데이터 객체를 서로 옆에 배치하는 단계를 포함하는 컴퓨터 메모리의 데이터 관리 방법.
  21. 제 19 항에 있어서,
    상기 제 1 및 제 2 데이터 객체는 클래스 파일에 정의된 제 3 데이터 객체에 의해 참조되고,
    상기 방법은, 상기 제 1 및 제 2 데이터 객체들 간의 액세스 관계에 기반하여 상기 클래스 파일내에 상기 제 1 데이터 객체에 대한 제 1 참조 및 상기 제 2 데이터 객체에 대한 제 2 참조를 배치하는 단계를 더 포함하는 컴퓨터 메모리의 데이터 관리 방법.
  22. 컴퓨터 메모리에서의 데이터 관리 방법으로서,
    참조 데이터 객체에 의해 참조되는 다수의 참조된 데이터 객체의 각각에 대한 액세스의 상대적인 빈도를 결정하는 단계와,
    상기 상대적인 액세스 빈도에 기반하여 상기 다수의 참조된 데이터 객체를 객체 힙에 배치하는 단계
    를 포함하는 컴퓨터 메모리의 데이터 관리 방법.
  23. 메모리와,
    상기 메모리에 상주하며, 다수의 데이터 객체를 저장하기 위해 구성되는 객체 힙과,
    상기 메모리에 상주하며, 상기 객체 힙 내의 제 1 및 제 2 데이터 객체 중의 적어도 하나가 액세스될 때 메모리 교체(memory swapping)가 요구될 가능성을 감소시키기 위해, 상기 데이터 객체 간의 액세스 관계에 기반하여 상기 객체 힙 내의 적어도 상기 제 1 및 제 2 데이터 객체를 배치하도록 구성되는 프로그램을 포함하며,
    상기 프로그램은 또한 상기 제 1 및 제 2 데이터 객체에 대한 상대적인 액세스 빈도를 결정함으로써 상기 제 1 및 제 2 데이터 객체 간에 액세스 관계가 존재하는지를 결정하도록 구성되는
    장치.
  24. 제 23 항에 있어서,
    상기 프로그램은 또한 상기 제 1 및 제 2 데이터 객체에 대한 액세스들 간의 적당한 시간적 근접성을 추가로 결정함으로써 상기 제 1 및 제 2 데이터 객체들 간의 액세스 관계가 존재하는지를 결정하도록 구성되는 장치.
  25. 삭제
  26. 제 23 항에 있어서,
    상기 프로그램은 제 2 프로그램에 대한 프로파일링된 액세스 정보를 발생하기 위해 적어도 상기 제 2 프로그램의 일부의 실행을 시뮬레이션하도록 구성된 제 1 프로그램을 포함하는 장치.
  27. 제 26 항에 있어서,
    상기 제 1 프로그램은 또한 상기 제 2 프로그램에 대한 실행가능한 코드와 동일한 파일에 상기 프로파일링된 정보를 저장하도록 구성되는 장치.
  28. 제 23 항에 있어서,
    상기 제 1 및 제 2 데이터 객체는 다수의 데이터 객체들중에 있으며,
    상기 프로그램은 또한 데이터 객체의 부집합에서의 각 데이터 객체들간의 액세스 관계에 기반하여 상기 데이터 객체의 부집합을 상기 객체 힙에서 메모리의 인접한 세그먼트로 함께 그룹화하도록 구성되는 장치.
  29. 제 28 항에 있어서,
    상기 프로그램은 또한 상기 객체 힙에서 데이터 객체가 액세스될 것 같은 순서 및, 상기 객체 힙에서 상기 데이터 객체에 대한 적어도 하나의 상대적인 액세스 빈도에 적어도 일부분 기반하여 상기 객체 그룹내에 상기 데이터 객체들을 배치하도록 구성되는 장치.
  30. 제 23 항에 있어서,
    상기 객체 힙은 프롬 파티션 및 투 파티션으로 분할되고,
    상기 프로그램은 액세스 관계에 기반하여 사전결정된 순서대로 상기 프롬 파티션으로부터 상기 투 파티션으로 데이터 객체를 복사하도록 구성되는 장치.
  31. 제 23 항에 있어서,
    상기 데이터 객체는 자바 가상 머신에 의한 자바 클래스 파일의 실행에 응답하여 액세스되는 장치.
  32. 제 1 항, 제 3 항 내지 제 5 항, 제 7 항 내지 제 22 항 중 어느 한 항에 기재된 방법을 수행하는 컴퓨터 프로그램을 포함하는 기록매체.
  33. 삭제
KR10-2000-0021291A 1999-04-23 2000-04-21 컴퓨터 메모리에서 데이터 관리 방법, 장치 및 기록매체 KR100384905B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/298,123 US6480862B1 (en) 1999-04-23 1999-04-23 Relation-based ordering of objects in an object heap
US09/298,123 1999-04-23

Publications (2)

Publication Number Publication Date
KR20010007010A KR20010007010A (ko) 2001-01-26
KR100384905B1 true KR100384905B1 (ko) 2003-05-22

Family

ID=23149150

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2000-0021291A KR100384905B1 (ko) 1999-04-23 2000-04-21 컴퓨터 메모리에서 데이터 관리 방법, 장치 및 기록매체

Country Status (3)

Country Link
US (1) US6480862B1 (ko)
JP (1) JP3659317B2 (ko)
KR (1) KR100384905B1 (ko)

Families Citing this family (75)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB9825102D0 (en) * 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US6629112B1 (en) * 1998-12-31 2003-09-30 Nortel Networks Limited Resource management for CORBA-based applications
US8065504B2 (en) 1999-01-28 2011-11-22 Ati International Srl Using on-chip and off-chip look-up tables indexed by instruction address to control instruction execution in a processor
US7111290B1 (en) 1999-01-28 2006-09-19 Ati International Srl Profiling program execution to identify frequently-executed portions and to assist binary translation
US8127121B2 (en) 1999-01-28 2012-02-28 Ati Technologies Ulc Apparatus for executing programs for a first computer architechture on a computer of a second architechture
US7013456B1 (en) * 1999-01-28 2006-03-14 Ati International Srl Profiling execution of computer programs
US7941647B2 (en) 1999-01-28 2011-05-10 Ati Technologies Ulc Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination
US8074055B1 (en) 1999-01-28 2011-12-06 Ati Technologies Ulc Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code
US6826748B1 (en) 1999-01-28 2004-11-30 Ati International Srl Profiling program execution into registers of a computer
US6954923B1 (en) 1999-01-28 2005-10-11 Ati International Srl Recording classification of instructions executed by a computer
US6779107B1 (en) 1999-05-28 2004-08-17 Ati International Srl Computer execution by opportunistic adaptation
US6594678B1 (en) * 2000-01-05 2003-07-15 Sun Microsystems, Inc. Methods and apparatus for improving locality of reference through memory management
US6823351B1 (en) * 2000-05-15 2004-11-23 Sun Microsystems, Inc. Work-stealing queues for parallel garbage collection
US7487152B1 (en) * 2000-05-31 2009-02-03 International Business Machines Corporation Method for efficiently locking resources of a global data repository
US6934755B1 (en) 2000-06-02 2005-08-23 Sun Microsystems, Inc. System and method for migrating processes on a network
US6763440B1 (en) * 2000-06-02 2004-07-13 Sun Microsystems, Inc. Garbage collection using nursery regions for new objects in a virtual heap
US6760815B1 (en) * 2000-06-02 2004-07-06 Sun Microsystems, Inc. Caching mechanism for a virtual heap
US6854115B1 (en) * 2000-06-02 2005-02-08 Sun Microsystems, Inc. Process persistence in a virtual machine
US6865585B1 (en) * 2000-07-31 2005-03-08 Microsoft Corporation Method and system for multiprocessor garbage collection
US6959440B1 (en) * 2000-08-02 2005-10-25 Intel Corporation Dynamic removal of a driver stack when a parent driver uses a child driver
US6757890B1 (en) * 2000-12-28 2004-06-29 Sun Microsystems, Inc. Methods and apparatus for enabling local Java object allocation and collection
US6820101B2 (en) * 2000-12-28 2004-11-16 Sun Microsystems, Inc. Methods and apparatus for optimizing garbage collection using separate heaps of memory for storing local objects and non-local objects
GB0107921D0 (en) * 2001-03-30 2001-05-23 Ibm Computer system with multiple heaps and heap reset facility
US7017152B2 (en) * 2001-04-06 2006-03-21 Appmind Software Ab Method of detecting lost objects in a software system
US6959430B2 (en) * 2001-05-09 2005-10-25 Sun Microsystems, Inc. Specialized heaps for creation of objects in object-oriented environments
US7103887B2 (en) * 2001-06-27 2006-09-05 Sun Microsystems, Inc. Load-balancing queues employing LIFO/FIFO work stealing
US6934741B2 (en) * 2001-06-27 2005-08-23 Sun Microsystems, Inc. Globally distributed load balancing
US7072911B1 (en) * 2001-07-27 2006-07-04 Novell, Inc. System and method for incremental replication of changes in a state based distributed database
US7113980B2 (en) 2001-09-06 2006-09-26 Bea Systems, Inc. Exactly once JMS communication
US7398531B2 (en) * 2002-05-07 2008-07-08 Oracle International Corporation Providing common memory management code to objects that are instances of different classes
US7076511B1 (en) * 2002-05-07 2006-07-11 Oracle International Corporation Simplified deallocation of memory for programming objects
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
US7424498B1 (en) 2003-06-30 2008-09-09 Data Domain, Inc. Probabilistic summary data structure based encoding for garbage collection
US7451168B1 (en) 2003-06-30 2008-11-11 Data Domain, Inc. Incremental garbage collection of data in a secondary storage
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
US7519639B2 (en) * 2004-01-05 2009-04-14 International Business Machines Corporation Method and apparatus for dynamic incremental defragmentation of memory
US20050203919A1 (en) * 2004-03-09 2005-09-15 Deutsch L. P. Method and apparatus for reordering an arbitrary order signal sequence into a streamable signal sequence
US9092558B2 (en) * 2004-04-05 2015-07-28 International Business Machines Corporation Grouping frequently referenced data items to co-locate for cache utilization
US7412465B2 (en) * 2004-04-06 2008-08-12 International Business Machines Corporation Method for append mode insertion of rows into tables in database management systems
US7769974B2 (en) * 2004-09-10 2010-08-03 Microsoft Corporation Increasing data locality of recently accessed resources
JP4719859B2 (ja) * 2004-09-14 2011-07-06 国立大学法人京都大学 データ処理方法、データ処理装置及びコンピュータプログラム
US7406597B2 (en) * 2004-10-29 2008-07-29 International Business Machines Corporation Methods for efficiently authenticating multiple objects based on access patterns
US8452938B1 (en) * 2004-12-30 2013-05-28 Azul Systems, Inc. Garbage collection with memory quick release
US7870265B2 (en) * 2005-06-30 2011-01-11 Oracle International Corporation System and method for managing communications sessions in a network
CN101346634B (zh) * 2005-11-04 2012-10-24 甲骨文国际公司 用于通信网络中的网守的系统和方法
US7895223B2 (en) * 2005-11-29 2011-02-22 Cisco Technology, Inc. Generating search results based on determined relationships between data objects and user connections to identified destinations
US8001250B2 (en) * 2006-05-16 2011-08-16 Oracle International Corporation SIP and HTTP convergence in network computing environments
US8112525B2 (en) * 2006-05-16 2012-02-07 Oracle International Corporation Engine near cache for reducing latency in a telecommunications environment
US8171466B2 (en) * 2006-05-16 2012-05-01 Oracle International Corporation Hitless application upgrade for SIP server architecture
US8219697B2 (en) * 2006-05-17 2012-07-10 Oracle International Corporation Diameter protocol and SH interface support for SIP server architecture
US20080005520A1 (en) * 2006-06-09 2008-01-03 Siegwart David K Locality with parallel hierarchical copying garbage collection
US20080086567A1 (en) * 2006-10-10 2008-04-10 Bea Systems, Inc. SIP server architecture for improving latency in message processing
US7661027B2 (en) * 2006-10-10 2010-02-09 Bea Systems, Inc. SIP server architecture fault tolerance and failover
US20080148241A1 (en) * 2006-10-11 2008-06-19 Scott Thomas Jones Method and apparatus for profiling heap objects
US20080147551A1 (en) * 2006-12-13 2008-06-19 Bea Systems, Inc. System and Method for a SIP Server with Online Charging
US9667430B2 (en) * 2006-12-13 2017-05-30 Oracle International Corporation System and method for a SIP server with offline charging
US8078737B2 (en) * 2006-12-13 2011-12-13 Oracle International Corporation System and method for efficient storage of long-lived session state in a SIP server
US7895475B2 (en) * 2007-07-11 2011-02-22 Oracle International Corporation System and method for providing an instrumentation service using dye injection and filtering in a SIP application server environment
JP2009266113A (ja) * 2008-04-28 2009-11-12 Internatl Business Mach Corp <Ibm> メモリ管理方法およびシステム
US8788460B2 (en) * 2008-06-12 2014-07-22 Microsoft Corporation Exploring attached and unattached content databases
US8635188B2 (en) * 2008-06-12 2014-01-21 Microsoft Corporation Techniques for extracting data from content databases
US20090327377A1 (en) * 2008-06-26 2009-12-31 Tatu Ylonen Oy Ltd Copying entire subgraphs of objects without traversing individual objects
US7937419B2 (en) * 2008-06-26 2011-05-03 Tatu Ylonen Oy Garbage collection via multiobjects
US20100070959A1 (en) * 2008-09-17 2010-03-18 International Business Machines Corporation Dynamic improved executables
JP5278901B2 (ja) * 2008-10-24 2013-09-04 インターナショナル・ビジネス・マシーンズ・コーポレーション 頻繁に発生するイベントを推定する方法
JP2010108409A (ja) * 2008-10-31 2010-05-13 Hitachi Ltd ストレージ管理方法及び管理サーバ
US20100161687A1 (en) * 2008-12-24 2010-06-24 International Business Machines Corporation System and method for optimizing garbage collection with allocation modifiers
US20100293206A1 (en) * 2009-05-12 2010-11-18 Tatu Ylonen Oy Ltd Clustering related objects during garbage collection
US8868853B2 (en) 2009-08-12 2014-10-21 Nec Corporation Data processing device, data recording method and data recording program
JP5883300B2 (ja) * 2012-02-02 2016-03-09 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation オブジェクトを特定するためのハッシュコードを生成するための方法、プログラム及びシステム
US20140304478A1 (en) * 2013-04-05 2014-10-09 Nec Laboratories America, Inc. Space Reclamation of Objects in a Persistent Cache
US9430153B2 (en) 2014-10-22 2016-08-30 International Business Machines Corporation Garbage collection and other management of memory heaps
JP2017004469A (ja) * 2015-06-16 2017-01-05 富士通株式会社 基地局装置、処理方法、プログラム、無線通信システム、及び、基地局処理カード
US11593262B1 (en) 2018-04-25 2023-02-28 Seagate Technology Llc Garbage collection command scheduling
US11194714B2 (en) * 2020-03-31 2021-12-07 International Business Machines Corporation Deep object graph traversal

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5088036A (en) * 1989-01-17 1992-02-11 Digital Equipment Corporation Real time, concurrent garbage collection system and method
JPH0442338A (ja) * 1990-06-07 1992-02-12 Fuji Xerox Co Ltd ガーベッジコレクションシステムにおけるアクセス可能なオブジェクトの判別方法
US5652883A (en) * 1992-06-15 1997-07-29 Microsoft Corporation Computer method and system for conservative-stack and generational heap garbage collection
US5787447A (en) * 1995-05-08 1998-07-28 Sun Microsystems, Inc. Memory allocation maintaining ordering across multiple heaps
JPH10320263A (ja) * 1997-05-22 1998-12-04 Fujitsu Ltd Gcアタッチメント装置及びプログラム記憶媒体
JPH1115726A (ja) * 1997-05-30 1999-01-22 Sun Microsyst Inc コンピュータ制御方法、装置、システム、およびコンピュータプログラム製品

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH044429A (ja) * 1990-04-23 1992-01-08 Nec Corp 仮想記憶システムにおける自動再配置リンク方式
US5742809A (en) * 1990-08-31 1998-04-21 Fujitsu Limited Database generic composite structure processing system
JPH06214803A (ja) * 1993-01-18 1994-08-05 Nec Corp 仮想空間ブロック配置方式
JP3520527B2 (ja) * 1993-06-25 2004-04-19 ソニー株式会社 データ管理方法
JPH07129410A (ja) * 1993-11-05 1995-05-19 Fujitsu Ltd コンパイラにおけるメモリ割り付け方法
US5799268A (en) * 1994-09-28 1998-08-25 Apple Computer, Inc. Method for extracting knowledge from online documentation and creating a glossary, index, help database or the like
US5721915A (en) * 1994-12-30 1998-02-24 International Business Machines Corporation Interaction between application of a log and maintenance of a table that maps record identifiers during online reorganization of a database
JPH08263381A (ja) * 1995-03-27 1996-10-11 Nec Corp 仮想記憶システムにおける自動再配置リンク方式
FR2736737B1 (fr) * 1995-07-12 1997-08-14 Alcatel Nv Dispositif de gestion de relations entre des objets
JPH0962574A (ja) * 1995-08-28 1997-03-07 Mitsubishi Electric Corp メモリ・アドレス割り付け方法
US5940621A (en) * 1996-01-23 1999-08-17 Hewlett-Packard Company Language independent optimal size-based storage allocation
US5778378A (en) * 1996-04-30 1998-07-07 International Business Machines Corporation Object oriented information retrieval framework mechanism
US6138123A (en) * 1996-07-25 2000-10-24 Rathbun; Kyle R. Method for creating and using parallel data structures
JP3425069B2 (ja) * 1996-10-28 2003-07-07 富士通株式会社 バイナリ・プログラム変換装置および方法
US5822759A (en) * 1996-11-22 1998-10-13 Versant Object Technology Cache system
US6038566A (en) * 1996-12-04 2000-03-14 Tsai; Daniel E. Method and apparatus for navigation of relational databases on distributed networks
US5974421A (en) * 1996-12-23 1999-10-26 Microsoft Corporation Cache-efficient object loader
US5995973A (en) * 1997-08-29 1999-11-30 International Business Machines Corporation Storing relationship tables identifying object relationships
JP3177950B2 (ja) * 1997-09-19 2001-06-18 日本電気株式会社 キャッシュ最適化処理方法およびキャッシュ最適化処理プログラムを記録した記録媒体
US6330556B1 (en) * 1999-03-15 2001-12-11 Trishul M. Chilimbi Data structure partitioning to optimize cache utilization

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5088036A (en) * 1989-01-17 1992-02-11 Digital Equipment Corporation Real time, concurrent garbage collection system and method
JPH0442338A (ja) * 1990-06-07 1992-02-12 Fuji Xerox Co Ltd ガーベッジコレクションシステムにおけるアクセス可能なオブジェクトの判別方法
US5652883A (en) * 1992-06-15 1997-07-29 Microsoft Corporation Computer method and system for conservative-stack and generational heap garbage collection
US5787447A (en) * 1995-05-08 1998-07-28 Sun Microsystems, Inc. Memory allocation maintaining ordering across multiple heaps
JPH10320263A (ja) * 1997-05-22 1998-12-04 Fujitsu Ltd Gcアタッチメント装置及びプログラム記憶媒体
JPH1115726A (ja) * 1997-05-30 1999-01-22 Sun Microsyst Inc コンピュータ制御方法、装置、システム、およびコンピュータプログラム製品

Also Published As

Publication number Publication date
JP3659317B2 (ja) 2005-06-15
US6480862B1 (en) 2002-11-12
JP2000322315A (ja) 2000-11-24
KR20010007010A (ko) 2001-01-26

Similar Documents

Publication Publication Date Title
KR100384905B1 (ko) 컴퓨터 메모리에서 데이터 관리 방법, 장치 및 기록매체
US6330556B1 (en) Data structure partitioning to optimize cache utilization
US6321240B1 (en) Data structure partitioning with garbage collection to optimize cache utilization
US7225439B2 (en) Combining write-barriers within an inner loop with fixed step
US6094706A (en) Caching in a data processing system using the pigeon hole principle
US20150006495A1 (en) Methods and apparatuses to optimize updates in a file system based on birth time
US9983978B1 (en) Querying an indexed time-travel trace
JP2000047874A (ja) プレロ―ドクラスのフットプリント低減装置及び方法
US20040123278A1 (en) Persistent cache apparatus and methods
US11573894B2 (en) Tracking garbage collection states of references
US20100131721A1 (en) Managing memory to support large-scale interprocedural static analysis for security problems
US7689971B2 (en) Method and apparatus for referencing thread local variables with stack address mapping
US20200356384A1 (en) Intelligently determining a virtual machine configuration during runtime based on garbage collection characteristics
US11379408B2 (en) Pointer-based dynamic data structures in key-value stores
Sikdar et al. An experimental comparison of complex object implementations for big data systems
US11734171B2 (en) Snapshot at the beginning marking in Z garbage collector
Gwinn Object-oriented programs in realtime
CN109923527B (zh) 可变类型建立器
JP2014225077A (ja) コンピュータにおいてオブジェクトを管理するための方法、プログラム及びシステム
US11789863B2 (en) On-the-fly remembered set data structure adaptation
Nasartschuk Improving virtual machines using string deduplication and internal object pools
WO2022245659A1 (en) Colorless roots implementation in z garbage collector
Defoe Effects of Coalescing on the Performance of Segregated Size Storage Allocators
WO2022245954A1 (en) Write barrier for remembered set maintenance in generational z garbage collector
WO2022245749A1 (en) Snapshot at the beginning marking in z garbage collector

Legal Events

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

Payment date: 20100406

Year of fee payment: 8

LAPS Lapse due to unpaid annual fee