KR101961501B1 - 메모리 관리를 위한 동시 마킹 및 동시 스위핑을 이용한 보존적인 불용 정보 수집 기법 - Google Patents

메모리 관리를 위한 동시 마킹 및 동시 스위핑을 이용한 보존적인 불용 정보 수집 기법 Download PDF

Info

Publication number
KR101961501B1
KR101961501B1 KR1020137025539A KR20137025539A KR101961501B1 KR 101961501 B1 KR101961501 B1 KR 101961501B1 KR 1020137025539 A KR1020137025539 A KR 1020137025539A KR 20137025539 A KR20137025539 A KR 20137025539A KR 101961501 B1 KR101961501 B1 KR 101961501B1
Authority
KR
South Korea
Prior art keywords
objects
memory
heap
script
accessible
Prior art date
Application number
KR1020137025539A
Other languages
English (en)
Other versions
KR20140009422A (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 KR20140009422A publication Critical patent/KR20140009422A/ko
Application granted granted Critical
Publication of KR101961501B1 publication Critical patent/KR101961501B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • G06F12/0269Incremental or concurrent garbage collection, e.g. in real-time systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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)
  • Memory System (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

보존적인 불용 정보 수집의 예시들이 설명된다. 일례에서, 객체들의 힙은 스크립트의 실행 동안에 생성되고, 실행되고 있지 않은 부분의 스크립트 객체들은 상기 힙의 대응되는 메모리 위치에서 추적된다. 힙은 스크립트의 실행과 동시에 마킹되어 마킹된 힙은 접근 가능 객체들 및 접근 불가능 객체들을 포함한다. 마킹에 기초하여, 접근 불가능 객체들에 할당된 메모리는 스크립트의 실행과 동시에 가용하게 된다. 다른 예시에서, 호출 스택과 연관된 객체 그래프가 생성되며 추적되어 스택의 실행되고 있지 않은 부분 내의 스크립트 객체들이 힙 상의 대응되는 메모리 위치에서 추적된다. 힙 객체들은 스택의 실행과 동시에 마킹되어 마킹된 힙은 접근 가능 객체들 및 접근 불가능 객체들을 포함한다. 마킹된 힙에 기초하여 스택의 실행과 동시에 접근 불가능 객체들에 할당된 메모리는 제거된다.

Description

메모리 관리를 위한 동시 마킹 및 동시 스위핑을 이용한 보존적인 불용 정보 수집 기법{CONSERVATIVE GARBAGE COLLECTING WITH CONCURRENT MARKING AND CONCURRENT SWEEPING FOR MEMORY MANAGEMENT}
몇몇 종래 시스템에 관한 배경을 통해, 컴퓨팅 장치들은 통상적으로 정보 및 관련된 애플리케이션들을 저장하였음을 주목할 필요가 있다. 상기 및 관련 목적을 위해, 효율적인 메모리 관리 스키마를 구현하는 것이 최적의 컴퓨팅 성능을 성취하는 것을 도울 수 있다는 점을 주목할 만하다. 자동 메모리 관리 스키마들에 대한 발전은 수동적인 메모리 관리 스키마에 비해 현저히 이루어졌다. 일례로, 불용 정보 수집 알고리즘(Garbage collector algorithms)은 자동 메모리 관리 스키마로서, 특정 프로그램에 의해 더 이상 사용되고 있지 않은 객체들에 의해 점유된 메모리를 회수(reclaim)하고자 시도한다.
불용 정보 추적 수집기(Tracing garbage collectors)는 불용 정보 수집기의 일반적인 유형이다. 불용 정보 추적 수집기는 먼저 어떤 객체들이 접근 가능(또는 잠재적으로 접근 가능)한지 판정한 다음 나머지 객체들을 모두 폐기한다. 접근 가능한 객체는 프로그램 환경 내에 그 객체에 직접 또는 다른 접근 가능한 객체로부터의 참조를 통해 연결될 수 있는 어떤 변수가 존재하는 객체로 정의될 수 있다. 더 구체적으로는, 객체들에는 일반적으로 두 가지 방법으로 접근 가능하다. 첫째, 루트(roots)로 알려진 객체의 구별되는 세트들은 접근 가능하다고 가정된다. 전형적으로, 이것은 호출 스택(call stack)(즉, 현재 동작하고 있는 기능 내의 모든 로컬 변수 및 파라미터) 내부 및 임의의 글로벌 변수들 내부 어디로부터든 참조되는 모든 객체들을 포함한다. 둘째, 접근 가능한 객체로부터 참조된 것은 그 자체로 접근 가능하다고 간주된다. 그러나, 종래의 불용 정보 수집기를 복잡하게 만드는 문제는 불용 정보 수집기가 더 이상 접근 가능하지 않은 객체들에게 가용 메모리(free memory)를 신속하고 효율적으로 할당해야 한다는 점에 있다.
오늘날의 메모리 관리 스키마들에 대한 전술한 문제점들은 모든 것을 총망라한 것은 아니고, 종래 시스템의 몇 가지 문제점들에 대한 개요를 제공하고자하는 의도를 가진다. 종래 기술의 상태의 다른 문제점들 및 다양한 비제한적인 실시예들의 몇몇 대응하는 이점은 후술하는 상세한 설명의 리뷰 후에 더욱 명확히 드러날 것이다.
후술할 상세한 설명 및 도면들에서 보다 상세히 설명될 예시적이고 비제한적인 실시예들의 다양한 측면에 대한 기본적인 또는 일반적인 이해가 가능하도록 단순화된 요약이 제공된다. 이러한 요약은 확장된 또는 종합적인 개요로서 의도되지 않는다. 오히려, 이러한 요약의 유일한 목적은 몇 가지 예시적이고 비제한적인 실시예들과 관련된 몇몇 개념들을 후술할 다양한 실시예들에 대한 보다 상세한 설명의 도입부로서 단순한 형태로 제시하고자 하는 것이다.
하나 이상의 실시예들 및 대응되는 개시 내용에 관하여, 다양한 비제한적인 예시들이 메모리 관리를 위한 보존적인 불용 정보 수집과 관련하여 설명된다. 하나의 예에서, 보존적인 불용 정보 수집 알고리즘 내에서 객체에 대해 동시적인(concurrently) 마킹과 스위핑(sweeping)을 수행하는 방법이 제공된다. 이러한 방법은 스크립트의 실행 동안에 객체 힙(heap)을 생성하고, 상기 스크립트의 실행되고 있지 않는 부분에 포함된 스크립트 객체들에 대해 상기 힙의 메모리 위치의 대응하는 세트까지 추적하는 것을 포함할 수 있다. 실시예는 마킹된 힙이 접근 가능한 객체 및 접근 불가능한 객체를 포함하도록 상기 스크립트의 실행과 함께 상기 힙의 적어도 일부에 동시적으로 마킹을 하는 것을 포함할 수 있다. 이러한 특정 실시예에 있어서, 접근 가능한 객체들은 스크립트의 실행되고 있지 않은 부분에 의해 접근 가능한 반면, 접근 불가능한 객체들은 상기 스크립트의 실행되고 있지 않은 부분에 의해 접근 불가능하다. 이러한 방법은 마킹에 기초하여, 스크립트의 실행과 함께 접근 불가능한 객체들에 할당된 메모리를 동시적으로 가용(freeing)하게 하는 것을 포함한다.
다른 실시예에서, 객체를 동시적으로 마킹하고 스위핑하도록 구성된 메모리 관리 장치가 개시된다. 이러한 실시예에서, 메모리 관리 장치는 메모리 내에 저장된 컴퓨터 실행가능 컴포넌트들을 실행하도록 구성된 프로세서를 포함한다. 컴퓨터 실행가능 컴포넌트는 힙 컴포넌트(heap component), 추적 컴포넌트, 마킹 컴포넌트, 및 재활용 컴포넌트(recycling component)를 포함한다. 힙 컴포넌트는 스크립트의 실행 동안에 객체의 힙을 생성하도록 구성되고, 이에 비하여 추적 컴포넌트는 상기 힙의 메모리 위치의 대응하는 세트에서, 스크립트의 실행되고 있지 않은 부분에 포함된 스크립트 객체들을 추적하도록 구성된다. 그 다음, 마킹 컴포넌트는 스크립트의 실행과 함께 상기 힙의 적어도 일부에 동시적으로 마킹을 하도록 구성된다. 상기 실시예에서는, 마킹된 힙은 스크립트의 실행되고 있지 않은 부분들에 의해 접근 가능한 객체들과 스크립트의 실행되고 있지 않은 부분들에 의해 접근 불가능한 객체들을 포함한다. 다음으로, 재활용 컴포넌트는 상기 마킹된 힙에 따라 스크립트의 실행과 함께 접근 불가능한 객체들에 할당된 메모리를 동시적으로 가용하게 하도록 구성된다.
또 다른 실시에에서, 보존적인 불용 정보 수집 알고리즘 내에서 객체들에 대해 동시적으로 마킹과 스위핑을 하기 위한 컴퓨터 판독가능 저장 매체가 개시되어 있다. 이러한 실시예에서, 컴퓨터 판독가능 저장 매체는 적어도 하나의 프로세서로 하여금 다양한 동작들을 수행하도록 하는 컴퓨터 판독가능 명령어들을 포함한다. 예를 들어, 그러한 동작들은, 호출 스택의 실행되고 있지 않은 부분에 포함된 스크립트 객체들이 호출 스택이 힙 상의 메모리 위치의 대응되는 세트까지 추적되도록, 연관된 객체 그래프를 생성하는 동작과, 상기 객체 그래프를 추적하는 동작을 포함할 수 있다. 이러한 실시예는 호출 스택의 실행과 함께 힙 객체들을 동시적으로 마킹하는 것을 포함한다. 이러한 특정 실시예에서, 마킹된 힙은 호출 스택의 실행되고 있지 않은 부분에 의해 접근 가능한 접근 가능 객체와, 호출 스택의 실행되고 있지 않은 부분에 의해 접근 불가능한 접근 불가능 객체를 포함한다. 마킹된 힙에 기초하여, 호출 스택의 실행과 함께 접근 불가능 객체에 할당된 메모리는 동시적으로 가용하게 된다.
다른 실시예들과 다양한 제한되지 않는 예들, 시나리오들 및 구현 예들이 이하에서 보다 상세하게 설명된다.
다양하고 제한적이지 않은 실시예들이 이하에서 첨부된 도면들을 참조하여 설명된다.
도 1은 실시예에 따른 보존적인 불용 정보 수집 알고리즘을 구현하기 위한 예시적인 시스템을 도시한다.
도 2는 실시예에 따른 예시적인 객체의 힙을 도시하는 다이어그램이다.
도 3은 실시예에 따른 예시적인 객체 그래프를 도시하는 다이어그램이다.
도 4는 실시예에 따른 예시적인 메모리 가용(memory freeing)을 도시하는 다이어그램이다.
도 5는 실시예에 따른 예시적인 메모리 관리 장치를 도시하는 블록 다이어그램이다.
도 6은 실시예에 따른 보존적인 불용 정보 수집 알고리즘을 구현하기 위한 예시적이고 비제한적인 실시예를 도시하는 흐름 다이어그램이다.
도 7은 실시예에 따른 예시적인 자원 관리 유닛을 도시하는 블록 다이어그램이다.
도 8은 실시예에 따른 객체에 대한 동시적인 마킹과 스위핑을 수행하는 예시적이고 비제한적인 실시예를 도시하는 흐름 다이어그램이다.
도 9는 본 발명의 상세한 설명에 기재된 다양한 실시예들이 구현될 수 있는 예시적이고 비제한적인 네트워크 환경을 나타내는 블록 다이어그램이다.
도 10은 본 발명의 상세한 설명에 기재된 다양한 실시예들의 하나 이상의 예시들이 구현될 수 있는 예시적이고 비제한적인 시스템 또는 운영 환경을 나타내는 블록 다이어그램이다.
개관
앞서 설명한 것처럼, 힙 상의 접근 가능한 객체와 접근 불가능한 객체를 구분하는 보존적인 불용 정보 수집 알고리즘을 구현하는 것이 바람직하다. 다양한 실시예에서, 메모리 관리는 자연어 코드 호환성(native code compatibility)을 가지도록 디자인이 개량된다. 일례로, 스크립트 객체는 객체들로서 관리되는 경우는 적고 메모리의 자연어 부분으로서 관리되어 객체들 사이의 참조 카운팅(reference counting)이 제거된다. 또한, 보존적인 불용 정보 수집 알고리즘은 포인터인 모든 것이 인식되고 있다고 가정되지 않은 채로 구현된다. 예를 들어, 실시간 공통 언어(common language runtime, CLR)를 사용하는 불용 정보 수집기는 스택(stack)이 강하게 유형화(typed)된다. 그러나, 예를 들어, C 코드 및 스크립트 코드와 같은 자연어 코드를 사용하는 경우, 사용자는 스택 상에 무엇이 있는지 모른다. 이와 관련하여, 참조 카운팅 모델을 사용하는 것 대신에, 객체들이 직접 상호 작용한다고 고려된다.
본 명세서에서 개시되는 다양한 실시예들은 보존적인 불용 정보 수집 알고리즘 내에서 객체들에 대한 동시적인 마킹 및 스위핑의 수행에 대한 것이다. 또한, 본 명세서에서 설명되는 예시들은 문서 객체 모델에 대하여 스크립트(예를 들어, 자바 스크립트)의 효율적인 실행을 용이하게 하기 위해 객체들을 마킹 및 스위핑하는 것에 대한 것이다. 예시적인 일 실시예에서, 동시적인 마킹은 힙 상의 객체들에 걸치는(traversal) 것을 포함하고, 접근 가능한 모든 객체는 "1"이 할당되는 반면에 접근 불가능한 모든 객체는 "0"이 할당된다. 동시적인 마킹이 완료되면, 동시적인 스위퍼(sweeper)가 힙을 스캔하고 접근 불가능 객체들(즉, "0"으로 마킹된 객체들)을 "가용 메모리" 리스트에 위치시킨다.
동시적인 스위핑의 구현의 유리한 점은 스크립트 스레드가 실행됨에 따라 할당자(allocator)로 메모리가 다시 재활용되므로 적은 메모리가 사용된다는 것이다. 여기서, 몇몇 데이터 구조는 동시적인 마킹 및 스위핑을 성취하는데 방해가 된다는 것이 이해되어야 한다. 예를 들어, 몇몇 데이터 구조는 마킹된 비트와 별도로 가용 비트를 유지하고 있다. 또한, 별도의 힙 블록 페이지가 유지되어 전체 페이지가 가용한 것으로 인식될 수 있는 경우도 있다. 이러한 페이지들을 재생(reclaim)하기 위해 필요한 리소스는 종래의 기술들에 비해 감소되었지만, 바람직하지 못하게도 힙 블록들은 많은 페이지들에 할당되며 더 많은 리소스가 재생을 위해 요구된다. 또한, 본 명세서에서 설명되는 예시들을 구현하는 것에 의해 간단한 체크만으로 페이지 전체가 가용한지 여부에 대해 신속히 인식 가능하다.
다른 실시예에서, 종래의 스위퍼들이 임의의 스위핑된 메모리가 작업을 수행하는 스레드에 의해 재사용될 수 있기 전에 어떠한 방식으로 전체 스위핑의 실행을 요구하는 것에 비하여, 스위핑 프로세스와 함께 잠금 가용 큐(lock-free queue)가 생성된다. 이러한 실시예들에서, 잠금 가용 큐는 스위핑 동안에 작업 스레드(즉, 웹 페이지를 실행하는 스레드)로 메모리의 일부를 되돌리는 처리를 가능하게 하는 데이터 구조가 될 수 있으며, 이러한 잠금 가용 큐는 작업 세트의 일부로서 사용되는 메모리의 규모를 현저히 감소시킨다. 따라서 보다 개선된 재활용 매커니즘이 개시되며, 이러한 재활용은 바람직하게는 보다 나은 형태로 수행된다.
보존적인 불용 정보 수집을 위한 동시적인 마킹 스위킹
웹 브라우징 경험이 최소한의 상호 작용만을 갖는 정보의 플랫(flat)한 프레젠테이션으로부터 클라이언트 측에서 많은 상호 작용을 가지는 보다 풍부한 애플리케이션 또는 애플릿 경험으로 진화하기 시작함에 따라 몇몇 이슈들이 대두되었다. 보다 일반적으로, 웹 브라우징 경험은 정보 디스플레이와 디스플레이 상의 객체들과의 보다 풍부한 상호 작용의 혼합으로서 진화하고 있다. 이러한 진화와 관련된 특정 도전 과제들은, 원래는 클라이언트 상에서 자연어 코드에 기초하여 정보의 플랫한 프레젠테이션을 위해 주로 디자인된 종래의 문서 객체 모델(DOM)을 자바 스크립트 객체들과 같이 스크립트 코드를 유동적으로 처리하는 경험에 적용하는 것에 기초한다.
스피드의 향상은 원활한 사용자 경험을 용이하게 하기 위해 도움이 된다. 예를 들어, 과거의 플라이 아웃 메뉴(flyout menu)들에 의하면 웹 경험이 서버와의 통신에 기초한 딜레이들에 의해 감퇴되었다. 그러나, 스크립트들은 작은 규모의 프로그램들이 서버와 통신하지 않고 플라이 아웃 메뉴들이 DOM을 수정할 수 있도록 해준다. 사람들이 서버와 통신하지 않고 더 많은 플라이 아웃 메뉴들을 사용하고 싶어함에 따라, 스크립트 코드가 빨리 실행되도록 하는 것이 도전 과제가 되었다.
사용자 경험이 DOM을 효과적으로 스크립트로 만드는 것에 의해 많은 영향을 받기 때문에, DOM을 가능한 한 빨리 변경하여 상호 작용 응답을 최대화하는 것이 바람직하다. 과거에, 어느 객체도 스크립트화하는, 예를 들어, iDispatch, iActiveScript 등과 같은 인터페이스의 세트들을 포함하는 OLE(object linking and embedding)의 사용에 의해, 스크립트 엔진과 DOM의 자연어 클래스들과의 통신은 열악하였다. 그러나, 이러한 방법들이 느리기 때문에 이에 대한 개선이 요구되어 왔다. 따라서, 본 명세서에서 개시되는 실시예들은 보존적인 불용 정보 수집 알고리즘 내에서 객체에 대한 동시적인 마킹 및 스위핑에 의해 스크립트 실행 속도를 향상시키는 것과 관련된다.
도 1은 실시예에 따른 보존적인 불용 정보 수집 알고리즘을 구현하는 것을 용이하게 하는 예시적인 시스템을 도시한다. 도시된 것처럼, 시스템(100)은 메모리(120)에 통신 가능하게 연결된 메모리 관리 유닛(110)을 포함할 수 있다. 예를 들어, 메모리 관리 유닛(110)은 메모리(120)의 메모리 공간을 관리하기 위해 보존적인 불용 정보 수집 알고리즘을 구현하도록 구현된다. 또한, 메모리 관리 유닛(110)은 스크립트(112)의 실행과 연관된 마킹된 객체 그래프(114)를 생성하도록 구현된다. 일례로, 스크립트(112)는 DOM에 대하여 실행되는 자바스크립트(javascript)일 수 있고, 자바스크립트는 메모리(120) 내 메모리 공간의 할당을 요구하는 다양한 객체를 포함한다. 특정 실시예에서, "접근 가능"한 객체와 "접근 불가능"한 객체 사이의 구별을 용이하게 하기 위해, 마킹된 객체 그래프(114) 내에 포함된 스크립트 객체들은 스크립트(112)의 실행되고 있지 않은 부분에 의해 접근 가능한지 여부에 따라 마킹된다.
일 실시예에서, 스크립트 객체에 할당된 메모리는 그러한 객체를 힙 상에 저장하는 것을 포함할 수 있다. 도 2를 참조하면, 실시예에 따른 예시적인 객체들의 힙의 블록 다이어그램이 제공된다. 도시된 것처럼, 힙(200)은 사용 가능한 메모리(210)와 함께 다양한 객체들(220, 230, 240, 250, 260, 270)에 대응하는 할당 메모리를 포함할 수 있다. 이와 같은 특정 예에서, 객체(240, 270)은 포인터 값(pointer value)에 대응되는 반면에 객체(220, 230, 250, 260)은 정수 값(integer value)에 대응된다. 다시 말해, 객체(240)은 객체(230)에 의해 제시되는 정수 값을 참조하는 포인트 값인 반면, 객체(270)은 객체(260)에 의해 제시되는 정수 값을 참조하는 포인터 값이다.
힙 객체들은 접근 가능한 객체들이 접근 불가능한 객체들로부터 용이하게 구별 가능하도록 마킹될 수 있다는 것이 이해되어야 한다. 도 3을 참조하면, 힙 상의 접근 가능/불가능한 객체들의 매핑(mapping)을 용이하게 하는 예시적인 객체 그래프를 도시하는 다이어그램이 제공된다. 도시된 것처럼, 객체 그래프(300)는 실행되고 있지 않은 호출 스택 부분(310)에 포함된 객체들을 마킹된 힙(320)으로 매핑한다. 이를 위하여, 마킹된 힙(320)과 사용 가능한 메모리(330)는 일반적으로 힙(200)과 사용 가능한 메모리(330) 각각과 유사하다는 것이 이해되어야 할 것이다.
일 실시예에서, 객체 그래프(300)은 마킹된 힙(320) 상의 어떤 객체들이 실행되고 있지 않은 호출 스택 부분(310)에 의해 접근 불가능한지 결정하는 데에 사용된다. 즉, 실행되고 있지 않은 호출 스택 부분(310)에 포함된 루트 객체(root objects)들이 마킹된 힙(320) 상의 대응되는 메모리 위치에 추적되고 이러한 메모리 위치는 접근 가능한 것으로 여겨진다. 이후에, 루트 객체들에 대한 후속적인 추적이 접근 가능한 포인터 값들 상에서 실행되어 이러한 포인터 값들에 의해 참조된 접근 가능한 객체들을 식별한다는 것이 이해되어야 할 것이다. 여기서, 정수 값들은 다른 값을 참조하지 않기 때문에, 접근 가능한 정수 값들에 대해서 후속적인 추적은 생략될 수 있다는 것이 이해되어야 한다. 특정 예에서, 접근 가능한 객체(390)가 포인터 값에 대응하는 루트 객체이므로, 정수 값에 대응하는 접근 가능한 객체(380)를 식별하는 후속적인 추적은 접근 가능한 객체(390)에서 실행된다. 그러나, 접근 가능한 객체들(340, 370)은 정수 값에 대응하는 루트 객체들이므로, 접근 가능한 객체들(340, 370) 상에서는 후속적인 추적이 생략될 수 있다.
객체 그래프(300)가 실행되고 있지 않은 호출 스택 부분(310)에 의해 접근 불가능한 객체들을 식별하기 위해 사용될 수도 있다는 것이 이해되어야 한다. 특정 예에서, 접근 불가능한 객체들(350, 360)은 실행되고 있지 않은 호출 스택 부분(310) 내의 루트 객체들에 대응하지 않으며 접근 가능한 포인터 객체에 의해 참조되지도 않기 때문에 접근 불가능하다고 여겨진다.
접근 가능/불가능한 객체들을 식별하면, 접근 가능/불가능한 객체들의 적어도 하나가 마킹되어 서로 용이하게 구별 가능해진다는 점이 이해되어야 한다. 일례로, 이러한 마킹은 호출 스택의 실행과 동시에 발생할 수 있다. 이러한 특정 예에서, 접근 가능한 객체(340), 접근 가능한 객체(370), 접근 가능한 객체(380), 접근 가능한 객체(390)는 "1"로 마킹되는 반면에, 접근 불가능한 객체(350) 및 접근 불가능한 객체(360)는 "0"으로 마킹된다. 여기서, 본 기술 분야의 통상적인 지식을 갖춘 자는, 예를 들어, 객체 표현 각각의 이러한 마킹에 비트(bit)를 지정하는 방법과 같은 다양한 방법 중 임의의 방법으로 객체의 마킹이 이루어질 수 있다는 것을 이해할 것이다.
객체 그래프가 적절히 마킹된 이후, 접근 불가능한 것으로 식별된 메모리로서 힙 객체에 이전에 할당된 메모리는 제거(clear)될 수 있다. 일 실시예에서, 이러한 메모리의 제거는 호출 스택의 실행과 동시에 이루어질 수 있다. 다음으로 도 4를 참조하면, 실시예에 따른 예시적인 메모리를 가용하게 하는 방법을 나타내는 다이어그램이 제공된다. 도시된 것처럼, 객체 그래프(400)는 힙(200, 320)과 일반적으로 유사한 스위핑된 힙(420)을 포함할 수 있는데 힙(420)은 접근 불가능한 객체(350, 360)에 이전에 할당된 메모리를 가용하게 하는 것을 나타낸다. 즉, 힙(420)은 이제 사용 가능한 메모리(430)에 더하여 가용 메모리(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 메모리, 하드 디스크, 자기 테이프 등과 같은 몇몇 상이한 구성 요소로서 구성될 수 있다. 압축이나 복수 배열 독립 드라이브들의 사용과 같은 자동 백업과 같은 다양한 특징들이 메모리 컴포넌트(520)에서 구현될 수 있다.
도시된 것처럼, 메모리 관리 유닛(500)은 힙 컴포넌트(530) 및 추적 컴포넌트(540)를 더 포함할 수 있다. 이러한 실시예에서, 힙 컴포넌트(530)는 스크립트의 실행 동안에 객체들의 힙을 생성하도록 구성되는 반면에, 추적 컴포넌트(540)는 스크립트의 실행되고 있지 않은 부분에 포함된 스크립트 객체를 힙 상의 대응되는 메모리 위치의 세트까지 추적하도록 구성된다.
다른 실시예에서, 메모리 관리 장치(500)은 마킹 컴포넌트(550)를 더 포함한다. 이러한 실시예에서, 마킹 컴포넌트(550)는 스크립트의 실행과 동시에 힙의 적어도 일부에 마킹을 하도록 구성된다. 이러한 실시예에서, 마킹된 힙은 스크립트의 실행되고 있지 않은 부분에 의해 접근 가능한 접근 가능 객체들과, 스크립트의 실행되고 있지 않은 부분에 의해 접근 불가능하다고 여겨지는 접근 불가능 객체들을 포함한다.
또 다른 실시예에서, 메모리 관리 장치(500)는 재활용 컴포넌트(560)를 더 포함한다. 이러한 실시예에서, 재활용 컴포넌트(560)는 마킹된 힙에 따라서, 스크립트의 실행과 동시에 접근 불가능한 객체들에 할당된 메모리를 가용하게 하도록 구성된다. 특정 실시예에서, 재활용 컴포넌트(560)는 접근 불가능한 객체들에 할당된 메모리 전체를 가용하게 하기 이전에, 접근 불가능한 객체들에 할당된 메모리의 일부를 재활용하도록 구성된다. 또 다른 실시예에서, 재활용 컴포넌트(560)는 힙의 원래 저장 위치 내에 접근 가능한 객체들은 각각 보존하도록 구성된다. 예를 들어, 재활용 컴포넌트(560)는 힙 내부에 있는 고정된 세트의 경계들에 기초하여 힙 객체들의 분리를 유지하도록 구성될 수 있다.
몇 실시예에서, 메모리 관리 장치(500)는 객체들의 힙을 생성하는 힙 컴포넌트(530)로부터 스크립트를 실행하도록 구성될 수 있다. 이를 위하여, 메모리 관리 장치(500)가 복수의 스크립트 유형 중 어느 것도 실행 가능하도록 구성된다는 것이 이해되어야 할 것이다. 예를 들어, 특정 실시예에서는 메모리 관리 장치(500)가 자바스크립트를 컴파일하도록 구성된다. 스크립트를 실행하면, 메모리 관리 장치(500)가 스크립트의 실행에 기초하여 문서 객체 모델(DOM)을 수정할 수 있도록 구성된다는 점이 이해되어야 할 것이다.
도 6은 실시예에 따른 보존적인 불용 정보 수집 알고리즘을 구현하기 위한 예시적이고 비제한적인 실시예를 나타내는 흐름 다이어그램이다. 단계(600)에서, 스크립트의 실행 동안에 객체들의 힙이 생성된다. 다음으로, 단계(610)에서, 스크립트의 실행되고 있지 않은 부분에 포함된 스크립트 객체들이 힙 상의 메모리 위치의 대응되는 세트를 추적한다. 그리고 나서, 단계(620)에서 스크립트의 실행과 동시에 힙이 마킹된다. 특정 실시예에서, 마킹된 힙은 스크립트의 실행되고 있지 않은 부분에 의해 접근 불가능한 접근 불가능 객체들과 함께 스크립트의 실행되고 있지 않은 부분에 의해 접근 가능한 접근 가능 객체들을 포함한다. 단계(630)에서 접근 불가능한 객체들에 할당된 메모리가 마킹된 힙에 기초하여 스크립트의 실행과 동시에 가용하게 된다.
도 7을 참조하면, 다양한 실시예에 따라 객체들을 동시적으로 마킹하고 스위핑하도록 구성된 예시적인 자원 관리 유닛을 나타내는 블록 다이어그램이 제공된다. 도시된 것처럼, 자원 관리 유닛(700)은 프로세서 컴포넌트(710), 메모리 컴포넌트(720), 그래핑(graphing) 컴포넌트(730), 추적 컴포넌트(740), 마킹 컴포넌트(750) 및 가용화 컴포넌트(760)를 포함할 수 있다.
메모리 관리 유닛(500) 내의 프로세서 컴포넌트(510)와 유사하게, 프로세서 컴포넌트(710)는 복수의 기능 중 임의의 것을 실행하는 것과 관련된 컴퓨터 실행가능한 명령어들을 실행하도록 구성된다. 프로세서 컴포넌트(710)는 자원 관리 유닛(700)과 통신될 정보를 분석하거나 및/또는 메모리 컴포넌트(720), 그래핑 컴포넌트(730), 추적 컴포넌트(740), 마킹 컴포넌트(750) 및/또는 가용화 컴포넌트(760)에서 사용될 수 있는 정보를 생성하는 단일의 프로세서이거나 복수의 프로세서일 수 있다. 추가적으로 또는 대체적으로, 프로세서 컴포넌트(710)는 자원 관리 유닛(700)의 하나 이상의 컴포넌트를 제어하도록 구성될 수 있다.
다른 실시예에서, 메모리 컴포넌트(720)는 프로세서 컴포넌트(710)에 연결되며 프로세서 컴포넌트(710)에 의해 실행되는 컴퓨터 실행가능한 명령어들을 저장하도록 구성된다. 메모리 컴포넌트(720)는 또한 그래핑 컴포넌트(730), 추적 컴포넌트(740), 마킹 컴포넌트(750) 및/또는 가용화 컴포넌트(760) 중 임의의 것에서 생성되는 데이터를 포함하는 복수의 다른 유형의 데이터 중 임의의 것을 저장하도록 구성될 수도 있다. 여기서, 메모리 컴포넌트(720)는 메모리 관리 유닛(500) 내의 메모리 컴포넌트(520)와 유사하다. 따라서, 메모리 컴포넌트(520)의 전술한 특징 및 구성요소들 중 임의의 것이 메모리 컴포넌트(720)에도 적용 가능하다는 것이 이해되어야 할 것이다.
도시된 것처럼, 자원 관리 유닛(700)은 그래핑 컴포넌트(730) 및 추적 컴포넌트(740)를 포함할 수 있다. 이러한 실시예에서, 그래핑 컴포넌트(730)는 호출 스택과 연관된 객체 그래프를 생성하도록 구성되는 반면에, 추적 컴포넌트(740)는 객체 그래프를 추적하도록 구성되어 호출 스택의 실행되고 있지 않은 부분에 포함된 스크립트 객체들이 힙 상의 대응되는 메모리 위치의 세트를 추적하도록 한다.
다른 실시예에서, 자원 관리 유닛(700)은 마킹 컴포넌트(750)를 더 포함할 수 있다. 이러한 실시예에서, 마킹 컴포넌트(750)는 호출 스택의 실행과 동시에 힙 객체들에 마킹을 하도록 구성된다. 이러한 실시예를 위해서, 마킹된 힙은 호출 스택의 실행되고 있지 않은 부분에 의해 접근 가능한 접근 가능 객체들과 함께 호출 스택의 실행되고 있지 않은 부분에 의해 접근 불가능한 접근 불가능 객체들을 포함한다.
도시된 것처럼, 자원 관리 유닛(700)은 가용화 컴포넌트(760)를 더 포함할 수 있다. 이러한 실시예에서, 가용화 컴포넌트(760)는 호출 스택의 실행과 동시에 접근 불가능한 객체들에 할당된 메모리를 가용화(clear)하도록 구성된다. 여기서, 마킹 컴포넌트(750)에 의해 확인된 마킹된 힙에 기초하여 이러한 메모리가 가용화된다는 것이 이해되어야 할 것이다. 일 실시예에서, 가용화 컴포넌트(760)는 힙 내의 원래 메모리 위치에 호출 스택의 실행되고 있지 않은 부분에 의해 접근 가능한 객체들의 저장소를 각각 보존하도록 구성될 수 있다. 다른 실시예에서, 가용화 컴포넌트(760)는 접근 불가능한 객체들에 할당된 메모리의 부분을 재활용하도록 구성될 수도 있다. 이러한 특정 실시예에서, 가용화 컴포넌트(760)는 접근 불가능한 객체들에 할당된 메모리 전체를 가용화하는 것에 앞서서 메모리의 일부를 재활용하도록 더 구성될 수 있다.
도 8은 실시예에 따른 객체들에 대한 동시적인 마킹 및 스위핑에 대한 예시적이고 비제한적인 실시예를 도시하는 흐름 다이어그램이다. 단계(800)에서, 호출 스택과 연관된 객체 그래프가 생성된다. 단계(810)에서, 호출 스택의 실행되고 있지 않은 부분에 포함된 스크립트 객체들이 힙 상의 대응되는 메모리 위치의 세트를 추적되도록 객체 그래프가 추적된다. 다음으로, 단계(820)에서, 호출 스택의 실행과 동시에 힙 객체들이 마킹된다. 이러한 특정 실시예에서, 마킹된 힙은 호출 스택의 실행되고 있지 않은 부분에 의해 접근 가능한 접근 가능 객체들과 함께 호출 스택의 실행되고 있지 않은 부분에 의해 접근 불가능한 접근 불가능 객체들을 포함한다. 단계(830)에서, 접근 불가능한 객체들에 할당된 메모리가 마킹된 힙에 기초하여 호출 스택의 실행과 동시에 가용화된다.
예시적인 네트워크 및 분산 환경
본 기술 분야의 통상적인 지식을 갖춘 자라면 본 명세서에서 설명된 보존적인 불용 정보 수집 알고리즘 내에서의 객체에 대한 동시적인 마킹 및 스위핑에 대한 다양한 실시예들이 컴퓨터 네트워크 또는 분산 컴퓨팅 환경의 일부를 이룰 수 있는 임의의 컴퓨터 또는 다른 클라이언트 또는 서버 장치와 함께 구현 가능하며, 어떠한 종류의 데이터 저장소와도 연결 가능하다는 것을 이해할 수 있을 것이다. 이와 관련하여, 본 명세서에서 설명되는 다양한 실시예들은 임의의 수의 메모리 또는 저장소 유닛을 갖는 임의의 컴퓨터 시스템 또는 환경 및 임의의 수의 저장소 유닛들에 걸쳐 발생하는 임의의 수의 애플리케이션 및 프로세스에서 구현 가능하다. 이는, 원격 또는 로컬 저장소를 가지는 네트워크 환경 또는 분산 컴퓨팅 환경에서 사용되는 서버 컴퓨터 및 클라이언트 컴퓨터를 가지는 환경을 포함하지만 이에 대해 제한하지는 않는다.
도 9는 예시적인 네트워크 또는 분산 컴퓨팅 환경의 비제한적이고 도식적인 다이어그램을 제공한다. 분산 컴퓨팅 환경은 애플리케이션(930, 932, 934, 936, 938)로 나타나는 프로그램들, 메소드들, 데이터 저장소들, 프로그래밍 가능한 로직 등을 포함할 수 있는 컴퓨팅 객체 또는 장치(910, 912 등) 및 컴퓨팅 객체 또는 장치(920, 922, 924, 926, 928 등)을 포함한다. 컴퓨팅 객체 또는 장치(910, 912 등) 및 컴퓨팅 객체 또는 장치(920, 922, 924, 926, 928 등)은 PDA들, 오디오/비디오 장치들, 모바일 장치들, MP3 플레이어들, 랩톱 등의 상이한 장치들을 포함할 수 있다는 것이 이해되어야 할 것이다.
컴퓨팅 객체 또는 장치(910, 912 등) 및 컴퓨팅 객체 또는 장치(920, 922, 924, 926, 928 등) 각각은 하나 이상의 다른 컴퓨팅 객체 또는 장치(910, 912 등) 및 컴퓨팅 객체 또는 장치(920, 922, 924, 926, 928 등)과 통신 네트워크(940)를 통해서 직간접적으로 통신할 수 있다. 비록 도 9에는 단일 구성 요소로서 도시되었지만, 네트워크(940)는 도 9의 시스템에 서비스를 제공하는 다른 컴퓨팅 객체 및 컴퓨팅 장치들을 포함하거나 및/또는 도시되지는 않았지만 복수의 상호 연결된 네트워크들을 나타낼 수 있다. 컴퓨팅 객체 또는 장치(910, 912 등) 및 컴퓨팅 객체 또는 장치(920, 922, 924, 926, 928 등) 각각은 다양한 실시예들에 따라 제공되는 메모리 관리 시스템들의 구현하거나 이러한 시스템들과 통신하기에 적합하도록 API, 다른 객체, 소프트웨어, 펌웨어 및/또는 하드웨어 등을 사용 가능하게 만드는 애플리케이션(930, 932, 934, 936, 938)과 같은 애플리케이션을 포함할 수 있다.
분산 컴퓨팅 환경을 지원하기 위한 다양한 시스템, 컴포넌트, 네트워크 구성요소가 있다. 예를 들어, 컴퓨팅 시스템은 무선 또는 유선 시스템, 로컬 네트워크 또는 널리 분산된 네트워크에 의해 연결될 수 있다. 현재, 많은 네트워크가, 다양한 실시예에서 기술된 기술에 따르는 예시적인 통신을 위해 사용될 수 있는 임의의 네트워크 인프라 구조를 통해, 널리 분산된 컴퓨팅에 대한 인프라 구조를 제공하고 다수의 다양한 네트워크를 포함하는 인터넷에 연결된다.
따라서, 클라이언트/서버, 피어 투 피어(peer-to-peer), 또는 하이브리드 아키텍쳐와 같은 네트워크 인프라 구조 및 네트워크 통신망 구성(topology)의 호스트가 사용될 수 있다. 클라이언트/서버 아키텍쳐, 구체적으로는 네트워크 시스템에서, 클라이언트는 예를 들어 서버와 같은 다른 컴퓨터에 의해 제공되는 공유된 네트워크 리소스들을 액세스하는 컴퓨터가 될 수 있다. 도 9에 도시된 바로는, 비제한적인 예로서, 컴퓨팅 객체 또는 장치(920, 922, 924, 926, 928 등)는 클라이언트로서 이해될 수 있고, 컴퓨팅 객체 또는 장치(910, 912 등)는 서버로서 이해될 수 있으며, 컴퓨팅 객체 또는 장치(910, 912 등)는 컴퓨팅 객체 또는 장치(920, 922, 924, 926, 928 등)로부터 데이터를 수신하고, 데이터를 저장하고, 데이터를 처리하고, 데이터를 컴퓨팅 객체 또는 장치(920, 922, 924, 926, 928 등)에게 전송하는 등의 데이터 서비스를 제공할 수 있지만, 상황에 따라 임의의 컴퓨터가 클라이언트, 서버 또는 양자로서 인식될 수 있다. 하나 이상의 실시예를 위해 본 명세서에서 기재된대로, 이러한 컴퓨터들 중 어느 것도 임의의 플랫폼 및 관련 기술로부터의 서비스로서 정보를 위해 인프라 구조를 연루할 수 있는 데이터를 처리하고 서비스 또는 작업을 요청할 수 있다.
서버는 전형적으로 인터넷 또는 무선 네트워크 인프라 구조와 같은 원격 또는 로컬 네트워크를 통해 액세스 가능한 원격 컴퓨터 시스템이다. 통신 매체를 통해 서로 통신하면서, 클라이언트 프로세스는 제1 컴퓨터 시스템에서 활성화될 수 있고, 서버 프로세스는 제2 컴퓨터 시스템에서 활성화될 수 있으며, 이에 따라 분산된 기능을 제공하고 복수의 클라이언트로 하여금 서버의 정보 수집 능력의 사용을 허용할 수 있다. 사용자 프로파일링에 근거하여 사용되는 임의의 소프트웨어 객체는 단일로, 또는 복수의 컴퓨팅 장치 또는 객체를 통해 분산되어 제공될 수 있다.
일례로, 통신 네트워크/버스(940)가 인터넷인 네트워크 환경에서, 컴퓨팅 객체 또는 장치(910, 912 등)는 웹 서버가 될 수 있으며, 컴퓨팅 객체 또는 장치(920, 922, 924, 926, 928 등)가 HTTP와 같은 몇몇 주지의 프로토콜 중 임의의 것을 통해 통신할 수 있다. 앞에서 설명한 것처럼, 분산 컴퓨팅 환경의 특징일 수 있겠지만, 컴퓨팅 객체 또는 장치(910, 912 등)는 컴퓨팅 객체 또는 장치(920, 922, 924, 926, 928 등)로 작용할 수도 있으며 반대의 경우도 가능하다.
예시적인 컴퓨팅 장치
앞에서 설명한 것처럼, 본 명세서에서 설명되는 다양한 실시예들은 보존적인 불용 정보 수집 알고리즘 내에서의 객체에 대한 동시적인 마킹 및 스위핑을 위한 인프라 구조를 구현하기에 바람직할 수 있는 임의의 장치에 적용될 수 있다. 따라서, 손바닥 크기의, 휴대용 컴퓨팅 장치 및 다른 컴퓨팅 장치 및 모든 종류의 컴퓨팅 객체가 본원의 다양한 실시예(즉, 보존적인 불용 정보 수집 알고리즘을 태그된 정수(integer)를 사용하여 구현하는 것과 관련된 몇몇 기능을 제공할 수 있는 장치와 관련된 실시예)와 연관되어 사용될 수 있도록 고려될 수 있다는 것이 이해되어야 한다. 따라서, 이하의 일반적인 목적의 도 10에 기재된 원격 컴퓨터는 하나의 예일 뿐이며, 본원의 실시예들은 네트워크/버스 정보 처리 상호 운용성(interoperability) 및 상호 작용을 갖는 임의의 클라이언트를 사용하여 구현 가능하다.
요구되지는 않지만, 임의의 실시예들은 장치 또는 객체에 대한 서비스의 개발자에 의한 사용을 위해 운영 체제를 통해 부분적으로 구현되거나, 및/또는 동작 가능한 컴포넌트(들)과 연관되어 동작하는 애플리케이션 소프트웨어 내에 포함될 수 있다. 소프트웨어는 클라이언트 워크스테이션, 서버 또는 다른 장치와 같은 하나 이상의 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행가능 명령어들의 일반적인 문맥에 의해 설명될 수 있다. 본 기술분야의 통상적인 지식을 갖춘 자라면 네트워크 상호 작용이 다양한 컴퓨터 시스템 구성 요소 및 프로토콜을 사용하여 실시될 수 있음이 이해될 것이다.
도 10은 하나 이상의 실시예들이 구현될 수 있는 적절한 컴퓨팅 시스템 환경(1000)의 예시를 도시하고 있다. 다만, 앞에서 설명한 것처럼, 컴퓨팅 시스템 환경(1000)은 적절한 컴퓨팅 환경의 단지 하나의 예시일 뿐이며 실시예들의 사용 또는 기능의 범위에 어떠한 제한도 가하고자 하는 의도가 없음이 이해되어야 한다. 컴퓨팅 환경(1000)은 예시적인 운영 환경(1000)에 도시된 단일 또는 조합된 컴포넌트들에 관련된 어떠한 의존성 또는 요건도 갖도록 해석되지 않아야 할 것이다.
도 10을 참조하면, 하나 이상의 실시예들을 구현하기 위한 예시적인 원격 장치는 휴대용 컴퓨터(1010)의 형태의 일반적인 목적의 컴퓨팅 장치를 포함할 수 있다. 휴대용 컴퓨터(1010)의 컴포넌트들은 프로세싱 유닛(1020), 시스템 메모리(1030), 및 시스템 메모리를 프로세싱 유닛에 연결하는 것을 포함하여 다양한 시스템 컴포넌트들을 연결하는 시스템 버스(1021)를 포함할 수 있지만 이에 대해 한정하지는 않는다.
컴퓨터(1010)는 전형적으로 여러 개의 컴퓨터 판독 가능한 매체를 포함하고 컴퓨터(1010)에 의해 액세스 가능한 어느 사용가능한 매체가 될 수 있다. 시스템 메모리(1030)는 ROM 및/또는 RAM과 같은 휘발성 및/또는 비휘발성 메모리의 형태의 컴퓨터 저장 매체를 포함할 수 있다. 일례로, 메모리(1030)는 운영 체제, 애플리케이션 프로그램, 다른 프로그램 모듈, 및 프로그램 데이터를 포함할 수 있지만 이에 대해 한정하지는 않는다.
사용자는 입력 장치(1040)를 통해 컴퓨터(1010)에 명령 및 정보를 입력할 수 있다. 모니터나 다른 유형의 디스플레이 장치도 출력 인터페이스(1050)와 같은 인터페이스를 통해 시스템 버스(1021)로 연결될 수 있다. 모니터와 더불어, 컴퓨터들은 스피커, 프린터와 같은 다른 주변적인 출력 장치들을 더 포함할 수 있으며, 이들은 출력 인터페이스(1050)를 통해 연결 가능하다.
컴퓨터(1010)는 원격 컴퓨터(1070)와 같은 하나 이상의 다른 원격 컴퓨터로의 논리적 연결을 사용하여 네트워크 또는 분산 환경 내에서 동작할 수 있다. 원격 컴퓨터(1070)는 개인용 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 장치 또는 다른 공통 네트워크 노드, 또는 다른 임의의 원격 매체 소비 또는 전송 장치가 될 수 있으며, 컴퓨터(1010)와 관련된 전술한 구성 요소 중 일부 또는 모두를 포함할 수 있다. 도 10에 도시된 논리적 연결은 LAN 또는 WAN과 같은 네트워크(1070)를 포함하며, 다른 네트워크들 및/또는 버스들을 포함할 수도 있다. 이러한 네트워킹 환경은 가정, 직장, 엔터프라이즈 와이드(enterprise-wide) 컴퓨터 네트워크, 인트라넷 및 인터넷에 일반적으로 사용된다.
앞에서 설명한 것처럼, 예시적인 실시예들은 다양한 컴퓨팅 장치들, 네트워크들 및 광고 아키텍쳐와 관련지어 설명되지만, 근본적인 개념들이 메모리를 관리하는 것이 바람직한 임의의 네트워크 시스템 및 임의의 컴퓨팅 장치 또는 시스템에 적용 가능하다.
본 명세서에서 설명되는 하나 이상의 실시예들을 구현하는 방법은, 예를 들어, 적절한 API, 툴 키트(tool kit), 드라이버 코드, 운영 체제, 컨트롤, 단일 또는 다운로드 가능한 소프트웨어 객체들 등 임의의 플랫폼으로부터 애플리케이션들 및 서비스들이 메모리 관리를 사용 가능하도록 하는 복수 개의 방법이 있다. 실시예들은 하나 이상의 설명된 실시예들에 따른 메모리 관리 시스템의 제공을 용이하게 하기 위한 소프트웨어 또는 하드웨어 객체나 API(또는 다른 소프트웨어 객체)의 견지로부터 고려될 수 있다. 본 명세서에서 설명되는 다양한 구현 예들 및 실시예들은 전체가 하드웨어에서 구현되거나, 일부는 하드웨어 일부는 소프트웨어에서 구현되거나, 전체가 소프트웨어에서 구현될 수 있는 측면이 있다.
본 명세서에서 사용된 "예시적인"이라는 용어는 예시, 도시, 또는 사례를 의미한다. 의심을 회피하기 위해, 본 명세서에서 설명되는 실시예들은 이러한 예시들에 의해 제한되지 않는다. 또한, 본 명세서에서 "예시적인"이라고 기재된 어느 측면 또는 디자인은 다른 측면 또는 디자인보다 선호되거나 이점이 있는 것으로 이해되거나 본 기술분야의 통상적인 지식을 가진 자에게 주지된 균등한 예시적인 구조 및 기술을 배제하도록 이해되어서는 안된다. 또한, "포함한다", "갖는다", "함유한다" 또는 다른 유사한 의미를 가지는 용어가 상세한 설명 및 청구항들에 사용되지만, 이러한 용어들은 "포함한다(comprising)"와 같이 다른 추가적인 구성 요소들을 배제하지 않는 열린 의미를 가지도록 의도된다.
앞에서 설명한 것처럼, 본 명세서에서 설명된 다양한 기술들은 하드웨어 또는 소프트웨어, 또는 적절하다면 둘의 조합과 연관되어 구현될 수 있다. "컴포넌트", "시스템" 및 이와 유사한 용어들은 하드웨어, 소프트웨어 및 하드웨어의 조합, 소프트웨어 또는 실행 중인 소프트웨어인 컴퓨터 관련된 엔티티를 가리키도록 의도된다. 예를 들어, 컴포넌트는 프로세서 상에서 실행 중인 프로세스, 프로세서, 객체, 실행 중인 스레드, 프로그램 및/또는 컴퓨터가 될 수 있지만 이에 대해 한정하지는 않는다. 설명을 위해, 컴퓨터 상에서 실행되고 있는 애플리케이션과 컴퓨터 모두는 컴포넌트가 될 수 있다. 하나 이상의 컴포넌트는 실행 중인 프로세스 및/또는 스레드 내에 존재할 수 있으며 컴포넌트는 하나의 컴퓨터에 로컬화되거나 둘 이상의 컴퓨터에 분산되어 있을 수 있다.
이상 설명한 시스템은 몇 개의 컴포넌트들 사이의 상호 작용과 관련하여 설명되었다. 다양한 치환 및 조합에 따라, 다양한 이러한 시스템 및 컴포넌트들이 컴포넌트들 또는 지정된 서브 컴포넌트, 몇몇의 지정된 컴포넌트들 또는 서브 컴포넌트들, 및/또는 추가적인 컴포넌트들을 포함할 수 있다는 것이 이해되어야 할 것이다. 서브 컴포넌트들은 부모 컴포넌트(계층적)들 내에 포함되기보다는 다른 컴포넌트들과 통신 가능하게 연결되는 컴포넌트들로 구현될 수도 있다. 또한, 하나 이상의 컴포넌트들은 결집된 기능을 제공하는 단일의 컴포넌트로 조합되거나 몇 개의 분리된 서브 컴포넌트들로 분할될 수 있으며, 매니지먼트 계층과 같은 임의의 하나 이상의 중간 계층은 통합적인 기능을 제공하기 위해 이러한 서브 컴포넌트들에 통신 가능하게 연결되도록 제공될 수 있다는 것이 이해되어야 할 것이다. 본 명세서에서 설명되는 임의의 컴포넌트들은 본 명세서에서 특별히 설명되지 않았지만 일반적으로 본 기술 분야의 통상적인 지식을 갖춘 자에게 주지되어 있는 다른 컴포넌트들과 상호 작용할 수도 있다.
앞에서 설명된 예시적인 시스템의 관점에서, 본원에 따른 실시예와 관련되어 구현되는 방법들은 다양한 도면의 흐름도를 참조하여 이해될 수 있다. 설명의 편의 및 단순화를 위해, 이러한 방법들은 블록의 연속으로 도시되고 설명되지만, 본원에 따른 실시예들은 블록의 순서로서 제한되지 않으며, 어떤 블록들은 본 명세서에서 도시되고 설명된 것과는 다른 순서로 발생하거나 다른 블록들과 동시에 발생할 수 있다는 것이 이해되어야 할 것이다. 비-시계열적, 또는 분기(branched)된 흐름이 흐름도를 통해 도시되지만, 동일하거나 유사한 결과를 이룰 수 있는 다른 다양한 분기들, 흐름 경로, 및 블록의 순서가 구현될 수 있다는 것이 이해되어야 할 것이다. 나아가, 설명되는 방법들을 구현하기 위해 모든 도시된 블록들이 요구되는 것도 아니다.
어떤 실시예에서는, 클라이언트 측의 시각에서 설명되지만, 의심의 여지 없이 대응되는 서버 측 시각도 존재한다. 유사하게, 하나의 방법이 실행되면, 하나 이상의 컴포넌트를 통해 해당 방법을 실행하기 위해 대응되는 장치가 저장 공간 및 적어도 하나의 프로세서를 가지면서 제공될 수 있다.
다양한 도면의 선호된 실시예들과 연관지어 다양한 실시예들이 설명되지만, 이러한 실시예들에 벗어나지 않는 동일한 기능을 실행하기 위해 다른 유사한 실시예들이 사용되거나 변경 또는 추가가 설명된 실시예들에 가해질 수 있다는 것이 이해되어야 할 것이다. 더 나아가, 이상 설명드린 실시예들의 하나 이상의 예시들은 복수의 프로세싱 칩 또는 장치에서 구현될 수 있으며, 저장소도 복수의 장치에 걸쳐 영향을 가질 수 있다. 따라서, 본원에 따른 실시예들은 단일의 실시예에 제한되지 않으며, 첨부된 청구범위에 따른 범위에 의해 이해되어야 할 것이다.

Claims (20)

  1. 메모리를 관리하는 방법으로서,
    스크립트의 실행 동안 객체들의 힙(a heap of objects)을 생성하는 단계와,
    상기 스크립트의 실행되고 있지 않은 부분에 포함된 스크립트 객체를 상기 힙의 대응되는 메모리 위치의 세트까지 추적하는 단계와,
    상기 스크립트의 실행과 동시에 상기 힙의 적어도 일부를 마킹(marking)하는 단계 - 마킹된 힙은 상기 스크립트의 실행되고 있지 않은 부분에 의해 접근 가능한 접근 가능 객체들을 포함하고, 상기 마킹된 힙은 상기 스크립트의 실행되고 있지 않은 상기 부분에 의해 접근 가능하지 않는 접근 불가능 객체들을 더 포함함 - 와,
    상기 접근 불가능 객체들에 할당된 메모리를 가용하게(freeing) 하는 단계 - 상기 가용하게 하는 단계는 상기 마킹에 기초하고 상기 스크립트의 실행과 동시에 실행됨 - 를 포함하는,
    메모리 관리 방법.
  2. 제1항에 있어서,
    상기 마킹하는 단계는 상기 접근 가능 객체들을 마킹하는 단계를 포함하는,
    메모리 관리 방법.
  3. 제1항에 있어서,
    상기 마킹하는 단계는 상기 접근 불가능 객체들을 마킹하는 단계를 포함하는,
    메모리 관리 방법.
  4. 제1항에 있어서,
    상기 가용하게 하는 단계는 상기 힙의 원래의 저장 위치에 상기 접근 가능 객체들을 각각 보존하는 단계를 포함하는,
    메모리 관리 방법.
  5. 제4항에 있어서,
    상기 보존하는 단계는 상기 힙 내의 경계(boundary)의 고정된 세트(fixed set)에 따라 힙 객체들의 분리(separation)를 유지하는 단계를 포함하는,
    메모리 관리 방법.
  6. 제1항에 있어서,
    상기 스크립트를 실행하는 단계를 더 포함하는,
    메모리 관리 방법.
  7. 제6항에 있어서,
    상기 스크립트를 실행하는 단계는 자바스크립트를 컴파일링하는 단계를 포함하는,
    메모리 관리 방법.
  8. 제6항에 있어서,
    상기 스크립트를 실행하는 단계는 문서 객체 모델(Document Object Model)을 수정하는 단계를 포함하는,
    메모리 관리 방법.
  9. 메모리 관리 장치로서,
    컴퓨터 실행가능한 컴포넌트들을 저장하고 있는 메모리와,
    상기 메모리에 통신 가능하게 연결된 프로세서 - 상기 프로세서는 상기 컴퓨터 실행가능한 컴포넌트들을 실행하도록 구성됨 - 를 포함하고,
    상기 컴퓨터 실행가능한 컴포넌트들은,
    스크립트의 실행 동안에 객체들의 힙을 생성하도록 구성된 힙 컴포넌트와,
    상기 스크립트의 실행되고 있지 않은 부분에 포함된 스크립트 객체들을 상기 힙의 대응되는 메모리 위치의 세트까지 추적하도록 구성된 추적 컴포넌트와,
    상기 스크립트의 실행과 동시에 상기 힙의 적어도 일부를 마킹하도록 구성된 마킹 컴포넌트 - 마킹된 힙은 상기 스크립트의 실행되고 있지 않은 부분에 의해 접근 가능한 접근 가능 객체들을 포함하고, 상기 마킹된 힙은 상기 스크립트의 실행되고 있지 않은 부분에 의해 접근 불가능한 접근 불가능 객체들을 포함함 - 와,
    상기 마킹된 힙에 따라, 상기 접근 불가능 객체들에 할당된 메모리를 가용하게 하도록 구성된 재활용 컴포넌트 - 상기 재활용 컴포넌트는 상기 스크립트의 실행과 동시에 상기 메모리를 가용하게 하도록 구성됨 - 를 포함하는,
    메모리 관리 장치.
  10. 제9항에 있어서,
    상기 마킹 컴포넌트는 상기 접근 가능 객체들과 상기 접근 불가능 객체들 중 어느 하나만 마킹하도록 구성되는,
    메모리 관리 장치.
  11. 제9항에 있어서,
    상기 재활용 컴포넌트는 상기 접근 불가능 객체들에 할당된 메모리의 전체를 가용하게 하기 이전에 상기 접근 불가능 객체들에 할당된 메모리의 일부를 재활용하도록 구성되는,
    메모리 관리 장치.
  12. 제9항에 있어서,
    상기 재활용 컴포넌트는 힙의 원래의 저장 위치에 접근 가능 객체들을 각각 보존하도록 구성되는,
    메모리 관리 장치.
  13. 제12항에 있어서,
    상기 재활용 컴포넌트는 상기 힙 내의 경계의 고정된 세트에 따라 힙 객체들의 분리를 유지하도록 구성되는,
    메모리 관리 장치.
  14. 제9항에 있어서,
    상기 스크립트를 실행하도록 구성된 실행 컴포넌트를 더 포함하는,
    메모리 관리 장치.
  15. 제14항에 있어서,
    자바스크립트를 컴파일링하도록 구성된 컴파일 컴포넌트를 더 포함하는,
    메모리 관리 장치.
  16. 제14항에 있어서,
    상기 스크립트의 실행에 기초하여 문서 객체 모델을 수정하도록 구성된 컴포넌트를 더 포함하는,
    메모리 관리 장치.
  17. 컴퓨터 판독가능 명령어를 포함하는 컴퓨터 판독가능 메모리로서,
    상기 컴퓨터 판독가능 명령어는 프로세서를 포함하는 적어도 하나의 컴퓨팅 장치로 하여금
    호출 스택과 연관된 객체 그래프를 생성하는 동작과,
    상기 객체 그래프를 추적하는 동작 - 호출 스택의 실행되고 있지 않은 부분에 포함된 스크립트 객체들이 힙 상의 메모리 위치의 대응되는 세트까지 추적됨 - 과,
    상기 호출 스택의 실행과 동시에 힙 객체들을 마킹(marking)하는 동작 - 마킹된 힙은 상기 호출 스택의 실행되고 있지 않은 부분에 의해 접근 가능한 접근 가능 객체들을 포함하고, 상기 마킹된 힙은 상기 호출 스택의 실행되고 있지 않은 부분에 의해 접근 가능하지 않는 접근 불가능 객체들을 더 포함함 - 과,
    상기 접근 불가능 객체들에 할당된 메모리를 가용하게 하는 동작 - 상기 메모리는 상기 마킹된 힙에 기초하여 상기 호출 스택의 실행과 동시에 가용하게 됨 - 을 수행하게 하는
    명령어를 포함하는,
    컴퓨터 판독가능 메모리.
  18. 제17항에 있어서,
    상기 컴퓨터 판독가능 명령어는 상기 접근 불가능 객체들에 할당된 상기 메모리의 일부를 재활용하게 하는 명령어를 더 포함하는,
    컴퓨터 판독가능 메모리.
  19. 제18항에 있어서,
    상기 재활용 명령어는 상기 접근 불가능 객체들에 할당된 메모리의 전체를 가용하게 하기 이전에 수행되는
    컴퓨터 판독가능 메모리.
  20. 제17항에 있어서,
    상기 가용하게 하는 동작은 상기 힙의 원래의 저장 위치 내 상기 접근 가능 객체들의 저장을 각각 유지하는 동작을 포함하는,
    컴퓨터 판독가능 메모리.
KR1020137025539A 2011-03-29 2012-03-06 메모리 관리를 위한 동시 마킹 및 동시 스위핑을 이용한 보존적인 불용 정보 수집 기법 KR101961501B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/074,226 2011-03-29
US13/074,226 US8527560B2 (en) 2011-03-29 2011-03-29 Conservative garbage collecting with concurrent marking and concurrent sweeping for memory management
PCT/US2012/027795 WO2012134728A2 (en) 2011-03-29 2012-03-06 Conservative garbage collecting with concurrent marking and concurrent sweeping for memory management

Publications (2)

Publication Number Publication Date
KR20140009422A KR20140009422A (ko) 2014-01-22
KR101961501B1 true KR101961501B1 (ko) 2019-03-22

Family

ID=46928698

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137025539A KR101961501B1 (ko) 2011-03-29 2012-03-06 메모리 관리를 위한 동시 마킹 및 동시 스위핑을 이용한 보존적인 불용 정보 수집 기법

Country Status (7)

Country Link
US (1) US8527560B2 (ko)
EP (1) EP2691860B1 (ko)
JP (1) JP2014513342A (ko)
KR (1) KR101961501B1 (ko)
CN (1) CN102736984B (ko)
ES (1) ES2872175T3 (ko)
WO (1) WO2012134728A2 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10628306B2 (en) 2017-02-01 2020-04-21 Microsoft Technology Licensing, Llc Garbage collector
US10572181B2 (en) 2017-02-01 2020-02-25 Microsoft Technology Licensing, Llc Multiple stage garbage collector
CN107145451B (zh) * 2017-05-09 2020-09-25 深圳市茁壮网络股份有限公司 一种JavaScript对象存储、回收方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050021576A1 (en) 2003-07-23 2005-01-27 International Business Machines Corporation Mostly concurrent garbage collection
US20070294499A1 (en) 2006-06-14 2007-12-20 Sun Microsystems, Inc. Reference-updating using per-chunk referenced-address ranges in a compacting garbage collector
US20090030958A1 (en) 2007-07-25 2009-01-29 Apple Inc. Extended garbage collection
US20110041137A1 (en) 2006-10-23 2011-02-17 Research In Motion Limited Methods And Apparatus For Concurrently Executing A Garbage Collection Process During Execution of A Primary Application Program

Family Cites Families (26)

* 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
JPH04260948A (ja) * 1991-01-18 1992-09-16 Mitsubishi Electric Corp メモリシステム
US5355483A (en) * 1991-07-18 1994-10-11 Next Computers Asynchronous garbage collection
JP3023316B2 (ja) * 1996-01-31 2000-03-21 株式会社東芝 情報処理装置の資源管理装置、及び情報処理システムにおける資源管理方法
US6289360B1 (en) * 1998-10-07 2001-09-11 International Business Machines Corporation Method and system for eliminating synchronization between sweep and allocate in a concurrent garbage collector
GB9907278D0 (en) * 1999-03-31 1999-05-26 Philips Electronics Nv Memory reclamation method and apparatus
JP2000339214A (ja) * 1999-05-28 2000-12-08 Nec Corp 実時間メモリ管理システム、及び実時間メモリ管理方法
US6622226B1 (en) * 2000-07-31 2003-09-16 Microsoft Corporation Method and system for using a mark-list for garbage collection
US6502111B1 (en) * 2000-07-31 2002-12-31 Microsoft Corporation Method and system for concurrent garbage collection
CA2421591C (en) 2000-09-13 2011-08-23 Geodesic Systems, Incorporated Conservative garbage collectors that can be used with general memory allocators
US7089272B1 (en) * 2003-06-18 2006-08-08 Sun Microsystems, Inc. Specializing write-barriers for objects in a garbage collected heap
DE602004028945D1 (de) * 2003-06-30 2010-10-14 Panasonic Corp Speicherbereinigungssystem
US7197521B2 (en) * 2003-11-21 2007-03-27 Intel Corporation Method and system performing concurrently mark-sweep garbage collection invoking garbage collection thread to track and mark live objects in heap block using bit vector
US20050198088A1 (en) 2004-03-03 2005-09-08 Sreenivas Subramoney Method and system for improving the concurrency and parallelism of mark-sweep-compact garbage collection
US7636745B1 (en) * 2004-03-12 2009-12-22 Sun Microsystems, Inc. Concurrent-marking-initiation heuristic
US7340494B1 (en) * 2004-03-12 2008-03-04 Sun Microsystems, Inc. Garbage-first garbage collection
US7533228B1 (en) * 2005-05-27 2009-05-12 Sun Microsystems, Inc. Two-pass sliding compaction
US7499961B2 (en) * 2006-01-12 2009-03-03 Sun Microsystems, Inc. Method and apparatus for limiting the size and facilitating maintenance of remembered sets in a space incremental garbage collector
CN101046755B (zh) * 2006-03-28 2011-06-15 郭明南 一种计算机自动内存管理的***及方法
CN101484876B (zh) * 2006-07-14 2012-12-19 英特尔公司 多任务虚拟机的堆组织
US7614003B2 (en) * 2006-10-23 2009-11-03 Adobe Systems Incorporated Rendering hypertext markup language content
US7890711B2 (en) * 2007-04-18 2011-02-15 Oracle America, Inc. Methods, apparatus, and program products for improved finalization
US7685182B2 (en) * 2007-05-08 2010-03-23 Microsoft Corporation Interleaved garbage collections
US7685185B2 (en) * 2007-06-29 2010-03-23 Microsoft Corporation Move-in/move-out notification for partial replica synchronization
US8631051B2 (en) 2008-09-22 2014-01-14 Filip Pizlo Hybrid fragmenting real time garbage collection
US8612493B2 (en) * 2008-10-30 2013-12-17 International Business Machines Corporation Allocation cache premarking for snap-shot-at-the-beginning concurrent mark-and-sweep collector

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050021576A1 (en) 2003-07-23 2005-01-27 International Business Machines Corporation Mostly concurrent garbage collection
US20070294499A1 (en) 2006-06-14 2007-12-20 Sun Microsystems, Inc. Reference-updating using per-chunk referenced-address ranges in a compacting garbage collector
US20110041137A1 (en) 2006-10-23 2011-02-17 Research In Motion Limited Methods And Apparatus For Concurrently Executing A Garbage Collection Process During Execution of A Primary Application Program
US20090030958A1 (en) 2007-07-25 2009-01-29 Apple Inc. Extended garbage collection

Also Published As

Publication number Publication date
JP2014513342A (ja) 2014-05-29
US20120254265A1 (en) 2012-10-04
WO2012134728A3 (en) 2012-12-06
CN102736984A (zh) 2012-10-17
EP2691860A4 (en) 2015-01-21
KR20140009422A (ko) 2014-01-22
EP2691860A2 (en) 2014-02-05
WO2012134728A2 (en) 2012-10-04
EP2691860B1 (en) 2021-05-05
ES2872175T3 (es) 2021-11-02
CN102736984B (zh) 2017-03-01
US8527560B2 (en) 2013-09-03

Similar Documents

Publication Publication Date Title
US10628398B2 (en) Conservative garbage collecting and tagged integers for memory management
JP5139987B2 (ja) 拡張可能メタデータ
US20190102278A1 (en) Memory leak profiling events
US20080092127A1 (en) Grid-Enabled ANT Compatible with Both Stand-Alone and Grid-Based Computing Systems
US8918766B2 (en) Analysis of propagated information using annotated forests
WO2023160327A1 (en) Container image management
KR101961501B1 (ko) 메모리 관리를 위한 동시 마킹 및 동시 스위핑을 이용한 보존적인 불용 정보 수집 기법
CN113568604B (zh) 风控策略的更新方法、装置及计算机可读存储介质
US11474832B2 (en) Intelligently determining a virtual machine configuration during runtime based on garbage collection characteristics
US9436575B2 (en) Selective profiling of applications
WO2012172641A1 (ja) 計算機、リソース使用量計算方法及びリソース使用量計算プログラム
CN114003234A (zh) 小程序局部编译方法、装置、设备及计算机可读存储介质
JP2004287870A (ja) ごみ集め方法及びコンパイル方法
Immerman et al. FRAMEWORK FOR ANALYZING GARBAGE COLLECTION

Legal Events

Date Code Title Description
N231 Notification of change of applicant
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant