KR101993793B1 - 메모리 관리를 위한 보존 가비지 콜렉팅 및 정수 태깅 기법 - Google Patents

메모리 관리를 위한 보존 가비지 콜렉팅 및 정수 태깅 기법 Download PDF

Info

Publication number
KR101993793B1
KR101993793B1 KR1020187026942A KR20187026942A KR101993793B1 KR 101993793 B1 KR101993793 B1 KR 101993793B1 KR 1020187026942 A KR1020187026942 A KR 1020187026942A KR 20187026942 A KR20187026942 A KR 20187026942A KR 101993793 B1 KR101993793 B1 KR 101993793B1
Authority
KR
South Korea
Prior art keywords
call stack
heap
notation
objects
accessible
Prior art date
Application number
KR1020187026942A
Other languages
English (en)
Other versions
KR20180108850A (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 KR20180108850A publication Critical patent/KR20180108850A/ko
Application granted granted Critical
Publication of KR101993793B1 publication Critical patent/KR101993793B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/215Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/70Details relating to dynamic memory management
    • G06F2212/702Conservative garbage collection

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Quality & Reliability (AREA)
  • Data Mining & Analysis (AREA)
  • Memory System (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

보존 가비지 콜렉팅에 관한 양상이 개시된다. 일 측면에서, 호출 스택 내에 포함된 루트 객체가 식별되고, 이는 정수형과 포인터를 포함하고 있다. 정수형 표기는 태깅되고 태깅되지 않은 포인터 표기로부터 구별될 수 있다. 루트 객체는 후속하는 추적이 포인터 표기에 대하여는 수행되고 정수형 표기에 대하여는 생략되도록 대응 메모리 로케이션까지 추적될 수 있다. 호출 스택에 의해 접근 가능하지 않은 객체들에 할당된 메모리가 비워진다. 다른 측면에서는, 호출 스택과 연관된 객체 그래프가 태깅되고, 호출 스택의 실행 부분에 포함된 객체들을 포함하는 힙이 생성된다. 호출 스택의 실행되지 않은 부분에 포함된 객체들은 후속 추적이 태깅되지 않은 포인터 표기에 대해서만 수행되도록 힙의 대응 메모리 로케이션까지 추적된다. 이후, 호출 스택의 실행되지 않은 부분에 의해 접근 가능하지 않은 힙 객체들에 대응하는 메모리 로케이션이 클리어된다.

Description

메모리 관리를 위한 보존 가비지 콜렉팅 및 정수 태깅 기법{CONSERVATIVE GARBAGE COLLECTING AND TAGGED INTEGERS FOR MEMORY MANAGEMENT}
본원은 메모리 관리에 대한 것으로 보다 구체적으로는 보존 가비지 콜렉팅(conservative garbage collecting) 알고리즘에 관한 것이다.
일부 종래 시스템에 관한 배경으로서, 컴퓨팅 장치는 전통적으로 저장되는 정보 및 관련 애플리케이션들을 가진다. 결국, 컴퓨팅 성능을 증가시키기 위해서 효율적인 메모리 관리를 구현하는 것이 필요할 것이다. 수동 메모리 관리 스킴에 비해 자동 메모리 관리 스킴의 발전이 특히 중요하다. 예컨대, 가비지 콜렉터 알고리즘(garbage collector algorithms)은 특정 프로그램에서 더 이상 사용되지 않는 객체들에 의해 차지되는 메모리를 회수하기 위한 시도로서 자동 메모리 관리 스킴이다.
추적 가비지 콜렉터는 가장 일반적인 가비지 콜렉터 유형이다. 추적 가비지 콜렉터는 먼저 접근 가능한(또는 잠재적으로 접근 가능한) 객체들을 판정하고, 그 후 모든 나머지 객체들을 버리게 된다. 접근 가능한 객체는 해당 변수로 연결시켜 주는 프로그램 환경 내에 일부 변수가 존재하는 객체들로 정의될 수 있고, 직접 또는 다른 접근 가능한 객체로부터 참조된다. 더 자세하게, 접근 가능한 객체는 일반적으로 두 가지 방식으로 접근 가능하다. 첫째, 루트(roots)로 알려진 구별되는 객체 세트들은 접근가능한 것으로 인정된다. 전형적으로, 이들은 호출 스택(call stack) 내의 임의의 장소에서(즉, 현재 인보크된 함수의 모든 로컬 변수 및 파라미터에 의해) 또는 임의의 전역 변수에 의해 참조가능한 객체들을 포함한다. 둘째, 접근 가능한 객체로부터 참조되는 것 역시 접근가능하다고 인정된다.
종래의 가비지 콜렉터의 문제는, 참조 타입 및 언박스된(unboxed) 값 타입을 모두 가지는 언어에서, 가비지 콜렉터가 어떤 변수가 호출 스택상의 레귤러 값(예컨대, 정수)인지 참조(예컨대, 포인터)가 어느 것인지를 구별하는 것이다. 이러한 구별은 구별을 목적으로 하는 시스템에서 유용할 것이다. 그렇지 않으면, 정수와 참조가 메모리 상에서 동일하게 나타날 것이기 때문이다. 이에 대해, 가비지 콜렉터는 특정 엘리먼트를 참조로서 취급하여 참조를 따를 것인지 아니면 그것을 단순히 프리미티브(primitive) 값으로 볼 것인지에 대한 결정을 하기 위해 그러한 구별을 이용할 수 있다.
지금까지 설명된 현재의 메모리 관리 스킴의 문제점은 단순히 종래의 시스템의 일부 문제점들을 개관하기 위함이고 문제점들을 남김없이 제시하고자 하는 목적은 아니다. 본 기술 분야의 다른 문제점들 및 다양하고 비 제한적인 실시예들의 대응되는 이점들은 이하 상세한 설명의 검토를 통해 더욱 명확해질 수 있다.
간결화된 개요가 보다 상세한 설명 및 첨부 도면에서 이하의 예시적인 비제한적 실시예들의 다양한 측면들을 기본적으로 또는 개괄적으로 이해할 수 있게 해주는 데 도움을 주기 위해 이 섹션에 제공되어 있다. 그렇지만, 이 개요 섹션이 전반적이거나 총망라한 것으로 간주되어서는 안된다. 그 대신에, 이하의 실시예 개요의 유일한 목적은 개시된 발명 대상의 어떤 예시적인 비제한적 실시예들에 관련된 어떤 개념들을, 이하의 개시된 발명 대상의 이들 및 기타 다양한 실시예들에 대한 보다 상세한 설명의 서문으로서 간략화된 형태로 제시하는 데 있다.
하나 이상의 실시예 및 해당 개시에 따르면, 다양하고 비제한적 측면들이 메모리 관리를 위한 보존 가비지 콜렉팅(conservative garbage collecting)에 대하여 기술되어 있다. 한 측면에서, 보존 가비지 콜렉팅 알고리즘 내의 정수 태깅 방법을 제시한다. 이러한 방법은 정수 표기 및 포인터 표기를 포함하고 있는 호출 스택에 포함된 루트 객체들을 식별하는 단계를 포함할 수 있다. 이 실시예는 정수형 표기를 태깅하여 태깅된 정수형 표기가 태깅되지 않은 포인터 표기와 구별되도록 하는 단계를 더 포함할 수 있다. 이러한 방법은 또한 루트 객체를 메모리 로케이션의 대응 세트까지 추적하는(tracing) 단계를 포함할 수 있다. 이 특정 실시예에서, 태깅되지 않은 포인터 표기에 대한 후속 추적이 수행되고, 반면에 태깅된 정수 표기에 대하여는 후속 추적이 생략된다. 방법은 호출 스택에 의해 접근할 수 없는 일련의 객체들에 대해 할당된 메모리를 비우는 단계를 더 포함할 수 있다.
다른 측면에서, 태깅된 정수를 이용하는 보존 가비지 콜렉팅 알고리즘을 구현하도록 구성된 메모리 관리 장치가 개시된다. 이러한 실시예에서, 메모리 관리 장치는 메모리에 저장된 컴퓨터 실행가능한 컴포넌트들을 실행하도록 구성된 프로세서를 포함한다. 이 컴퓨터 실행가능한 컴포넌트들에는 스캐닝 컴포넌트, 태깅 컴포넌트, 추적 컴포넌트, 및 재활용 컴포넌트(recycling component)가 포함된다. 스캐닝 컴포넌트는 정수 표기 및 포인터 표기를 포함하고 있는 호출 스택에 포함된 루트 객체들을 식별하도록 구성된다. 태깅 컴포넌트는 정수 표기를 태깅하여 태깅된 정수 표기가 태깅되지 않은 포인터 표기와 구별되도록 구성되고, 추적 컴포넌트는 루트 객체를 메모리 로케이션의 대응 세트까지 추적하도록 구성된다. 이러한 실시예에서, 추적 컴포넌트는 태깅되지 않은 포인터 표기에 대한 후속 추적을 수행하고, 반면 태깅된 정수 표기에 대하여는 후속 추적이 생략되도록 구성된다. 재활용 컴포넌트는 호출 스택에 의해 접근할 수 없는 일련의 객체들에 대해 할당된 메모리를 비우도록 구성된다.
또 다른 실시예에서, 보존 가비지 콜렉팅 알고리즘 내에서 정수를 태깅하기 위한 컴퓨터-판독가능한 저장 매체가 개시된다. 이러한 실시예에서, 컴퓨터-판독가능한 저장 매체는 적어도 하나의 프로세서로 하여금 다양한 동작들을 수행하게 하는 컴퓨터-판독가능 명령어들을 포함한다. 예를 들어, 이러한 동작에는 호출 스택과 연관된 객체 그래프를 태깅하는 동작, 및 호출 스택의 실행동안 객체의 힙(heap)을 생성하는 동작이 포함될 수 있다. 여기서, 태깅된 객체 그래프에 포함된 루트 객체들은 태깅된 정수 표기 및 태깅되지 않은 포인터 표기를 포함하고, 객체들의 힙은 호출 스택의 실행되는 부분에 포함된 객체들을 포함한다. 이 실시예는 호출 스택의 실행되지 않은 부분에 포함된 실행되지 않은 객체들을 힙의 대응 메모리 로케이션까지 추적하는 동작을 더 포함한다. 이 특정 실시예에서, 태깅되지 않은 포인터 표기에 대한 후속 추적을 수행하고 태깅된 정수 표기에 대하여는 후속 추적이 생략된다. 힙의 접근 가능하지 않은 객체들-호출 스택의 실행되지 않은 부분에 의해 접근 가능하지 않은 객체들-에 대응하는 메모리 로케이션들이 클리어된다.
다양하고 비 제한적인 실시예들이 첨부된 도면들을 참고하여 더 설명된다.
도 1은 본 발명의 일 실시예에 따른 보존 가비지 콜렉팅 알고리즘의 구현을 가능하게 하는 예시적인 시스템을 도시한다.
도 2는 본 발명의 일 실시예에 따른 예시적인 객체들의 힙을 도시하는 다이어그램이다.
도 3은 본 발명의 일 실시예에 따른 예시적인 객체 그래프를 도시하는 다이어그램이다.
도 4는 본 발명의 일 실시예에 따른 메모리를 사용가능하게 준비하는 예시적인 동작을 도시하는 다이어그램이다.
도 5는 본 발명의 일 실시예에 따른 예시적인 메모리 관리 장치를 도시하는 블록도이다.
도 6은 본 발명의 일 실시예에 따른 보존 가비지 콜렉팅 알고리즘을 구현하기 위한 예시적이고 비제한적인 실시예를 도시하는 흐름도이다.
도 7은 본 발명의 일 실시예에 따른 예시적인 자원 관리 유닛을 도시하는 블록도이다.
도 8은 본 발명의 일 실시예에 따른 예시적이고 비제한적인 정수 태깅을 위한 실시예를 도시하는 흐름도이다.
도 9는 본 명세서에서 기술하고 있는 다양한 실시예들이 구현될 수 있는 예시적이고 비제한적인 네트워크 환경을 나타내는 블록도이다.
도 10은 본 명세서에서 기술하고 있는 다양한 실시예들 중 하나 이상의 측면들이 구현될 수 있는 예시적이고 비제한적인 컴퓨팅 시스템 또는 운영 환경을 나타내는 블록도이다.
개관
배경 기술에서 논의한 바와 같이, 호출 스택상의 포인터 및 정수 사이를 구별하는 가비지 콜렉터 알고리즘이 바람직하다. 다양한 실시예에서, 메모리 관리는 자연어 코드 호환성에 맞춰 리디자인될 수 있다. 일 측면에서, 객체들 간의 참조수 계산(reference counting)이 제거되도록 스크립트 객체들은 보다 적게 관리된 객체들 및 단지 자연 메모리 조각일 수 있다. 또한, 포인터들 모두가 알려진 것으로 가정되지 않은 보존 가비지 콜렉션 알고리즘이 구현될 수 있다. 예시적으로, 공통 언어 런타임(CLR) 가비지 콜렉터를 이용하여 스택이 엄격하게 분류될 수 있다. 그러나, C 코드 및 스크립트 코드와 같은 자연어 코드를 이용하여서는 스택상에 무엇이 있는지를 알 수 없다. 이에 대해, 참조 계수 모델을 이용하는 것 대신에 객체들이 직접 상호작용하는 것을 고려할 수도 있다.
본 명세서에서 개시된 다양한 실시예들은 보존 가비지 콜렉팅 알고리즘 내에서 정수를 태깅하는 것과 관련된다. 그리고, 본 명세서에서 개시된 측면들은 허위 포인터들(spurious pointers)을 보다 적게 생성하는 문서 객체 모델에 대한 스크립트(javascripts)의 실행을 가능하게 하는 것이다. 또한, 본 명세서에서 개시하는 측면들은 태깅되지 않은 포인터들 및 태깅된 정수를 쉽게 구별하기 때문에 허위 포인터들의 가능성을 줄이게 된다.
태깅된 정수 및 보존 가비지 콜렉션
웹 브라우징 경험이 적은 상호작용을 가진 플랫 프리젠테이션(flat presentation)에서 클라이어언트 측에서 많은 상호작용 경험을 가지는 애플리케이션 또는 애플릿으로 발전하면서 많은 이슈들이 발생하고 있다. 보다 일반적으로, 웹 브라우징 경험이 정보 디스플레이와 디스플레이 상 객체들의 활발한 상호작용의 하이브리드 형태로 진화하고 있다. 이러한 진화의 특정한 도전은 기존의 문서 객체 모델(DOM)-기존의 문서 객체 모델은 본래 클라이언트의 자연 코드에 기초한 정보의 플랫 프리젠테이션을 위해 디자인되었음-를 자바스크립트 객체와 같은 유동적으로 다룰 수 있는 스크립트 코드에 적응시키는 것에 기초한다.
보다 바람직한 사용자 경험을 위해서 속도 향상이 특히 중요하다. 예를 들어, 서버와 통신에서 지연으로 인해 플리커되는(flickered) 웹 경험이 있다. 그러나, 스크립트가 작은 프로그램이 동적으로 서버로 회귀하는 일 없이 DOM을 수정할 수 있게끔 할 수 있다. 서버로 회귀하는 것 없이 보다 동적인 것을 원함에 따라, 스크립트 코드를 빠르게 실행하는 것이 중요한 과제가 되었다.
사용자 경험이 효율적으로 DOM을 스크립트하는 것에 의해 많은 영향을 받음에 따라 DOM을 가능한 한 빠르게 변경시켜 상호 응답을 극대화하는 것이 중요하다. 과거에는 임의의 객체를 스크립트화 할 수 있는 iDispatch, iActiveScript와 같은 인터페이스 세트를 포함하는 객체 링킹 및 임베딩(OLE)의 사용 때문에 DOM의 자연어 클래스 및 스크립트 엔진 간의 통신이 좋지 못했다. 그러한 방법은 느리므로 개선이 필요하다. 따라서, 본 명세서에서 개시하고 있는 측면들은 보존 가비지 콜렉팅 알고리즘 내에서 정수를 태깅하는 것에 의해 스크립트 실행 속도를 향상시키는 것에 관련될 수 있을 것이다.
도 1은 본 발명의 실시예에 따른 보존 가비지 콜렉팅 알고리즘을 구현하는 예시적인 시스템을 도시한다. 도시된 바와 같이, 시스템(100)은 메모리(120)와 통신가능하게 연결된 메모리 관리 유닛(110)을 포함한다. 일 측면에서, 메모리 관리 유닛(110)은 메모리(120)의 메모리 공간을 관리하기 위해 보존 가비지 콜렉팅 알고리즘을 구현하도록 구성된다. 또한, 메모리 관리 유닛(110)은 스크립트(112)의 실행에 연관되고 태깅된 객체 그래프(114)를 생성하도록 구성될 수 있다. 예시적으로, 스크립트(112)는 DOM에 대해 실행되는 자바스크립트일 수 있으며, 이러한 자바스크립트는 메모리(120) 내의 메모리 공간 할당을 요청하는 다양한 객체들을 포함한다. 특정 실시예에서는, 메모리(120) 내의 정수 및 포인터 간의 구별을 용이하게 하기 위하여, 정수 값에 대응하는 스크립트 객체들은 메모리 관리 유닛(110)에 의해 태깅되고 태깅된 객체 그래프(114)에 포함된다.
일 측면에서, 스크립트 객체에 할당된 메모리는 객체를 힙에 저장하는 것을 포함한다. 도 2를 참조하면, 본 발명의 일 실시예에 따른 객체들의 예시적인 힙을 나타내는 블록도가 주어진다. 도시된 바와 같이, 힙(200)은 가용 메모리(210), 및 다양한 객체(220, 230, 240, 250, 260, 270)에 대응하는 할당된 메모리를 포함할 수 있다. 이 특정 예에서, 객체들(240, 270)은 포인터 값에 대응하고, 반면, 객체(220, 230, 250, 260)들은 정수 값에 대응한다. 즉, 객체(240)는 객체(230)에 의해 나타나는 정수 값을 참조하는 포인터 값이고, 반면, 객체(270)은 객체(260)에 의해 나타나는 정수 값을 참조하는 포인터 값이다.
이에 대하여, 정수 값에 대응하는 스크립트 객체들은 그것들이 포인터 값과 쉽게 구별되도록 하기 위해 태깅될 수 있다. 다음으로 도 3을 참조해 보면, 힙에서 태깅된/태깅되지 않은 객체들의 매핑을 용이하게 하는 예시적이 객체 그래프를 도시하는 다이어그램이 주어진다. 도시된 바와 같이, 객체 그래프(300)는 실행되지 않은 호출 스택 포션(310)에 포함된 객체들을 힙(320)에 매핑시킨다. 이와 관련하여, 힙(320)과 가용 메모리(330)는 일반적으로 힙(200)과 가용 메모리(210)과 각각 유사하다.
일 측면에서, 객체 그래프(300)는 힙(320)상의 객체들이 실행되지 않은 호출 스택 포션(310)에 의해 접근 가능한지를 판정하는데 이용된다. 즉, 실행되지 않은 호출 스택 포션(310)에 포함된 루트 객체들이 힙(320)의 대응 메모리 로케이션까지 추적되고, 정수 값에 대응하는 루트 객체가 태깅된다. 그리고, 루트 객체들의 후속 추적이 접근가능한 태깅되지 않은 포인터 값에 대하여만 수행되어 그러한 포인터 값에 의해 참조되는 접근 가능한 객체를 식별하는 것이 고려될 수 있다. 반대로, 후속하는 추적이 접근가능한 태깅된 정수 값에 대하여는 생략된다. 이와 같은 예에서는, 접근가능한 객체(390)는 포인터 값에 대응하는 루트 객체이므로, 이는 태깅되지 않는다. 그러므로, 후속하는 추적이 정수 값에 대응하는 접근 가능한 객체(380)를 식별하는 접근 가능한 객체(390)에 대하여 수행된다. 그러나, 후속 추적은 접근 가능한 객체(340, 370)에 대하여는 생략된다. 이들이 태깅된 정수 값에 대응하는 루트 객체이기 때문이다.
객체 그래프(300)는 실행되지 않은 호출 스택 포션(310)에 의해 접근 가능하지 않은 객체들을 식별하는 데 이용될 수 있다. 이러한 특정 예에서는, 접근 가능하지 않은 객체(350, 360)는 그것들이 실행되지 않은 호출 스택 포션(310) 내의 루트 객체와 대응하지도 않고 접근 가능한 포인터 객체에 의하여 참조되는 것도 아니기 때문에 접근 가능하지 않은 객체로 간주된다.
접근 가능하지 않은 객체들을 식별하면, 그러한 객체들에 할당된 메모리가 클리어될 수 있다. 도 4를 참조하여 본 발명의 실시예에 따르는, 예시적인 메모리 준비 동작을 도시하는 다이어그램이 주어진다. 도시된 바와 같이, 객체 그래프(400)는 일반적으로 힙(200, 320)과 유사한 힙(420)을 포함하고, 힙(420)은 접근 가능하지 않은 객체(350, 360)에 이전에 할당되었던 메모리를 사용가능하게 하는 것을 나타낸다. 즉, 힙(420)은 가용 메모리(430)에 추가하여 현재 사용가능해진(freed) 메모리(450, 460)를 포함한다. 그러나, 일 양상에서는 접근 가능한 객체들(440, 470, 480, 490)들은 그들의 원래 저장 위치에 유지된다(즉, 힙(420)은 붕괴되지 않는다).
다음으로 도 5를 참조하면, 다양한 양상에 따라 보존 가비지 콜렉팅 알고리즘을 구현하도록 구성된 예시적인 메모리 관리 유닛을 도시하는 블록도가 주어진다. 도시된 바와 같이, 메모리 관리 유닛(500)은 프로세서 컴포넌트(510), 메모리 컴포넌트(520), 스캐닝 컴포넌트(530), 태깅 컴포넌트(540), 추적 컴포넌트(550), 및 재활용 컴포넌트(560)을 포함할 수 있다.
일 측면에서, 프로세서 컴포넌트(510)는 임의의 복수 개의 함수들을 수행하는 것과 관련된 컴퓨터-판독가능한 명령어들을 실행하도록 구성된다. 프로세서 컴포넌트(510)는 하나의 프로세서 또는 복수의 프로세서일 수 있으며, 메모리 관리 유닛(500)으로부터 통신되는 정보를 분석하거나/하고 메모리 컴포넌트(520), 스캐닝 컴포넌트(530), 태깅 컴포넌트(540), 추적 컴포넌트(550), 및/또는 재활용 컴포넌트(560)에서 이용되는 정보를 생성하는데 이용될 수 있다. 추가적으로 또는 대안적으로, 프로세서 컴포넌트(510)는 메모리 관리 유닛(500)의 하나 이상의 컴포넌트들을 제어하도록 구성될 수 있다.
다른 측면에서, 메모리 컴포넌트(520)는 프로세서 컴포넌트(510)와 연결되어 있고, 프로세서 컴포넌트(510)에 의해 실행되는 컴퓨터-판독가능 명령어들을 저장하도록 구성되어 있다. 메모리 컴포넌트(520)는 또한 스캐닝 컴포넌트(530), 태깅 컴포넌트(540), 추적 컴포넌트(550), 및/또는 재활용 컴포넌트(560)에 의해 생성된 데이터를 포함하는 임의의 복수의 타입의 데이터를 저장하도록 구성될 수 있다. 메모리 컴포넌트(520)는 RAM, 배터리 지원 메모리(battery-backed memory), 하드디스크, 자기 테이프 등을 포함하는 수많은 다양한 형태로 구성될 수 있다. 복수 배열 독립 디스크(redundant array of independent disk; RAID)의 사용과 같은 자동 백업 및 압축과 등의 다양한 특징이 메모리 컴포넌트(520)에서 더 구현될 수 있을 것이다.
도시된 바와 같이, 메모리 관리 유닛(500)은 스캐닝 컴포넌트(530)를 더 포함할 수 있다. 이러한 실시예에서, 스캐닝 컴포넌트(530)는 정수형 표기와 포인터 표기를 포함하는 호출 스택에 포함된 루트 객체를 식별하도록 구성된다. 여기서, 이러한 호출 스택은 특정 객체 모델에서 실행되는 스크립트와 연관된다는 점이 고려될 수 있을 것이다. 예시적으로, 이러한 호출 스택은 동작 중에 문서 객체 모델의 변경이 용이한 자바스크립트 컴파일과 연관될 수 있다.
메모리 관리 유닛(500)은 도시된 바와 같이 태깅 컴포넌트(540)를 더 포함할 수 있으며, 이러한 태깅 컴포넌트는 호출 스택 내에 포함된 정수형 표기를 태깅하도록 구성된다. 여기서, 이러한 정수의 태깅은 태깅된 정수형 표기가 태깅되지 않은 포인터 표기와 쉽게 구별되도록 하기 위해 수행된다는 것을 알 수 있다. 이를 위해, 태깅 컴포넌트(540)가 임의의 복수의 방식으로 정수를 태깅하도록 구성될 수 있음이 또한 이해될 것이다. 예를 들어, 태깅 컴포넌트(540)는 정수형 표기를 다른 데이터 구조로 변환하도록 구성될 수도 있다. 이러한 실시예에서, 이 변환은 태깅 컴포넌트(540)가 다른 데이터 구조의 적어도 하나의 비트를 태그로 제공하도록(dedicate) 할 수 있다.
일 측면에서, 메모리 관리 장치(500)는 추적 컴포넌트(550)를 더 포함한다. 이러한 실시예에서, 추적 컴포넌트(550)는 스캐닝 컴포넌트(530)에 의해 식별된 루트 객체를 메모리 로케이션의 대응 세트까지 추적하도록 구성된다. 최초의 루트 객체 추적 이후, 관련 객체들에 대한 후속 추적이 수행될 수도 있을 것이다. 그러나, 이러한 특정 예에서, 태깅되지 않은 포인터 표기에 대하여만 후속 추적이 수행되고 태깅된 정수 표기에 대하여는 생략된다.
일 측면에서, 메모리 관리 장치(500)는 재활용 컴포넌트(560)를 더 포함할 수 있고, 재활용 컴포넌트는 호출 스택에 의해 접근할 수 없는 일련의 객체에 할당된 메모리를 사용가능하게 하도록 구성될 수 있다. 이 특정 예에서, 재활용 컴포넌트(560)는 호출 스택에 의해 호출된 객체를 힙으로 배열시키도록 구성될 수 있다. 이러한 예에서, 재활용 컴포넌트(560)는 힙의 크기가 임계값을 초과하였는지에 기초하여 가비지 콜렉션 알고리즘을 개시하도록 더 구성될 수 있다. 또 다른 예에서, 재활용 컴포넌트(560)는 접근가능한 객체들을 힙의 초기 저장소 로케이션에 각각 유지시키도록 구성될 수도 있다. 예컨대, 재활용 컴포넌트(560)는 힙 내의 고정된 경계 세트에 따라 힙 객체들의 분리(separation)를 유지시키도록 구성될 수 있다.
도 6은 본 발명의 일 실시예에 따른 보존 가비지 콜렉팅 알고리즘을 구현하는 예시적이고 비제한적인 실시예를 도시하는 흐름도이다. 600단계에서, 정수형 표기 및 포인터 표기를 포함하는 호출 스택 내에 포함된 루트 객체가 식별된다. 다음으로 610단계에서, 정수형 표기가 태깅되어 태깅된 정수형 표기들이 태깅되지 않은 포인터 표기로부터 구별될 수 있도록 한다. 그 후 단계 620에서, 포인터 표기에 대하여 후속 추적이 수행되고 정수형 표기에 대하여는 생략되도록, 루트 객체들이 메모리 로케이션의 대응 세트까지 추적될 수 있다. 그리고 단계 630에서, 호출 스택에 의해 접근가능하지 않은 객체들에 할당된 메모리가 비워진다.
다음으로 도 7을 참조하면, 다양한 측면에 따라 정수를 태깅하도록 구성된 예시적인 자원 관리 유닛이 도시된 블록도가 주어진다. 도시된 바와 같이, 자원 관리 유닛(700)은 프로세서 컴포넌트(710), 메모리 컴포넌트(720), 태깅 컴포넌트(730), 힙 컴포넌트(740), 추적 컴포넌트(750), 비움(freeing) 컴포넌트(760), 모니터링 컴포넌트(770), 및 그래픽 컴포넌트(780)를 포함할 수 있다.
메모리 장치 유닛(500)의 프로세서 컴포넌트(510)와 유사하게, 프로세서 컴포넌트(710)는 임의의 복수 개의 함수들을 수행하는 것과 관련된 컴퓨터-판독가능한 명령어들을 실행하도록 구성된다. 프로세서 컴포넌트(710)는 하나의 프로세서 또는 복수의 프로세서일 수 있으며 자원 관리 유닛(700)으로부터 통신되는 정보를 분석하거나/하고 메모리 컴포넌트(720), 태깅 컴포넌트(730), 힙 컴포넌트(740), 추적 컴포넌트(750), 비움(freeing) 컴포넌트(760), 모니터링 컴포넌트(770), 및 그래픽 컴포넌트(780)에서 이용되는 정보를 생성하는데 이용될 수 있다. 추가적으로 또는 대안적으로, 프로세서 컴포넌트(710)는 자원 관리 유닛(700)의 하나 이상의 컴포넌트들을 제어하도록 구성될 수도 있다.
다른 측면에서, 메모리 컴포넌트(720)는 프로세서 컴포넌트(710)와 연결되어 있고, 프로세서 컴포넌트(710)에 의해 실행되는 컴퓨터-판독가능 명령어들을 저장하도록 구성되어 있다. 메모리 컴포넌트(720)는 태깅 컴포넌트(730), 힙 컴포넌트(740), 추적 컴포넌트(750), 비움(freeing) 컴포넌트(760), 모니터링 컴포넌트(770), 및/또는 그래픽 컴포넌트(780)에 의해 생성된 데이터를 포함하는 임의의 복수의 타입의 데이터를 저장하도록 구성될 수 있다. 여기서, 메모리 컴포넌트(720)는 메모리 관리 유닛(500)의 메모리 컴포넌트(520)와 유사하다는 점을 알 수 있다. 따라서, 앞서 언급한 메모리 컴포넌트(520)의 특징/구성의 어떠한 것이라도 메모리 컴포넌트(720)에 또한 적용될 수 있음이 이해될 것이다.
도시된 바와 같이, 자원 관리 유닛(700)은 또한 태깅 컴포넌트(730)를 포함할 수 있다. 이러한 실시예에서, 태깅 컴포넌트(730)는 호출 스택과 연관된 객체 그래프를 태깅하도록 구성된다. 여기서, 태깅된 객체 그래프 내에 포함된 루트 객체들은 태깅된 정수형 표기 및 태깅되지 않은 포인터 표기를 포함할 수 있다는 것이 이해되어야 한다. 일부 예에서는, 자원 관리 유닛(700)은 태깅 컴포넌트(730)에 의해 태깅된 객체 그래프를 산출하도록 구성된 그래픽 컴포넌트(780)를 더 포함할 수도 있음이 이해되어야 한다.
일 측면에서, 자원 관리 유닛(700)은 힙 내에 포함된 객체들을 관리하도록 구성된다. 그러한 관리를 용이하게 하기 위하여, 자원 관리 유닛(700)은 힙 컴포넌트(740)를 포함할 수 있고, 이는 호출 스택의 실행 동안에 객체의 힙을 생성하도록 구성된다. 이 특정 예에서, 이러한 객체의 힙은 호출 스택의 실행되지 않은 부분에 포함된 객체들을 포함할 수 있음이 이해될 것이다.
일 측면에서, 자원 관리 유닛(700)은 추적 컴포넌트(750)를 더 포함할 수 있다. 이러한 실시예에서, 추적 컴포넌트(750)는 호출 스택의 실행되지 않은 부분에 포함된 실행되지 않은 객체들을 힙의 대응 메모리 로케이션까지 추적하도록 구성된다. 여기서, 메모리 관리 장치(500)의 추적 컴포넌트(550)와 유사하게, 추적 컴포넌트(750)는 호출 스택의 루트 객체에 대한 최초의 추적 이후로 관련 객체의 후속 추적을 수행하도록 구성될 수 있음이 이해될 것이다. 또한, 태깅되지 않은 포인터 표기에 대하여만 그러한 후속 추적이 수행되고 태깅된 정수 표기에 대하여는 생략된다는 것이 이해될 것이다.
도시된 바와 같이, 자원 관리 유닛(700)은 비움 컴포넌트(760)를 더 포함할 수 있다. 이러한 실시예에서, 비움 컨포넌트(760)는 호출 스택의 실행되지 않은 부분에 의해 접근 가능하지 않은 것으로 여겨지는 힙의 객체들에 대응하는 메모리 로케이션을 클리어하도록 구성된다. 일 측면에서, 비움 컴포넌트(760)는 힙 내의 초기 메모리 로케이션의 호출 스택의 실행되지 않은 부분에 의해 접근 가능한 객체의 저장소를 각각 유지하도록 구성될 수도 있다. 다른 측면에서, 자원 관리 유닛(700)은 모니터링 컴포넌트(770)를 더 포함할수 있고, 이는 호출 스택의 실행 동안 힙의 크기를 모니터링하도록 구성된다. 이 특정 예에서, 그후 비움 컴포넌트(760)는 힙 크기가 특정 임계값을 초과하는지에 기초하여 접근 가능하지 않은 객체들에 할당된 메모리의 클리어를 트리거하도록 구성될 수 있다.
도 8은 본 발명의 실시예에 따른 정수의 태깅을 위한 예시적이고 비제한적인 실시예를 도시하는 흐름도이다. 800단계에서, 태깅된 객체 그래프 내에 포함된 루트 객체가 태깅된 정수형 표기 및 태깅되지 않은 포인터 표기를 포함하도록 호출 스택과 연관된 객체 그래프가 태깅된다. 810단계에서, 호출 스택의 실행 동안 객체의 힙이 생성되고, 이는 호출 스택의 실행되는 부분에 포함된 객체를 포함한다. 그리고 820단계에서, 호출 스택의 실행되지 않은 부분에 포함된 실행되지 않은 객체들은 힙의 대응 메모리 로케이션까지 추적된다. 이 특정 실시예에서, 후속 추적은 포인터 표기에 대하여만 수행되고 정수 표기에 대하여는 수행되지 않는다. 그 후 830단계에서, 호출 스택의 실행되지 않은 부분에 의해 접근 가능하지 않은 힙 객체들에 대응하는 메모리 로케이션이 클리어된다.
바람직한 네트워크 및 분산 환경
당업자라면 본 명세서에서 기술된 보존 가비지 콜렉팅 알고리즘 내의 정수를 태깅하기 위한 다양한 실시예들이 컴퓨터 네트워크의 일부로서 또는 분산 컴퓨팅 환경에서 전개될 수 있는 임의의 컴퓨터 또는 다른 클라이언트 또는 서버 장치와 관련하여 구현될 수 있음을 이해할 수 있을 것이다. 이 점에서, 본 명세서에서 기술된 다양한 실시예들이 임의 갯수의 저장 유닛을 통해 발생하는 임의 갯수의 애플리케이션 및 프로세스와 임의 갯수의 메모리 또는 저장 유닛을 갖는 임의의 컴퓨터 시스템 또는 환경에서 구현될 수 있을 것이다. 본 발명은 원격 또는 로컬 저장장치를 갖는 네트워크 환경 또는 분산 컴퓨팅 환경에서 전개되는 서버 컴퓨터 및 클라이언트 컴퓨터를 갖는 환경에 적용될 수 있으나, 이에 제한되는 것은 아니다.
도 9는 예시적인 네트워크 또는 분산 컴퓨팅 환경의 비제한적인 개략도이다. 분산 컴퓨팅 환경은 컴퓨팅 개체 또는 장치(910, 912 등) 및 컴퓨팅 개체 또는 장치(920, 922, 924, 926, 928 등)을 포함한다. 이 개체는 애플리케이션(930, 932, 934, 936, 938)으로 나타낼 수 있는 프로그램, 방법, 데이터 저장, 프로그래머블 로직 등을 포함할 수 있다. 컴퓨팅 개체 또는 장치(910, 912 등) 및 컴퓨팅 개체 또는 장치(920, 922, 924, 926, 928 등)는 PDA, 오디오/비디오 장치, MP3 플레이어, 개인 컴퓨터 등과 같은 동일 또는 다른 장치의 부분을 포함할 수 있다.
각각의 컴퓨팅 개체 또는 장치(910, 912 등) 및 컴퓨팅 개체 또는 장치(920, 922, 924, 926, 928 등)는 통신 네트워크(940)를 통해 하나 이상의 컴퓨팅 개체 또는 장치(910, 912 등) 및 컴퓨팅 개체 또는 장치(920, 922, 924, 926, 928 등)와 직접적으로 또는 간접적으로 통신할 수 있다. 도 9에서는 하나의 요소로서 도시되어 있으나, 네트워크(940)는 도 9의 시스템에 서비스를 제공하는 다른 컴퓨팅 개체 및 컴퓨팅 장치를 포함할 수 있고, 다중의 상호연결된 네트워크를 나타낼 수 있고, 이들은 도시되어 있지는 않다. 각각의 컴퓨팅 개체 또는 장치(910, 912 등) 및 컴퓨팅 개체 또는 장치(920, 922, 924, 926, 928 등)는 본 발명의 다양한 실시예에 따라 주어지는 임의의 플랫폼으로부터의 서비스와 같은 정보를 위한 인프라스트럭쳐의 구현 또는 통신에 적합한 API, 또는 다른 개체, 소프트웨어, 펌웨어 및/또는 하드웨어를 이용할 수 있는 애플리케이션(930, 932, 934, 936, 938)을 포함할 수 있다.
분산 컴퓨팅 환경을 지원하는 다양한 시스템, 구성요소 및 네트워크 구성이 있다. 예를 들면, 컴퓨팅 시스템은 유선 또는 무선 시스템에 의해, 로컬 네트워크 또는 광범위하게 분산된 네트워크에 의해 함께 연결될 수 있다. 현재, 많은 네트워크가 광범위하게 분산된 컴퓨팅을 위한 인프라를 제공하고 많은 다른 네트워크를 포함하는 인터넷에 결합된다. 어떤 네트워크 인프라라도 다양한 실시예로 설명되는 기술에 부수하는 예시적인 통신을 위해 사용될 수 있다.
따라서, 클라이언트/서버, 피어-투-피어(peer-to-peer), 또는 하이브리드 아키텍처와 같은 네트워크 인프라 및 네트워크 토폴로지의 호스트가 이용될 수 있다. 클라이언트/서버 아키텍처에서, 특히 네트워크 시스템에서, 클라이언트는 보통 예컨대 서버같은 다른 컴퓨터에 의해 제공된 공유 네트워크 자원에 접근하는 컴퓨터이다. 도 9의 도시에서, 비제한적인 예시로서, 임의의 컴퓨터가 상황에 따라 클라이언트, 서버, 또는 두개 모두로서 간주될 수 있지만, 컴퓨팅 개체 또는 장치(910, 912 등)가 데이터 서비스를 제공하고, 컴퓨팅 개체 또는 장치(920, 922, 924, 926, 928 등)로부터 데이터를 수신하고, 컴퓨팅 개체 또는 장치(920, 922, 924, 926, 928 등)로 데이터를 전송하고, 데이터를 저장하고 처리할 경우, 컴퓨팅 개체 또는 장치(920, 922, 924, 926, 928 등)는 클라이언트로서 간주될 수 있고, 컴퓨팅 개체 또는 장치(910, 912 등)는 서버로서 간주될 수 있다. 이들 컴퓨터 중 임의의 컴퓨터는 하나 이상의 실시예에 대해 본 명세서에 기술된 메모리 관리 및 관련 기술과 관련될 수 있는 서비스 또는 작업을 요청하거나 또는 데이터를 처리할 수 있다.
서버는 일반적으로 인터넷 또는 무선 네트워크 인프라와 같은 원격 또는 로컬 네트워크를 통해 접근가능한 원격 컴퓨터 시스템이다. 클라이언트 프로세스는 제1 컴퓨터 시스템에서 액티브 상태일 수 있고, 서버 프로세스는 제2 컴퓨터 시스템에서 액티브 상태일 수 있어, 통신 매체를 통해 서로 통신하고, 이에 의해 분산된 기능을 제공하고 다수의 클라이언트가 서버의 정보수집 능력을 이용할 수 있게 된다. 사용자 프로파일링에 따라 이용되는 임의의 소프트웨어 개체는 독립적으로 주어지거나 다수의 컴퓨팅 장치 또는 개체를 통해 분산될 수 있다.
통신 네트워크/버스(940)가 인터넷인 네트워크 환경에서, 예컨대 컴퓨팅 개체 또는 장치(910, 912 등)는 컴퓨팅 개체 또는 장치(920, 922, 924, 926, 928 등)가 HTTP와 같은 다수의 공지의 프로토콜 중 임의의 것을 통해 통신하는 웹 서버일 수 있다. 컴퓨팅 개체 또는 장치(910, 912 등)는 분산 컴퓨팅 환경의 특징일 수 있는 컴퓨팅 개체 또는 장치(920, 922, 924, 926, 928 등)로서 역할할 수 있고, 그 역도 마찬가지이다.
예시적인 컴퓨팅 장치
상기한 바와 같이, 본 명세서에서 기술된 다양한 실시예들은 임의의 장치에 적용될 수 있으며, 보존 가비지 콜렉팅 알고리즘 내에서 정수를 태깅하기 위한 인프라를 구현하도록 구성될 것이다. 따라서, 모든 종류의 소형의 휴대용 및 다른 컴퓨팅 장치 및 컴퓨팅 개체는 본 명세서에서 기술된 다양한 실시예와 관련하여, 즉 장치가 태깅된 정수를 이용하는 보존 가비지 콜렉팅 알고리즘을 구현하는 것과 관련된 어떤 기능을 제공하는 어디에서나, 사용을 위해 의도됨은 물론이다. 이에 따라, 도 10에서 이하에 설명되는 아래의 범용 원격 컴퓨터는 단지 일예일 뿐이고, 본 발명은 네트워크/버스 상호운용 및 상호작용을 갖는 임의의 클라이언트로 구현될 수 있다.
필요하지는 않지만, 본 발명의 임의의 실시예는 장치 또는 개체에 대한 서비스의 개발자에 의한 사용을 위해 운영체제를 통해 부분적으로 구현될 수 있고 및/또는 본 발명의 구성요소와 관련하여 동작하는 애플리케이션 소프트웨어 내에 포함될 수 있다. 소프트웨어는 클라이언트 워크스테이션, 서버 또는 다른 장치와 같은 하나 이상의 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행 명령어의 일반 컨텍스트로 설명될 수 있다. 당업자라면 본 발명은 다양한 컴퓨터 시스템 구성 및 프로토콜로 실시될 수 있음을 이해할 것이다.
도 10은, 위에서 명백해진 바와 같이, 컴퓨팅 시스템 환경(1000)이 컴퓨팅 장치를 위한 적절한 컴퓨팅 환경의 일예일 뿐이고 본 발명의 용도 또는 기능의 범위에 대해 임의의 한정을 암시하려고 의도된 것은 아니지만, 본 발명이 구현될 수 있는 적절한 컴퓨팅 시스템 환경(1000)의 일예를 도시한다. 컴퓨팅 환경(1000)은 전형적인 운영 환경(1000)에서 예시된 구성요소 중 임의의 것이나 그 조합에 관한 종속성이나 요건을 갖는 것으로 해석되어서는 안된다.
도 10을 참고하면, 하나 이상의 실시예를 구현하는 예시적인 원격 장치는 핸드핼드 컴퓨터(1010)의 형태로 범용 컴퓨팅 장치를 포함한다. 핸드핼드 컴퓨터(1010)의 구성요소는 처리유닛(1020), 시스템 메모리(1030), 및 시스템 메모리를 포함한 다양한 시스템 구성요소를 처리유닛(1020)에 연결하는 시스템 버스(1021)를 포함할 수 있지만 이에 한정되는 것은 아니다.
컴퓨터(1010)는 일반적으로 다양한 컴퓨터 판독 매체를 포함한다. 컴퓨터 판독 매체는 컴퓨터(1010)에 의해 접근될 수 있는 임의의 이용가능한 매체일 수 있다. 시스템 메모리(1030)는 RAM 및/또는 ROM과 같은 휘발성 및/또는 비휘발성 형태의 컴퓨터 저장 매체를 포함할 수 있다. 예시적으로, 메모리(1030)는 운영체제, 애플리케이션 프로그램, 다른 프로그램 모듈, 및 프로그램 데이터를 포함할 수 있다. 소프트웨어는 DVD, CD, 또는 기타 이동식 저장소에 저장될 수 있다.
사용자는 입력 장치(1040)를 통해 컴퓨터(1010)로 명령어 및 정보를 입력할 수 있다. 모니터 또는 다른 종류의 디스플레이 장치는 비디오 메모리와 차례로 통신할 수 있는 출력 인터페이스(1050)와 같은 인터페이스를 통해 시스템 버스(1021)에 연결된다. 모니터 이외에, 컴퓨터는 출력 인터페이스(1050)를 통해 연결될 수 있는 스피커 및 프린터와 같은 다른 주변 출력 장치를 포함할 수 있다.
컴퓨터(1010)는 원격 컴퓨터(1070)와 같은 하나 이상의 다른 원격 컴퓨터로의 논리적 연결을 이용하는 네트워크 또는 분산 환경에서 동작할 수 있다. 원격 컴퓨터(1070)는 개인 컴퓨터, 서버, 라우터, 네트워크 PC, 피어(peer) 장치 또는 다른 공통 네트워크 노드, 또는 다른 원격 매체 소비 또는 전송 장치일 수 있고, 컴퓨터(1010)에 대해 상기 임의의 또는 모든 요소를 포함할 수 있다. 도 10에 도시된 논리적 연결은 LAN 또는 WAN과 같은 네트워크(1071)를 포함하지만, 다른 네트워크/버스를 포함할 수도 있다. 이러한 네트워킹 환경은 집, 사무실, 기업 컴퓨터 네트워크, 인트라넷 및 인터넷에서 흔하다.
앞서 언급한 바와 같이, 다양한 컴퓨팅 장치, 네트워크 및 광고 아키텍쳐에 대하여 전형적인 실시예가 기술되었지만, 근본 사상은 메모리 관리에 바람직한 임의의 네트워크 시스템 임의의 컴퓨팅 장치 또는 시스템에도 적용될 수 있을 것이다.
본 발명을 구현하는 다수의 방식들, 예를 들어, 응용 프로그램 및 서비스가 본 발명의 광고 기법들을 사용할 수 있게 해주는 적절한 API, 툴 킷, 드라이버 코드, 운영 체제, 컨트롤, 독립형 또는 다운로드가능한 소프트웨어 객체, 기타 등등이 있다. 청구된 발명 대상은 API (또는 다른 소프트웨어 객체)로부터의 관점에서 뿐만 아니라, 본 발명에 따른 광고 기법들에 따라 동작하는 소프트웨어 또는 하드웨어 객체로부터의 사용을 생각하고 있다. 따라서, 본 명세서에 기술된 본 발명의 다양한 구현들이 완전히 하드웨어로 된 측면, 일부는 하드웨어로 되고 일부는 소프트웨어로 된 측면은 물론, 소프트웨어로 된 측면을 가질 수 있다.
"예시적인"이라는 용어는 본 명세서에서 일례, 실례 또는 예시로서 역할한다는 것을 의미하기 위해 사용된다. 오해를 피하기 위해, 본 명세서에 개시된 발명 대상이 이러한 일례들에 의해 제한되지 않는다. 그에 부가하여, 본 명세서에서 "예시적인" 것으로 기술된 임의의 측면 또는 설계가 꼭 다른 측면들 또는 설계들보다 양호하다거나 이점이 있는 것으로 해석되어야 하는 것은 아니며, 당업자에게는 공지된 등가의 예시적인 구조들 및 기법들을 배제시키기 위한 것도 아니다. 게다가, 용어 "포함한다", "갖는다", "내포한다", 기타 유사한 단어들이 상세한 설명이나 청구항에서 사용되는 한, 오해를 피하기 위해, 이러한 용어가 임의의 부가적인 또는 다른 구성요소를 배제시키지 않고 개방형 전이구(open transition word)인 용어 "포함하는"과 유사한 방식으로 포함적인 것으로 보아야 한다.
전술한 바와 같이, 본 명세서에 기술된 다양한 기법들이 하드웨어 또는 소프트웨어, 또는 적절한 경우, 이 둘의 조합과 관련하여 구현될 수 있다. 본 명세서에서 사용되는 바와 같이, 용어 "컴포넌트", "시스템", 기타도 마찬가지로 컴퓨터-관련 엔터티(computer-related entity), 예를 들어, 하드웨어, 하드웨어와 소프트웨어의 조합, 소프트웨어, 또는 실행 중인 소프트웨어를 말하기 위한 것이다. 예를 들어, 컴포넌트는 프로세서 상에서 실행 중인 프로세스, 프로세서, 개체, 실행 파일, 실행 쓰레드, 프로그램 및/또는 컴퓨터일 수 있지만, 이들로 제한되지 않는다. 예시로서, 컴퓨터 상에서 실행 중인 응용 프로그램 및 그 컴퓨터 둘다가 컴포넌트일 수 있다. 하나 이상의 컴포넌트가 프로세스 및/또는 실행 쓰레드 내에 존재할 수 있고, 컴포넌트가 하나의 컴퓨터 상에 로컬화되어 있을 수 있고 및/또는 2개 이상의 컴퓨터에 분산되어 있을 수 있다.
상기한 시스템들은 몇개의 컴포넌트들 간의 상호 작용과 관련하여 기술되어 있다. 이러한 시스템 및 컴포넌트가, 이상에 기술한 것들의 다양한 치환 및 조합에 따라, 그 컴포넌트들 또는 지정된 하위 컴포넌트들, 지정된 컴포넌트들 또는 하위 컴포넌트들 중 일부, 및/또는 부가의 컴포넌트들을 포함할 수 있다는 것을 잘 알 수 있다. 하위 컴포넌트가 또한 부모 컴포넌트(계층적임) 내에 포함되어 있기보다는 다른 컴포넌트들에 통신 연결되어 있는 컴포넌트로서 구현될 수 있다. 그에 부가하여, 유의할 점은, 하나 이상의 컴포넌트가 취합된 기능을 제공하는 하나의 컴포넌트로 결합되거나 몇개의 분리된 하위 컴포넌트로 분할될 수 있고, 통합된 기능을 제공하기 위해 관리 계층과 같은 임의의 하나 이상의 중간 계층이 이러한 하위 컴포넌트들에 통신 연결되도록 제공될 수 있다는 것이다. 본 명세서에 기술된 임의의 컴포넌트들이 또한 본 명세서에 구체적으로 기술되어 있지는 않지만 당업자라면 일반적으로 알고 있는 하나 이상의 다른 컴포넌트들과 상호작용할 수 있다.
앞에서 서술된 예시적 시스템들의 관점에서, 개시된 발명에 따라 구현될 수 있는 방법들은 다양한 도면들의 플로우차트들을 참조해서 더 잘 인정될 수 있다. 설명의 단순화 목적으로, 방법들은 일련의 블록들로 도시되고 서술되었지만, 청구된 발명은 블록들의 순서에 의해 한정되지 않고, 일부 블록들은, 여기서 도시되고 서술된 것과는, 다른 순서 및/또는 다른 블록들과 동시에 발생할 수 있음을 이해하고 인정해야할 것이다. 비연속적, 또는 나누어진, 플로우가 플로우차트를 통해서 도시되는 경우에, 다양한 다른 가지들, 플로우 경로들, 그리고 블록들의 순서가 동일 또는 유사한 결과를 달성하기 위해서 구현될 수 있음을 인정할 수 있다. 더 나아가, 도시된 모든 블록들이 반드시 추후 서술되는 방법들의 구현에 요구되어야하는 것은 아니다.
일부 실시예들에서는, 클라이언트 측 관점이 도시되었고, 의구심의 회피를 위해서, 대응되는 서버 관점도 존재함을 이해해야할 것이고, 반대의 경우도 마찬가지이다. 유사하게, 방법이 수행될 때, 하나 이상의 요소들을 통해서 방법을 수행하도록 설정된 하나 이상의 프로세서와 저장부를 가지는 대응되는 장치가 제공될 수 있다.
다양한 실시예들이 다양한 도면들의 선호되는 실시예들에 관련돼서 서술되었지만, 다른 유사한 실시예들 또한 사용될 수 있고 또는 본질을 벗어나지 않고 동일한 기능의 수행에 있어서 서술된 실시예들에 대하여 변경안들과 추가 안들이 만들어질 수 있음을 이해해야할 것이다. 더욱더 나아가, 상술된 실시예들의 하나 이상의 측면들이 복수의 프로세싱 칩들 또는 기기들 안에서 또는 사이에서 구현될 수 있고, 복수의 기기들 사이에서 저장부는 유사한 영향을 받을 수 있다. 따라서, 본 발명은 임의의 단일 실시예에 한정되어서는 안 되고, 오히려 첨부된 청구항들에 따라 폭과 범위가 해석되어야할 것이다.

Claims (38)

  1. 방법으로서,
    호출 스택과 연관된 객체 그래프에 정수형 표기를 태깅하는 단계 - 상기 객체 그래프는 태깅된 정수형 표기와 연관된 적어도 하나의 객체 및 태깅되지 않은 포인터 표기와 연관된 적어도 하나의 객체를 포함함 - 와,
    상기 호출 스택의 실행 동안에 객체의 힙(heap)을 생성하는 단계 - 상기 객체의 힙은 상기 호출 스택과 연관된 하나 이상의 객체를 포함함 - 와,
    상기 힙의 모니터링되는 크기가 임계값을 초과하는지 판정하는 단계와,
    상기 판정에 기초해서, 상기 호출 스택의 실행되지 않은 부분에 의해 접근할 수 있는 객체에 대해서 제 1 추적을 수행하는 단계와,
    상기 태깅되지 않은 포인터 표기와 연관된 객체를 상기 태깅된 정수형 표기와 연관된 객체와 구별한 이후에, 상기 태깅되지 않은 포인터 표기와 연관된 객체에 대해서만 제 2 추적을 수행하는 단계와,
    상기 호출 스택의 실행되지 않은 부분에 의해 접근할 수 없는 하나 이상의 객체에 대응하는 메모리 로케이션을 회수(reclaim)하는 단계
    를 포함하는 방법.
  2. 제 1 항에 있어서,
    상기 제 1 추적은, 상기 호출 스택의 실행되지 않은 부분에 의해 접근할 수 있는 루트 객체에 대해서 수행되는
    방법.
  3. 제 1 항에 있어서,
    상기 제 2 추적은, 상기 제 1 추적이 수행되는 하나 이상의 객체와 관련된 객체의 후속 추적인
    방법.
  4. 제 1 항에 있어서,
    상기 힙의 모니터링되는 크기는 상기 호출 스택의 실행 동안 결정되는
    방법.
  5. 제 1 항에 있어서,
    상기 메모리 로케이션을 회수하는 단계는, 상기 호출 스택의 실행되지 않은 부분에 의해 접근할 수 있는 객체를 상기 힙의 초기 저장 로케이션에 유지하는 단계를 포함하는
    방법.
  6. 제 1 항에 있어서,
    상기 메모리 로케이션을 회수하는 단계는, 상기 호출 스택의 실행되지 않은 부분에 의해 접근할 수 없는 하나 이상의 객체에 할당된 메모리를 클리어(clearing)하는 단계를 포함하는
    방법.
  7. 제 3 항에 있어서,
    상기 제 2 추적은, 상기 태깅된 정수형 표기와 연관된 객체에 대해서는 상기 후속 추적을 생략하는 것을 더 포함하는
    방법.
  8. 적어도 하나의 프로세서 및 메모리를 포함하는 장치로서,
    상기 적어도 하나의 프로세서는,
    호출 스택과 연관된 객체 그래프에 정수형 표기를 태깅하고 - 상기 객체 그래프는 태깅된 정수형 표기와 연관된 적어도 하나의 객체 및 태깅되지 않은 포인터 표기와 연관된 적어도 하나의 객체를 포함함 - ,
    상기 호출 스택의 실행 동안에 객체의 힙을 생성하며 - 상기 객체의 힙은 상기 호출 스택과 연관된 하나 이상의 객체를 포함함 - ,
    상기 힙의 모니터링되는 크기가 임계값을 초과하는지 판정하고,
    상기 판정에 기초해서, 상기 호출 스택의 실행되지 않은 부분에 의해 접근할 수 있는 객체에 대해서 제 1 추적을 수행하며,
    상기 태깅되지 않은 포인터 표기와 연관된 객체를 상기 태깅된 정수형 표기와 연관된 객체와 구별한 이후에, 상기 태깅되지 않은 포인터 표기와 연관된 객체에 대해서만 제 2 추적을 수행하고,
    상기 호출 스택의 실행되지 않은 부분에 의해 접근할 수 없는 하나 이상의 객체에 대응하는 메모리 로케이션을 회수하도록
    구성되는
    장치.
  9. 제 8 항에 있어서,
    상기 제 1 추적은, 상기 호출 스택의 실행되지 않은 부분에 의해 접근할 수 있는 루트 객체에 대해서 수행되는
    장치.
  10. 제 8 항에 있어서,
    상기 제 2 추적은, 상기 제 1 추적이 수행되는 하나 이상의 객체와 관련된 객체의 후속 추적인
    장치.
  11. 제 8 항에 있어서,
    상기 힙의 모니터링되는 크기는 상기 호출 스택의 실행 동안 결정되는
    장치.
  12. 제 8 항에 있어서,
    상기 적어도 하나의 프로세서는, 상기 호출 스택의 실행되지 않은 부분에 의해 접근할 수 있는 객체를 상기 힙의 초기 저장 로케이션에 유지하도록 더 구성되는
    장치.
  13. 제 8 항에 있어서,
    상기 적어도 하나의 프로세서는, 상기 호출 스택의 실행되지 않은 부분에 의해 접근할 수 없는 하나 이상의 객체에 할당된 메모리를 클리어하도록 더 구성되는
    장치.
  14. 제 10 항에 있어서,
    상기 적어도 하나의 프로세서는, 상기 제 2 추적 동안, 상기 태깅된 정수형 표기와 연관된 객체에 대해서는 상기 후속 추적을 생략하도록 더 구성되는
    장치.
  15. 적어도 하나의 프로세서 및 메모리를 포함하는 시스템으로서,
    상기 메모리는 상기 적어도 하나의 프로세서로 하여금 동작을 수행하게 하는 명령어를 포함하고 있는 적어도 하나의 모듈을 포함하고,
    상기 동작은,
    호출 스택과 연관된 객체 그래프에 정수형 표기를 태깅하는 것 - 상기 객체 그래프는 태깅된 정수형 표기와 연관된 적어도 하나의 객체 및 태깅되지 않은 포인터 표기와 연관된 적어도 하나의 객체를 포함함 - 과,
    상기 호출 스택의 실행 동안에 객체의 힙을 생성하는 것 - 상기 객체의 힙은 상기 호출 스택과 연관된 하나 이상의 객체를 포함함 - 과,
    상기 힙의 모니터링되는 크기가 임계값을 초과하는지 판정하는 것과,
    상기 판정에 기초해서, 상기 호출 스택의 실행되지 않은 부분에 의해 접근할 수 있는 객체에 대해서 제 1 추적을 수행하는 것과,
    상기 태깅되지 않은 포인터 표기와 연관된 객체를 상기 태깅된 정수형 표기와 연관된 객체와 구별한 이후에, 상기 태깅되지 않은 포인터 표기와 연관된 객체에 대해서만 제 2 추적을 수행하는 것과,
    상기 호출 스택의 실행되지 않은 부분에 의해 접근할 수 없는 하나 이상의 객체에 대응하는 메모리 로케이션을 회수하는 것
    을 포함하는
    시스템.
  16. 제 15 항에 있어서,
    상기 제 1 추적은, 상기 호출 스택의 실행되지 않은 부분에 의해 접근할 수 있는 루트 객체에 대해서 수행되는
    시스템.
  17. 제 15 항에 있어서,
    상기 제 2 추적은, 상기 제 1 추적이 수행되는 하나 이상의 객체와 관련된 객체의 후속 추적인
    시스템.
  18. 제 15 항에 있어서,
    상기 힙의 모니터링되는 크기는 상기 호출 스택의 실행 동안 결정되는
    시스템.
  19. 제 15 항에 있어서,
    메모리 로케이션을 회수하는 것은, 상기 호출 스택의 실행되지 않은 부분에 의해 접근할 수 있는 객체를 상기 힙의 초기 저장 로케이션에 유지하는 것을 더 포함하는
    시스템.
  20. 제 15 항에 있어서,
    상기 동작은,
    상기 호출 스택의 실행되지 않은 부분에 의해 접근할 수 없는 하나 이상의 객체에 할당된 메모리를 클리어하는 것을 더 포함하는
    시스템.
  21. 삭제
  22. 삭제
  23. 삭제
  24. 삭제
  25. 삭제
  26. 삭제
  27. 삭제
  28. 삭제
  29. 삭제
  30. 삭제
  31. 삭제
  32. 삭제
  33. 삭제
  34. 삭제
  35. 방법으로서,
    호출 스택과 연관된 객체 그래프에 정수형 표기를 태깅하는 단계 - 상기 객체 그래프는 태깅된 정수형 표기와 연관된 적어도 하나의 루트 객체 및 포인터 표기와 연관된 적어도 하나의 루트 객체를 포함함 - 와,
    상기 호출 스택의 실행 동안에 객체의 힙을 생성하는 단계 - 상기 객체의 힙은 상기 호출 스택과 연관된 하나 이상의 객체를 포함함 - 와,
    상기 힙의 모니터링되는 크기가 임계값을 초과하는지 판정하는 단계와,
    상기 판정에 기초해서, 상기 호출 스택의 실행되지 않은 부분에 의해 접근할 수 있는 객체에 대해서 제 1 추적을 수행하는 단계와,
    상기 태깅된 정수형 표기와 연관되지 않은 객체에 대해서 제 2 추적을 수행하는 단계와,
    상기 호출 스택의 실행되지 않은 부분에 의해 접근할 수 없는 하나 이상의 객체에 대응하는 메모리 로케이션을 회수하는 단계
    를 포함하는 방법.
  36. 삭제
  37. 삭제
  38. 삭제
KR1020187026942A 2011-04-25 2012-04-06 메모리 관리를 위한 보존 가비지 콜렉팅 및 정수 태깅 기법 KR101993793B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/093,724 US8862640B2 (en) 2011-04-25 2011-04-25 Conservative garbage collecting and tagged integers for memory management
US13/093,724 2011-04-25
PCT/US2012/032639 WO2012148650A2 (en) 2011-04-25 2012-04-06 Conservative garbage collecting and tagged integers for memory management

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020137028115A Division KR101935346B1 (ko) 2011-04-25 2012-04-06 메모리 관리를 위한 보존 가비지 콜렉팅 및 정수 태깅 기법

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020197004511A Division KR102061466B1 (ko) 2011-04-25 2012-04-06 메모리 관리를 위한 보존 가비지 콜렉팅 및 정수 태깅 기법

Publications (2)

Publication Number Publication Date
KR20180108850A KR20180108850A (ko) 2018-10-04
KR101993793B1 true KR101993793B1 (ko) 2019-06-27

Family

ID=47022110

Family Applications (4)

Application Number Title Priority Date Filing Date
KR1020187026942A KR101993793B1 (ko) 2011-04-25 2012-04-06 메모리 관리를 위한 보존 가비지 콜렉팅 및 정수 태깅 기법
KR1020197004511A KR102061466B1 (ko) 2011-04-25 2012-04-06 메모리 관리를 위한 보존 가비지 콜렉팅 및 정수 태깅 기법
KR1020137028115A KR101935346B1 (ko) 2011-04-25 2012-04-06 메모리 관리를 위한 보존 가비지 콜렉팅 및 정수 태깅 기법
KR1020197014525A KR102139043B1 (ko) 2011-04-25 2012-04-06 메모리 관리를 위한 보존 가비지 콜렉팅 및 정수 태깅 기법

Family Applications After (3)

Application Number Title Priority Date Filing Date
KR1020197004511A KR102061466B1 (ko) 2011-04-25 2012-04-06 메모리 관리를 위한 보존 가비지 콜렉팅 및 정수 태깅 기법
KR1020137028115A KR101935346B1 (ko) 2011-04-25 2012-04-06 메모리 관리를 위한 보존 가비지 콜렉팅 및 정수 태깅 기법
KR1020197014525A KR102139043B1 (ko) 2011-04-25 2012-04-06 메모리 관리를 위한 보존 가비지 콜렉팅 및 정수 태깅 기법

Country Status (7)

Country Link
US (3) US8862640B2 (ko)
EP (1) EP2702490B1 (ko)
JP (2) JP2014513354A (ko)
KR (4) KR101993793B1 (ko)
CN (2) CN103493025B (ko)
ES (1) ES2615855T3 (ko)
WO (1) WO2012148650A2 (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8862640B2 (en) 2011-04-25 2014-10-14 Microsoft Corporation Conservative garbage collecting and tagged integers for memory management
US20140115291A1 (en) * 2012-10-19 2014-04-24 Advanced Micro Devices, Inc. Numa optimization for garbage collection of multi-threaded applications
KR101703984B1 (ko) * 2014-07-18 2017-02-09 주식회사 큐램 메모리 처리 방법, 및 메모리 처리 시스템
FR3070775B1 (fr) * 2017-09-04 2019-08-23 Vsora Allocation dynamique utilisant plusieurs piles
US10459656B1 (en) * 2018-06-25 2019-10-29 International Business Machines Corporation Method and apparatus to represent activation frame for pause-less garbage collection
US11879789B2 (en) * 2019-07-02 2024-01-23 International Business Machines Corporation On-chip thermometer for superconducting quantum computing devices
USD967377S1 (en) 2020-10-08 2022-10-18 Samsung Electronics Co., Ltd. Air purifier
KR20220102421A (ko) * 2021-01-13 2022-07-20 삼성전자주식회사 전자 장치 및 전자 장치의 메모리 관리 방법

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060173897A1 (en) 2005-01-31 2006-08-03 Oracle International Corporation Identification of false ambiguous roots in a stack conservative garbage collector

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2920660B2 (ja) * 1990-06-07 1999-07-19 富士ゼロックス株式会社 ガーベッジコレクションシステムにおけるアクセス可能なオブジェクトの判別方法
US5819299A (en) 1996-06-06 1998-10-06 Electric Communities Process for distributed garbage collection
US6101580A (en) 1997-04-23 2000-08-08 Sun Microsystems, Inc. Apparatus and method for assisting exact garbage collection by using a stack cache of tag bits
US5920876A (en) 1997-04-23 1999-07-06 Sun Microsystems, Inc. Performing exact garbage collection using bitmaps that identify pointer values within objects
US6782192B1 (en) * 1999-04-20 2004-08-24 Victor Company Of Japan, Ltd. Recording medium apparatus and method related to information representing tunes
US6675354B1 (en) 1999-11-18 2004-01-06 International Business Machines Corporation Case-insensitive custom tag recognition and handling
US6598141B1 (en) * 2001-03-08 2003-07-22 Microsoft Corporation Manipulating interior pointers on a stack during garbage collection
GB0229892D0 (en) 2002-12-21 2003-01-29 Ibm Method and apparatus for caching documents
US7168063B2 (en) 2003-06-10 2007-01-23 Microsoft Corporation Systems and methods for employing tagged types in a dynamic runtime environment
US7249235B2 (en) 2004-06-21 2007-07-24 Oracle International Corporation Architecture for a scalable and user-extensible heap dump analysis tool
US7325106B1 (en) * 2004-07-16 2008-01-29 Sun Microsystems, Inc. Method for monitoring heap for memory leaks
US7873943B2 (en) 2005-12-28 2011-01-18 Intel Corporation Inserting stack clearing code in conservative garbage collection
US7631024B2 (en) 2006-01-03 2009-12-08 Sun Microsystems, Inc. Method and apparatus for facilitating mark-sweep garbage collection with reference counting
US7614003B2 (en) 2006-10-23 2009-11-03 Adobe Systems Incorporated Rendering hypertext markup language content
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
JP5153539B2 (ja) * 2008-09-22 2013-02-27 株式会社日立製作所 メモリ管理方法およびその方法を用いるコンピュータ
US8341608B2 (en) 2008-11-13 2012-12-25 Visicom Media, Inc. Cross-browser toolbar and method thereof for facilitating cross-browser interoperability
US8335806B2 (en) * 2010-02-01 2012-12-18 Oracle America, Inc. Marking algorithm for garbage collection using a rescan map
US8423589B2 (en) * 2011-03-14 2013-04-16 International Business Machines Corporation Copy collector with efficient abort-on-copy transition to mark collector
US8862640B2 (en) 2011-04-25 2014-10-14 Microsoft Corporation Conservative garbage collecting and tagged integers for memory management
CN102622599B (zh) * 2012-01-21 2015-12-02 松翰科技股份有限公司 使用点编码的数据输出输入方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060173897A1 (en) 2005-01-31 2006-08-03 Oracle International Corporation Identification of false ambiguous roots in a stack conservative garbage collector

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
SIMON MARLOW 외 1인. Making a Fast Curry: Push/Enter vs. Eval/Apply for Higher-order Languages. Proceedings of the 9th ACM SIGPLAN International Conference on Functional Programming. 2004.09.19. 1부.*

Also Published As

Publication number Publication date
CN103493025A (zh) 2014-01-01
JP6637022B2 (ja) 2020-01-29
KR20190020837A (ko) 2019-03-04
JP2018067331A (ja) 2018-04-26
CN103493025B (zh) 2016-10-05
KR102139043B1 (ko) 2020-07-29
WO2012148650A3 (en) 2013-02-28
CN106294199B (zh) 2019-11-05
EP2702490A4 (en) 2015-01-21
KR20190058697A (ko) 2019-05-29
EP2702490B1 (en) 2016-11-16
US8862640B2 (en) 2014-10-14
EP2702490A2 (en) 2014-03-05
US20150006557A1 (en) 2015-01-01
US20170322955A1 (en) 2017-11-09
WO2012148650A2 (en) 2012-11-01
KR101935346B1 (ko) 2019-01-04
US20120271866A1 (en) 2012-10-25
US9684679B2 (en) 2017-06-20
KR102061466B1 (ko) 2019-12-31
CN106294199A (zh) 2017-01-04
KR20180108850A (ko) 2018-10-04
US10628398B2 (en) 2020-04-21
KR20140019413A (ko) 2014-02-14
JP2014513354A (ja) 2014-05-29
ES2615855T3 (es) 2017-06-08

Similar Documents

Publication Publication Date Title
KR101993793B1 (ko) 메모리 관리를 위한 보존 가비지 콜렉팅 및 정수 태깅 기법
JP5425286B2 (ja) データ処理システムのメモリ使用状況を追跡する方法
US10891264B2 (en) Distributed, scalable key-value store
US8959490B2 (en) Optimizing heap memory usage
TWI549060B (zh) Access methods and devices for virtual machine data
US10467086B2 (en) Determining causes of external fragmentation of memory
US11016886B2 (en) Multi-ring shared, traversable, and dynamic advanced database
US20150100835A1 (en) Log output condition setting method and apparatus
US10963374B2 (en) Memory allocation analysis
CN110781166B (zh) 存储系统中数据管理方法和装置
KR101961501B1 (ko) 메모리 관리를 위한 동시 마킹 및 동시 스위핑을 이용한 보존적인 불용 정보 수집 기법
US20150261646A1 (en) Selective profiling of applications
WO2019072088A1 (zh) 一种文件管理方法、文件管理装置、电子设备及存储介质
US9760388B1 (en) Memory monitoring tool
US11119681B2 (en) Opportunistic compression
CN115562675A (zh) 固件中二进制文件的解析方法、装置、设备和存储介质
CN117009118A (zh) 一种内存处理方法、装置、设备、介质及程序产品
CN113742133A (zh) 一种元数据恢复方法、装置、系统及计算机可读存储介质

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right