KR102161817B1 - 유휴 시간 소프트웨어 가비지 콜렉션 - Google Patents

유휴 시간 소프트웨어 가비지 콜렉션 Download PDF

Info

Publication number
KR102161817B1
KR102161817B1 KR1020177023944A KR20177023944A KR102161817B1 KR 102161817 B1 KR102161817 B1 KR 102161817B1 KR 1020177023944 A KR1020177023944 A KR 1020177023944A KR 20177023944 A KR20177023944 A KR 20177023944A KR 102161817 B1 KR102161817 B1 KR 102161817B1
Authority
KR
South Korea
Prior art keywords
garbage collection
idle time
time period
future
software
Prior art date
Application number
KR1020177023944A
Other languages
English (en)
Other versions
KR20170109607A (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 KR20170109607A publication Critical patent/KR20170109607A/ko
Application granted granted Critical
Publication of KR102161817B1 publication Critical patent/KR102161817B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • 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
    • 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/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/289Object oriented databases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the 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)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Human Computer Interaction (AREA)
  • Memory System (AREA)
  • Debugging And Monitoring (AREA)

Abstract

컴퓨팅 디바이스는 프로세서 유휴 기간들 동안에 소프트웨어 애플리케이션들에 대한 소프트웨어 가비지 콜렉션을 스케줄링한다. 하나 이상의 소프트웨어 애플리케이션들의 실행 동안에 프로세서가 유휴 상태에 있을 미래의 유휴 시간 기간이 결정되고, 미래의 유휴 시간 기간에 대해 메모리 할당이 측정된다. 복수의 미리 결정된 소프트웨어 가비지 콜렉션 이벤트들 중 하나는 결정된 미래의 유휴 시간 기간 및 추정된 메모리 할당에 기초하고, 미래의 유휴 시간 기간 동안에 수행되도록 스케줄링된다. 이어서, 선택된 소프트웨어 가비지 콜렉션 이벤트는 미래의 유휴 시간 기간 동안에 수행된다.

Description

유휴 시간 소프트웨어 가비지 콜렉션
[0001] 가비지 콜렉션(garbage collection)은, 런타임 환경이 그 환경 내에서 동작하는 소프트웨어 애플리케이션들에 의해 더 이상 사용되지 않는 데이터 오브젝트들에 의해 점유되는 메모리를 회수하려고 시도하는 자동화된 메모리 관리의 한 형태이다. 소프트웨어 가비지 콜렉션의 하나의 목적은 더 간결한 동작 환경을 제공하기 위해 메모리를 확보(free up)하는 것일 수 있고, 이로써 동작 효율을 개선한다. 그러나, 소프트웨어 가비지 콜렉션은 예측 불가한 시점들에서 발생할 수 있고, 사용자 경험에 부정적인 영향을 줄 수 있다. 예를 들면, 소프트웨어 가비지 콜렉션은 사용자 인터페이스의 렌더링에서 또는 사용자가 사용자 인터페이스와 상호작용하는 시간 기간 동안에 멈춤(pause)을 발생시킬 수 있다. 또한, 가비지 콜렉션을 위해 마킹될 메모리의 양은 종종 변경되고, 미사용된 애플리케이션 메모리를 확보하기 위해 연장된 실행 시간들이 요구될 수 있다.
[0002] 본 기술은 프로세서 유휴 기간들 동안에 소프트웨어 가비지 콜렉션을 스케줄링하기 위한 시스템 및 컴퓨터-구현 방법을 제공한다. 하나 이상의 구현들에서, 방법은 하나 이상의 프로세서들이 하나 이상의 소프트웨어 애플리케이션들의 실행 동안에 유휴(idle) 상태에 있을 미래의 유휴 시간 기간을 결정하는 단계, 미래의 유휴 시간 기간에 대해, 하나 이상의 소프트웨어 애플리케이션들에 대한 메모리 할당을 추정하는 단계, 결정된 미래의 유휴 시간 기간 및 추정된 메모리 할당에 기초하여 복수의 미리 결정된 소프트웨어 가비지 콜렉션 이벤트들(software garbage collection events) 중 하나를 선택하는 단계, 미래의 유휴 시간 기간 동안에 수행되도록, 선택된 소프트웨어 가비지 콜렉션 이벤트를 스케줄링하는 단계, 및 미래의 유휴 시간 기간 동안에 선택된 소프트웨어 가비지 콜렉션 이벤트를 수행하는 단계를 포함한다. 다른 양상들은 컴퓨터-구현 방법의 구현을 위한 대응하는 시스템들, 장치들 및 컴퓨터 프로그램 제품들을 포함한다.
[0003] 하나 이상의 구현들에서, 시스템은 하나 이상의 프로세서들, 및 명령들을 포함하는 메모리를 포함한다. 명령들은, 하나 이상의 프로세서들에 의해 실행될 때, 하나 이상의 프로세서들로 하여금, 하나 이상의 프로세서들이 하나 이상의 소프트웨어 애플리케이션들의 실행 동안에 유휴 상태에 있을 미래의 유휴 시간 기간을 결정하는 단계, 미래의 유휴 시간 기간에 대해, 하나 이상의 소프트웨어 애플리케이션들에 대한 메모리 할당을 추정하는 단계, 결정된 미래의 유휴 시간 기간 및 추정된 메모리 할당에 기초하여 복수의 미리 결정된 소프트웨어 가비지 콜렉션 이벤트들 중 하나를 선택하는 단계, 미래의 유휴 시간 기간 동안에 수행되도록, 선택된 소프트웨어 가비지 콜렉션 이벤트를 스케줄링하는 단계, 및 미래의 유휴 시간 기간 동안에 선택된 소프트웨어 가비지 콜렉션 이벤트를 수행하는 단계를 가능하게 한다. 다른 양상들은 전술된 시스템의 구현을 위한 대응하는 장치들, 및 컴퓨터 프로그램 제품들을 포함한다.
[0004] 하나 이상의 구현들에서, 컴퓨터-판독 가능 저장 매체는 명령들을 포함하고, 명령들은, 실행될 때, 하나 이상의 프로세서들이 하나 이상의 소프트웨어 애플리케이션들의 실행 동안에 유휴 상태에 있을 미래의 유휴 시간 기간을 결정하는 단계, 미래의 유휴 시간 기간에 대해, 하나 이상의 소프트웨어 애플리케이션들에 대한 메모리 할당을 추정하는 단계, 결정된 미래의 유휴 시간 기간 및 추정된 메모리 할당에 기초하여 복수의 미리 결정된 소프트웨어 가비지 콜렉션 작업들 중 하나를 선택하는 단계, 미래의 유휴 시간 기간 동안에 수행되도록, 선택된 소프트웨어 가비지 콜렉션 작업을 스케줄링하는 단계, 및 미래의 유휴 시간 기간 동안에 선택된 소프트웨어 가비지 콜렉션 작업을 수행하는 단계를 가능하게 한다. 다른 양상들은 전술한 컴퓨터-판독 가능 저장 매체의 구현을 위한 대응하는 방법들, 장치들 및 컴퓨터 프로그램 제품들을 포함한다.
[0005] 본 기술의 다른 구성들이 아래의 상세한 설명으로부터 당업자들에게 용이하게 명백해질 것이며, 본 기술의 다양한 구성들은 예시로서 도시되고 설명된다는 것이 이해된다. 인식될 바와 같이, 본 기술은 본 기술의 범위로부터 전혀 벗어남이 없이, 다른 그리고 상이한 구성들이 가능하고, 그것의 몇몇 세부사항들은 다양한 다른 측면들에서 수정이 가능하다. 따라서, 도면들 및 상세한 설명은 본질적으로 예시적인 것으로서 간주되고, 제한적인 것으로서는 간주되지 않아야 한다.
[0006] 상세한 설명은 첨부 도면들을 참조하여 이루어질 것이다.
[0007] 도 1은 프로세서 유휴 기간들 동안에 소프트웨어 가비지 콜렉션을 스케줄링하기 위한 예시적인 컴포넌트들을 포함하는 예시적인 시스템을 도시한다.
[0008] 도 2는 유휴 작업들을 포함하는 계류중인 작업들의 예시적인 스케줄의 도면을 도시한다.
[0009] 도 3은 프로세서 유휴 기간들 동안에 소프트웨어 가비지 콜렉션을 스케줄링하기 위한 제 1 예시적인 프로세스의 흐름도를 도시한다.
[0010] 도 4는 프로세서 유휴 기간들 동안에 소프트웨어 가비지 콜렉션을 스케줄링하는 것과 관련하여 사용하기 위한 예시적인 전자 시스템을 예시한 도면이다.
[0011] 아래에 제시된 상세한 설명은 본 기술의 다양한 구성들의 설명으로서 의도되며, 본 기술이 실시될 수 있는 유일한 구성들을 나타내도록 의도되지는 않는다. 첨부된 도면들은 본원에 통합되며, 상세한 설명의 일부를 구성한다. 상세한 설명은 본 기술의 완전한 이해를 제공하려는 목적으로 구체적인 세부사항들을 포함한다. 그러나, 본 기술이 본원에서 제시된 구체적인 세부사항들로 한정되지 않으며, 이러한 구체적인 세부사항들 없이도 실시될 수 있다는 것은 당업자들에게 분명하고 명백할 것이다. 일부 경우들에서, 본 기술의 개념들을 모호하게 하는 것을 회피하기 위해 잘-알려진 구조들 및 컴포넌트들은 블록도 형태로 도시된다.
[0012] 본 기술은, 소프트웨어 애플리케이션들에 대한 메모리를 확보하기 위해 가비지 콜렉션을 사용하는 시스템들에서 고르지 않은 성능을 감소시키기 위해 프로세서 유휴 기간들 동안에 소프트웨어 가비지 콜렉션을 스케줄링하기 위한 메커니즘을 포함한다. 메모리 관리기 및 작업 스케줄러(예를 들면, 백-엔드 소프트웨어 컴포넌트)는, 가령, 애플리케이션들의 성능에 대한 가비지 콜렉션의 부정적인 영향을 감소시키기 위해 소프트웨어 애플리케이션들을 실행함으로써 사용되는 메모리가 가비지 콜렉팅되어야 하는지 여부 및 언제 가비지 콜렉팅되어야 하는지를 결정하기 위해 몇몇의 런타임 추정들을 수행한다. 이와 관련하여, 메모리 관리기 및 작업 스케줄러는 프로세서의 미래의 유휴 시간들, 그러한 유휴 시간들이 발생할 때 얼마나 많은 가비지 콜렉션이 요구될 수 있는지를 결정하고, 추정된 가비지 콜렉션을 완료하는데 요구되는 가비지 콜렉션 이벤트들을 우선순위화하고, 결정된 유휴 시간들 동안에 우선순위화된 가비지 콜렉션 이벤트들을 스케줄링한다.
[0013] 예로서, 스케줄러는 시스템 및 애플리케이션 작업들을 스케줄링하고, 상이한 작업 타입들(예를 들면, 컴포지터 작업들, 일반 작업들 등)로 작업들을 조직하고, 어떠한 타입의 작업이 특정 시간에 실행되어야 하는지를 결정한다. 작업 스케줄러는, 프로세서가 유휴 상태에 있을 미래의 시간 기간을 결정한다. 스케줄러는 또한 어떠한 작업들이 유휴 작업들, 예를 들면, 시스템 또는 실행 애플리케이션의 현재 동작을 위해 요구되지 않은 작업들로서 분류될 수 있는지를 결정한다. 가비지 콜렉션은 유휴 작업으로서 분류될 수 있는 예시적인 작업이다. 스케줄러는 계류중인 유휴 작업들의 큐를 유지하고, 작업 실행의 유휴 기간들 동안에 이들 작업들을 스케줄링할 수 있다.
[0014] 메모리 관리기는 얼마나 많은 메모리가 할당되었는지를 추정하고, 스케줄러에 의해 결정된 미래의 유휴 시간들에서 얼마나 많은 메모리가 할당될 수 있는지를 추정한다. 따라서, 가비지 콜렉션은 적절한 유휴 시간들에서 스케줄링될 수 있다. 예를 들면, 메모리 관리기는 x MB가 할당되었고 할당 레이트가 y MB/ms이라고 결정할 수 있다. 다음의 유휴 시간이 3 ms 내에 있다면, x + 3y MB가 다음의 유휴 시간까지 할당될 것으로 추정된다. 이러한 계산에 기초하여, 메모리 관리기는, 예를 들면, 과거 가비지 콜렉션 이벤트들에 기초하여 메모리를 가비지 콜렉팅하는데 얼마나 오래 걸릴 수 있는지를 추정할 수 있다.
[0015] 메모리 관리기는, 새롭게 할당된 오브젝트들에 대한 가비지 콜렉션 마킹, 오래된 오브젝트들에 대한 가비지 콜렉션 마킹, 가비지 콜렉션 완결(finalization), 및 메모리 스위핑(sweeping)을 포함하는 다수의 상이한 가비지 콜렉션 이벤트들에 대한 시간 추정들을 제공할 수 있다. 각각의 시간 추정은 각각의 이벤트 및 향후 유휴 시간에 대응하는 추정된 메모리 할당에 기초하여 이루어질 수 있다. 향후 유휴 시간들이 전체 이벤트를 완료하기에 충분히 길지 않을 수 있기 때문에, 메모리 관리기는 이벤트들을 더 작은 동작들의 청크들로 분해할 수 있다. 예를 들면, 가비지 콜렉션에 대한 오래된 오브젝트들의 마킹은 증분 마킹 단계들(incremental marking steps)로 분리될 수 있다. 메모리 관리기는, 몇몇의 계류중인 유휴 시간들에 걸쳐 추정된 메모리 할당을 고려하여, 각각의 단계에 대한 시간 추정을 계산할 수 있다.
[0016] 메모리 관리기는, 메모리 할당이 임계 할당에 도달하였거나 도달할 것으로 추정될 때에만, 가비지 콜렉션 이벤트들을 스케줄링하려고 시도할 수 있다. 임계 할당은, 예를 들면, (예를 들면, 다음의 유휴 시간에서) 미리 결정된 시간, 또는 미리 결정된 임계 할당 레이트에 의해 할당되도록 요구되는 미리 결정된 메모리의 양일 수 있다. 메모리 관리기는 가비지 콜렉션 이벤트들 및 그들의 추정된 완료 시간들을 유휴 이벤트들로서 작업 스케줄러에 부가할 수 있고, 스케줄러는 이벤트 크기 및 스케줄링된 유휴 시간들에 기초하여 이벤트들을 선택할 수 있다. 가비지 콜렉션 이벤트들은 FIFO 순서로 그룹화될 수 있다. 예를 들면, 다수의 이벤트들이, 오브젝트들을 증분하여 마킹하는데 요구될 수 있고, 각각의 이벤트는 시간-부분 청크(예를 들면, 10 ms, 20 ms, 50 ms 등)로서 스케줄링될 수 있다. 가비지 콜렉션 이벤트들은 자신들의 스케줄링된 순서로 미래의 유휴 시간 기간들에서 수행되도록 스케줄링될 수 있다.
[0017] 도 1은 본 기술의 하나 이상의 양상들에 따른, 프로세서 유휴 기간들 동안에 소프트웨어 가비지 콜렉션을 스케줄링하기 위한 예시적인 컴포넌트들을 포함하는 예시적인 시스템(100)을 도시한다. 시스템(100)은 프로세서(102) 및 메모리(104)를 포함한다. 애플리케이션 프로세스(106)가 시작될 때, 프로세스에 대응하는 실행 가능 파일은 프로세스(106)에 할당된 메모리(104) 내의 가상 어드레스 공간으로 맵핑된다. 가상 어드레스 공간은 또한 오브젝트 히프(object heap)(108)를 포함할 수 있다. 오브젝트 히프(108)는 어드레스 공간으로 맵핑되는 부가적인 라이브러리들에 대해 이용 가능하게 될 수 있다. 오브젝트 히프(108)는 애플리케이션 또는 애플리케이션이 동작하는 런타임 환경(예를 들면, 운영 시스템 또는 가상 머신을 포함함)에 의해 관리될 수 있다. 이러한 관리는 프로세스(106)의 실행 동안에 메모리 공간을 확보하기 위한 가비지 콜렉션을 포함할 수 있다. 애플리케이션 프로세스(106)는 웹 애플리케이션, 웹 애플리케이션 내의 스크립팅 또는 컴파일 동적 프로그래밍 언어로부터 유도된 실행 프로세스들 또는 런타임 환경 내에서 실행할 수 있는 다른 애플리케이션일 수 있다.
[0018] 시스템(100)은, 어떠한 작업들이 임의의 주어진 시간에 메인 스레드(main thread) 상에서 실행되어야 하는지를 결정하는 작업 스케줄러(110)를 더 포함한다. 따라서, 작업 스케줄러(110)는 레이턴시 민감 작업들(예를 들면, 입력 이벤트들 또는 컴포지터 업데이트들)의 우선순위화를 가능하게 한다. 하나 이상의 구현들에서, 작업 스케줄러(110)는 다수의 소프트웨어 컴포넌트들을 포함하고, 하나 이상의 컴포넌트들은 본 기술에 따라 적응된 소프트웨어 가비지 콜렉터의 부분이거나 소프트웨어 가비지 콜렉터 내에 임베딩된다. 부가적으로 또는 대안적으로, 작업 스케줄러(110)는 (예를 들면, API(application programming interface)를 통해) 소프트웨어 가비지 콜렉터와 통신하는 하나 이상의 컴포넌트들을 포함할 수 있다. 이와 관련하여, 작업 스케줄러(110)의 하나 이상의 컴포넌트들은 가비지 콜렉터 내의 작업 스케줄링-관련 컴포넌트들에 프로세서 유휴 시간들을 통지할 수 있다. 따라서, 작업 스케줄러(110)의 컴포넌트들은 작업들이 상이한 작업 타입들(예를 들면, 컴포지터 작업들, 가비지 콜렉션 작업들, 일반 작업들 등)로 포스팅되는 것을 가능하게 하고, 이것은 (예를 들면, 가비지 콜렉터 내의) 작업 스케줄러의 컴포넌트들이 어떠한 타입의 작업이 특정 시간에 실행되어야 하는지를 결정하는 것을 가능하게 한다. 작업 스케줄러(110)는 작업을 유휴 작업으로 카테고리화할 수 있다.
[0019] 작업 스케줄러(110)는 계류중인 유휴 작업들의 큐를 유지하고, 실행의 유휴 기간들 동안에 이들 작업들을 스케줄링할 것이다. 작업 스케줄러(110)는, 유휴 이벤트들이 프레임 레이턴시의 증가를 발생시키지 않을 시간들에서 유휴 이벤트들을 스케줄링하기 위해, 프레임 시작 및 커밋(commit) 이벤트들뿐만 아니라 현재 계류중인 다른 작업들(예를 들면, 더 높은 우선순위 작업들)의 상태에 관한 드로잉 컴포지터(drawing compositor)(112)로부터의 통지들을 사용할 수 있다. 유휴 작업들은 또한, 예를 들면, 어떠한 프레임들도 드로잉 컴포지터(112)에 의해 커밋되지 않는 더 긴 유휴 기간들 동안에 수행될 수 있다. 작업 스케줄러(110)는 다른 작업들에 대해 작업들을 재정렬할 수 있다. 각각의 작업은 작업 스케줄러(110)에 의해 제공된 작업 데드라인과 연관될 수 있다. 데드라인이 만료되기 전에 작업이 완료될 수 없다면, 작업은 다음 유휴 기간 동안에 수행되도록 재스케줄링될 수 있다.
[0020] 유휴 기간 동안에, 스케줄러는 계류중인 큐로부터 가장 오래된 작업을 취하고, 남아있는 유휴 기간 시간 미만 또는 그와 동일한 데드라인을 사용하여 그의 실행을 스케줄링할 수 있다. 작업이 이러한 데드라인 전에 완료되면, 스케줄러는 데드라인까지 FIFO(first in first out) 순서로 유휴 작업들의 실행을 계속할 수 있다. 유휴 작업은 단지 한번 실행될 수 있고, 실행될 때, 작업 스케줄러(110)는, 데드라인이 만료되기 전에 허용된 시간에서 작업이 임의의 유용한 작업을 할 수 있는지를 결정할 수 있다. 어떠한 유용한 작업도 이루어질 수 없다면, 작업은 실행되는 것이 아니라 대신에 유휴 큐로 리포스팅(repost)될 수 있다. 대부분의 유휴 작업들은, 예를 들면, 프레임들 사이에 실행될 수 있다. 이와 관련하여, 데드라인은, 예를 들면, 10 ms, 25 ms, 50 ms 등 미만 또는 이와 동일한 x 듀레이션의 시간 기간일 수 있다.
[0021] 일부 구현들에서, 작업 스케줄러(110)로 포스팅되는 유휴 작업들은 인입 유휴 작업 큐에 첨부될 수 있다. 새로운 유휴 기간의 시작에서, 인입 작업들은 계류중인 유휴 작업 큐에 플러싱(flush)될 수 있고, 여기서 작업 스케줄러(110)는 그들을 FIFO 방식으로 실행할 수 있다. 이러한 예에서, 유휴 작업들은, 데드라인이 만료되기 전에 자신들이 어떠한 실제 작업도 할 수 없을지라도, 그들 자신의 실행 동안에 자신들을 리포스팅할 수 있다. 하나 이상의 구현들에서, 작업 스케줄러(110)는 유휴 작업들보다 우선적으로 유휴 시간들 동안에 더 높은 우선순위 작업들(예를 들면, 컴포지터 또는 입력 작업들)을 스케줄링할 수 있다.
[0022] 작업 스케줄러(110)는, 유휴 기간들이 시작하고 종료해야 하는 때를 결정하기 위해 다양한 신호들을 사용할 수 있다. 예를 들면, 작업 스케줄러(110)는, 유휴 작업들이 프레임이 커밋된 시간과 다음 프레임이 시작할 것으로 예상된 시간 사이에서만 스케줄링되는 것을 보장하기 위해, 소프트웨어 드로잉 컴포지터(112)(예를 들면, 소프트웨어 런타임 환경의 부분 또는 사용자 인터페이스 또는 그의 일부를 드로잉하는 것을 담당하는 애플리케이션 프로세스)로부터의 입력을 사용할 수 있다. 따라서, 인터-프레임 시간들에 대한 유휴 기간들이 제한되고, 컴포지터가 (드로잉되지 않은 프레임들로 인해) 활성이 아닐 때, 어떠한 유휴 기간들도 발생하지 않을 수 있다. 일 예는, 어떠한 프레임들도 일정 시간 기간 동안에 드로잉되지 않는다면, 유휴 기간을 트리거링할 지연된 작업을 포스팅하는 것을 포함할 수 있다.
[0023] 도 1에 도시된 바와 같이, 시스템(100)은 메모리 관리기(114)를 더 포함할 수 있다. 메모리 관리기(114)는 소프트웨어 런타임 환경을 위한 메모리를 관리하고, 메모리 할당을 모니터링하고, 결정된 메모리 할당에 기초하여 가비지 콜렉션 이벤트들을 (작업들로서) 작업 스케줄러(110)로 포스팅하도록 구성된다. 앞서 설명된 바와 같이, 메모리 관리기(114)는 얼마나 많은 메모리가 할당되었는지 및 얼마나 많은 메모리가 작업 스케줄러(110)에 의해 결정된 미래의 유휴 시간들에서 할당될 수 있는지를 추정할 수 있다.
[0024] 메모리 관리기(114)는, 예를 들면, 다음의 유휴 시간(들)을 결정하고 할당 레이트에 기초하여 얼마나 많은 메모리가 다음의 유휴 시간(들)까지 할당될 것인지를 결정하기 위해, 작업 스케줄러(110)를 폴링(poll)할 수 있다. 이어서, 메모리 관리기(114)는, 예를 들면, 추정된 메모리 할당 및 과거 가비지 콜렉션 이벤트들에 기초하여, 메모리를 가비지 콜렉팅하는데 얼마나 오래 걸릴 수 있는지를 추정할 수 있다. 예를 들면, 메모리 관리기(114)는, 애플리케이션의 평균 메모리 할당 레이트, 신생(young) 및/또는 오래된 오브젝트들에 대한 (예를 들면, MB 당) 평균 가비지 콜렉션 시간, 및 (예를 들면, MB 당) 평균 마킹 속도에 기초하여 가비지 콜렉션의 듀레이션을 추정할 수 있다. 가비지 콜렉션 이벤트의 듀레이션을 추정하기 위한 다른 예시적인 팩터들은 히프 상태(예를 들면, 단편화된, 일관된, 손상된 퍼센티지), 커밋된, 자유, 예비된 히프의 퍼센티지, 할당 로드 및 마킹 속도(예를 들면, 과거 속도들에 기초함)를 포함할 수 있다.
[0025] 메모리 관리기(114)는 증분 가비지 콜렉션(예를 들면, 0 ms-XX ms로부터 선형으로 구성됨), 스캐빈지들(scavenges)(예를 들면, 약 5-10 ms) 및 긴 완전한 가비지 콜렉션들(예를 들면, 30-XXX ms)을 트리거링할 수 있다. 메모리 관리기(114)는, 작업이 완료될 것으로 추정된 시간을 포함하여, 각각의 가비지 콜렉션 이벤트를 작업 스케줄러(110)로 포스팅할 수 있다. 일부 구현들에서, 메모리 관리기(114)는, 이벤트들 또는 작업들이 미리 결정된 길이보다 더 길다면, 더 큰 이벤트들 또는 작업들을 더 작은 청크들로 분해하거나, 가비지 콜렉션 이벤트들을 미리 결정된 듀레이션(예를 들면, 10 ms 또는 50 ms)의 작업들로 조직할 수 있다.
[0026] 하나 이상의 구현들에서, 작업 스케줄러(110)는 계류중인 작업들(가비지 콜렉션 작업들을 포함함)의 글로벌 리스트를 유지하고, 그들을 우선순위화한다. 일 예에서, 메모리 관리기(114)는, 작업에 대한 우선순위 및 이벤트의 타입(예를 들면, 마킹, 완결, 스위핑, 간결화(compaction)), 및 작업에 대한 추정된 실행 시간을 포함하여, 유휴 작업으로서 가비지 콜렉션 이벤트 또는 그 이벤트의 부분을 메인 스레드로 포스팅할 수 있다. 이러한 방식으로, 메모리 관리기(114)는 가비지 콜렉션 작업들을 작업 스케줄러(110)로 포스팅할 수 있고, 드로잉 컴포지터(112)는 계류중인 유휴 작업들을 실행하기에 양호한 기회들에 관하여 작업 스케줄러(110)에 통지할 수 있고, 이어서 작업 스케줄러(110)는 어떠한 작업을 실행할지 및 언제할지를 결정할 수 있다.
[0027] 작업 스케줄러(110) 및 메모리 관리기(114)는, 작업 조직 및 우선순위뿐만 아니라 (예를 들면, 하나 이상의 API들을 통해) 런타임 환경 내에서 생성되는 오브젝트들의 가비지 콜렉션을 관리하기 위해, 런타임 환경(예를 들면, 가상 머신) 외부에서 구현될 수 있다. 부가적으로 또는 대안적으로, 작업 스케줄러(110) 및 메모리 관리기(114)의 컴포넌트들은 런타임 환경의 부분이거나 런타임 환경 내에 임베딩될 수 있다. 런타임 환경은 웹 브라우저 애플리케이션의 부분이거나 웹 브라우저 애플리케이션 내에 임베딩되고 그리고/또는 웹 애플리케이션들(예를 들면, JAVASCRIPT, JAVA 애플릿들) 및 런타임 환경 내에서 실행되는 다른 동적 프로그래밍 언어들을 담당할 수 있다. 하나 이상의 구현들에서, 드로잉 컴포지터(112)는 애플리케이션 프로세스(106)에 대한 (예를 들면, 윈도우의) 디스플레이 내에서 프레임들을 리드로잉하는 것을 담당하는 런타임 환경의 디스플레이 렌더링 컴포넌트일 수 있다.
[0028] 도 2는 본 기술의 양상들에 따른, 유휴 작업들을 포함하는 계류중인 작업들의 예시적인 스케줄(200)의 도면을 도시한다. 작업 스케줄러(110)는 드로잉 컴포지터(112)로부터 (예를 들면, 미리 결정된 프레임 레이트에 기초한) 프레임 시작 시간들(202)의 통지들을 수신하고, 프레임 시작 시간들(202)에 기초하여 작업들의 스케줄을 설정한다. 도시된 예는 2 개의 연속적인 작업 기간들을 정의하는 3 개의 프레임 시작 시간들(202)을 포함한다. 작업 스케줄러(110)는 애플리케이션(106) 및/또는 런타임 환경으로부터 애플리케이션 작업들을 수신하고, 드로잉 레이턴시가 프레임 레이트에 기초하여 감소되거나 제거되도록 애플리케이션 작업들을 조직한다. 예를 들면, 작업 스케줄러(110)는 프레임 시작에 관한 (예를 들면, 컴포지터(112)로부터의) 메시지들에 대한 런타임 환경에 대한 커맨드 큐를 모니터링하고, 연속적인 시작 시간들(202) 사이의 유휴 기간들(204, 206)을 결정할 수 있다.
[0029] 도시된 바와 같이, 작업 스케줄러(110)는, 유휴 기간(204, 206)을 정의하는 다음의 프레임 시작까지 남아있는 시간을 사용하여, 본질적인 작업들, 이를테면, 입력 작업들(208)(예를 들면, 사용자 입력 키 또는 커맨드를 정의함) 및 컴포지터 작업들(210)(예를 들면, 프레임을 드로잉함)을 먼저 스케줄링할 수 있다. 하나 이상의 구현들에서, 예를 들면, 프레임 종료(예를 들면, 프레임 커밋) 시간으로부터 다음의 프레임 시작 시간(202)까지의 유휴 기간들(204, 206)이 결정될 수 있다. 유휴 기간들(204, 206)은, 가비지 콜렉션 작업들을 포함하는 작업들을 작업 큐로 포스팅하기 위해 작업 스케줄러(110)에 의해 사용될 수 있다.
[0030] 일부 양상들에서, 유휴 작업(예를 들면, 가비지 콜렉션 작업)은 유휴 기간 내에 완료될 수 없을 수도 있다. 예를 들면, 작업 스케줄러(110)는 유휴 작업(212), 50 ms 작업을 유휴 기간(204)으로 포스팅하려고 시도할 수 있다. 그러나, 작업 스케줄러(110)는 유휴 기간(204) 동안에 하나 이상의 높은 우선순위 작업들(214)을 이미 스케줄링하여서, 유휴 작업(212)이 완료되기 위해 이용 가능한 50 미만의 ms를 남긴다. 이러한 상황 예에서, 유휴 작업(212)은 즉시 리턴하고, 리포스팅된 작업을 완료하기 위해 충분히 긴 듀레이션을 갖는 후속 유휴 기간, 예를 들면, 도 2의 유휴 기간(206)으로 리포스팅된다.
[0031] 일부 구현들에서, 작업 스케줄러(110)는 유휴 작업 실행을 하나의 인트라-프레임 기간으로 제한하고, 현재 데드라인 내에 완료될 수 없는 작업들이 동일한 유휴 기간의 나머지 동안에 자신들을 리포스팅하는 것을 방지할 수 있다. 이것은 작업이 유휴 기간의 나머지 동안에 자신을 반복적으로 리포스팅하고 CPU 전력을 불필요하게 버닝(burning)하는 것을 방지할 수 있다.
[0032] 하나 이상의 구현들에서, 작업 스케줄러(110)는, 드로잉 컴포지터(112)로부터의 입력에 기초하여, 어떠한 프레임들도 드로잉 컴포지터(112)에 의해 커밋되지 않는 더 긴 유휴 기간들을 결정할 수 있다. 이러한 경우에, 유휴 작업들은 단일 유휴 기간(204, 206) 동안에 미리 결정된 청크 듀레이션(예를 들면, 50 ms 유휴 작업)으로 제한되지 않을 수 있다. 작업 스케줄러(110)는, 전체 유휴 기간 내에 스케줄링된 작업들이 입력 이벤트들의 차단 및 따라서 입력 이벤트들에 대한 현저한 레이턴시를 방지하기 위해 각각의 미리 결정된 청크 듀레이션(예를 들면, 각각의 50 ms)의 종료 시에 스케줄링 제어를 다시 스케줄러에 양보하는 한, 임의의 필요한 백그라운드 작업을 하기 위해 전체 유휴 기간을 스케줄링하도록 구성될 수 있다. (예를 들면, 미리 결정된 듀레이션에 걸쳐) 긴 유휴 기간들(204, 206) 동안에, 작업들은 동일한 유휴 기간으로 리포스팅하도록 허용될 수 있다. 유휴 기간의 나머지가 유휴 작업 듀레이션을 완료하기에 충분히 긴 한, 유휴 작업이 거절되지 않아야 하고, 따라서 작업이 자신을 반복적으로 리포스팅하려고 시도하기 위한 능력을 방지한다.
[0033] 도 3은 본 기술의 양상들에 따른, 프로세서 유휴 기간들 동안에 소프트웨어 가비지 콜렉션을 스케줄링하기 위한 제 1 예시적인 프로세스(300)의 흐름도를 도시한다. 설명 목적으로, 예시적인 프로세스(300)는 도 1 및 도 2의 컴포넌트들을 참조하여 본원에 설명된다. 추가로 설명 목적들로, 예시적인 프로세스(300)의 블록들은 연속적으로 또는 선형으로 발생하는 것으로 본원에 설명된다. 그러나, 예시적인 프로세스(300)의 다수의 블록들은 병렬로 발생할 수 있다. 또한, 예시적인 프로세스(300)의 블록들은 도시된 순서로 수행될 필요는 없고 그리고/또는 예시적인 프로세스(300)의 블록들 중 하나 이상이 수행될 필요가 없다.
[0034] 도시된 예시적인 흐름도에서, 시스템(100)(예를 들면, 작업 스케줄러(110))은, 프로세서(102)가 하나 이상의 소프트웨어 애플리케이션들의 실행 동안에 유휴 상태에 있을 미래의 유휴 시간 기간(예를 들면, 유휴 기간(204))을 결정한다(302). 위에서 설명된 바와 같이, 미래의 유휴 시간 기간은 제 1 프레임 렌더링 시작 시간 및 제 2 프레임 렌더링 시간에 의해 결정될 수 있다. 프레임 시작 시간들은 드로잉 컴포지터(112)로부터 결정될 수 있다. 드로잉 컴포지터(112)는, 예를 들면, 미리 결정된 프레임 레이트에 따라 작업 스케줄러(110)를 통해 프레임들을 스케줄링할 수 있다. 예를 들면, 60 fps(frames per second) 드로잉 컴포지터는 각각의 16.6 ms를 시작하기 위해 프레임 시작 시간들을 포스팅할 수 있다. 결정된 미래의 유휴 기간은, 애플리케이션 또는 런타임 환경에 의해 요구되는 애플리케이션 작업들(예를 들면, 입력 작업들, 컴포지터 작업들)을 포함하지 않는 제 1 프레임 렌더링 시작 시간과 제 2 프레임 렌더링 시작 시간 사이의 시간 기간일 수 있다.
[0035] 사용자-대화형(interactive) 애플리케이션들(예를 들면, 레이아웃 및 래스터화(rasterization)를 구현하는 자바스크립트 애플리케이션들)에서, 16.6 ms보다 더 큰 프레임 계산 시간은 바람직하지 않게 높은 레이턴시를 갖는 것으로 고려될 수 있다. 그러나, 동일한 애플리케이션들은, 수행될 때, 프레임 듀레이션보다 더 길고 이로써 프레임 드로잉에서 바람직하지 않은 사용자-지각 가능한 멈춤들을 발생시키는 가비지 콜렉션 프로세스들을 포함할 수 있다. 예를 들면, 가비지 콜렉션은, 예를 들면, 커밋될 때, 총괄적으로 수행되기 위한 상당한 양의 시간을 요구하는 마킹된 오브젝트들의 스캐빈징, 마킹 및 간결화를 포함하는 다수의 상이한 이벤트들을 포함할 수 있다. 가비지 콜렉션을 턴 오프하는 것은 메모리 부족 오류들(out-of-memory errors)을 발생시킬 수 있고, 가비지 콜렉션을 프로그래밍 방식으로(programmatically) 호출하는 것은 가비지 콜렉션 휴리스틱(heuristics)에 부정적으로 영향을 줄 수 있다. 많은 경우들에서, 애플리케이션들은 가비지 콜렉터와 상호작용하지 않아야 한다. 따라서, 본 기술은 다양한 가비지 콜렉션 이벤트들을, 유휴 작업들로서 작업 스케줄러(110)로 포스팅되고 시스템이 유휴 상태에 있는 동안에 수행될 수 있는 더 작고 더 많은 관리 가능한 청크들로 자동적으로 분리한다. 따라서, 가비지 콜렉션은 애플리케이션으로부터 여전히 은닉되지만, 프레임 지연의 가능성을 감소시킨다.
[0036] 따라서, 가비지 콜렉션 이벤트들을 분해하기 위해, 시스템(100)은 먼저 얼마나 많은 가비지 콜렉션이 요구되는지를 결정한다. 이와 관련하여, 시스템(100)(예를 들면, 메모리 관리기(114))은, 미래의 유휴 시간 기간에 대해, 하나 이상의 소프트웨어 애플리케이션들에 대한 메모리 할당을 추정한다(304). 메모리 관리기(114)는, 각각의 상이한 타입의 이용 가능한 가비지 콜렉션 이벤트들에 대해 메모리를 가비지 콜렉팅하는데 얼마나 오래 걸릴 수 있는지를 추정할 수 있다. 예를 들면, 메모리 관리기(114)는 (예를 들면, MB 당) 신생 및/또는 오래된 오브젝트들, (예를 들면, MB 당) 신생 및/또는 오래된 오브젝트들의 마킹, 및 간결화에 대한 가비지 콜렉션의 듀레이션을 추정할 수 있다. 메모리 관리기(114)는 히프 상태(예를 들면, 단편화된, 일관된, 손상된 퍼센티지), 커밋된, 자유, 예비된 히프의 퍼센티지, 할당 레이트, 할당 로드 및 가비지 콜렉션 마킹 속도(예를 들면, 과거 속도들에 기초함)를 포함하는 다양한 팩터들에 기초하여 각각의 이벤트에 대한 추정들을 제공할 수 있다.
[0037] 메모리 관리기(114)는, 예를 들면, 다음의 유휴 시간(들)을 결정하고 전술된 팩터들에 기초하여 얼마나 많은 메모리가 다음의 유휴 시간(들)까지 할당될 것인지를 할당의 레이트(과거 또는 현재)에 기초하여 결정하기 위해, 작업 스케줄러(110)를 폴링할 수 있다. 예를 들면, 메모리 관리기(114)는 x MB가 할당되었고 현재 할당 레이트가 y MB/ms이라고 결정할 수 있다. 다음의 유휴 시간이 3 ms 내에 있다면, x + 3y MB가 다음의 유휴 시간까지 할당될 것으로 추정된다. 일단 할당이 결정되면, 메모리 관리기(114)는 각각의 타입의 이벤트에 얼마나 많은 시간이 걸리는지를 결정할 수 있다.
[0038] 가비지 콜렉션 이벤트들은 미리 결정된 이벤트 작업들로 해체될 수 있고, 각각의 이벤트 작업은 일련의 서브작업들 또는 커맨드들을 포함하는 이벤트의 청크이다. 각각의 작업은, 그가 미리 결정된 듀레이션에서 실행될 수 있도록 생성된다. 예를 들면, 오래된 오브젝트의 마킹과 같은 가비지 콜렉션 이벤트가 400 ms가 걸린다고 추정되면, 이벤트는 8 개의 50 ms 작업들(또는 몇몇의 미리 결정된 듀레이션)로 분리될 수 있다. 시스템(100)은 임의의 미리 결정된 시간의 양에 기초하여 이벤트에 대한 작업들을 생성할 수 있다. 예를 들면, 각각의 작업은 10 ms, 25 ms, 50 ms 등일 수 있다.
[0039] 일부 양상들에서, 추정된 메모리 할당은 다수의 미래의 스케줄링된 유휴 시간들에 걸친 메모리 할당에 기초할 수 있다. 예를 들면, 메모리 관리기(114)는 이전에 생성된 가비지 콜렉션 작업(212)이, 유휴 기간(204) 동안에 작업 스케줄러(110)로 포스팅된 후에, 리턴되었다고 결정할 수 있다. 이어서, 메모리 관리기(114)는 후속 유휴 기간(206)에 대한 메모리 할당을 재계산할 수 있다. 부가적으로 또는 대안적으로, 메모리 관리기(114)는 가비지 콜렉션 이벤트가 단일 유휴 기간에 완료될 수 없다고 결정할 수 있다. 따라서, 메모리 관리기(114)는 이벤트를 완료하기 위한 추정된 수의 유휴 기간들을 결정하고, 그 수의 유휴 기간들에 대한 메모리 할당을 결정할 수 있다.
[0040] 도 3을 추가로 참조하여, 시스템(100)(예를 들면, 작업 스케줄러(110))은 결정된 미래의 유휴 시간 기간 및 추정된 메모리 할당에 기초하여 복수의 미리 결정된 소프트웨어 가비지 콜렉션 이벤트들 중 하나를 선택한다(306). 하나 이상의 구현들에서, 추정된 메모리 할당이, 예를 들면, 결정된 미래의 유휴 시간 기간에서 메모리의 임계 할당을 충족시킨다고 먼저 결정되는 경우에만, 가비지 콜렉션 이벤트가 선택될 것이다. 임계치는 총 할당, 할당 레이트, 신생 또는 오래된 오브젝트들의 할당 등에 기초할 수 있다. 하나 이상의 구현들에서, 작업 스케줄러(110)는 이벤트 큐 내의 가비지 콜렉션 이벤트들의 타입들을 분석하고, 시스템의 성능을 최대화하기 위해 이벤트들(또는 이벤트들에 대한 작업들)을 스케줄링할 수 있다. 작업 스케줄러(110)(또는, 예를 들면, 작업 스케줄러(110)의 컴포넌트들과 적응된 시스템 가비지 콜렉터)는 단일 유휴 기간에서 또는 (예를 들면, 일련의 작업들로서) 큐 내의 이벤트들에 대한 최소수의 유휴 기간들에 걸쳐 완료될 수 있는 이벤트를 선택할 수 있다. 작업 스케줄러(110)는, 가장 작은 시간 듀레이션 또는 가장 작은 수의 작업 청크들에서 (예를 들면, 가비지 콜렉션을 통해) 가장 최적화된 메모리를 제공하는 이벤트에 대한 작업들을 스케줄링할 수 있다.
[0041] 하나 이상의 구현들에서, 작업 스케줄러(110)는 하나 이상의 미리 결정된 규칙들에 기초하여 스케줄링될 가비지 콜렉션 이벤트를 선택할 수 있다. 예를 들면, 신생 생성 가비지 콜렉션은, 신생 생성이 거의 완전(full)할 때(예를 들면, 90 퍼센트보다 더 많이 완전할 때), 선택될 수 있다. 오브젝트들의 증분 마킹(예를 들면, 다수의 오브젝트들이 미리 결정된 시간 듀레이션의 청크 작업들에서 마킹됨)은, 오브젝트들의 오래된 생성이 거의 완전할 때(예를 들면, 오브젝트들이 현재 시간에서 미리 결정된 시간보다 더 전에 90 퍼센트보다 더 많이 완전하게 생성됨), 개시될 수 있다. 후속 마킹 단계들은, 마킹이 더 이른 유휴 기간에 시작될 때, 선택될 수 있다. 레이턴시를 유도하지 않고서, 가비지 콜렉션이 완료되기에 충분한 유휴 시간이 이용 가능하다고 작업 스케줄러(110)가 결정할 때, 완전한 가비지 콜렉션이 개시 및 스케줄링될 수 있다.
[0042] 일부 양상들에서, 선택된 가비지 콜렉션 이벤트가 오브젝트 마킹 이벤트일 때, 이벤트는 복수의 증분 오브젝트 마킹 작업들로 단편화될 수 있고, 증분 오브젝트 마킹 작업들 중 제 1 작업은 이전에 설명된 미래의 유휴 시간 기간 동안에 먼저 수행되도록 스케줄링된다. 앞서 설명된 바와 같이, 복수의 증분 오브젝트 마킹 작업들은 2 개 이상의 상이한 유휴 시간 기간들 사이에서 분할되도록 스케줄링될 수 있다.
[0043] 따라서, 복수의 미리 결정된 소프트웨어 가비지 콜렉션 이벤트들 각각을 완료하기 위한 시간 추정은 추정된 메모리 할당에 기초하여 결정될 수 있고, 가비지 콜렉션 이벤트는 선택된 소프트웨어 가비지 콜렉션 이벤트에 대응하는 각각의 시간 추정 및 미래의 유휴 시간 기간의 듀레이션에 기초하여 선택된다.
[0044] 도 3을 추가로 참조하면, 시스템(100)(예를 들면, 작업 스케줄러(110))은 미래의 유휴 시간 기간 동안에 수행되도록, 선택된 소프트웨어 가비지 콜렉션 이벤트를 스케줄링한다(308). 부가적으로 또는 대안적으로, 작업들의 그룹은 유휴 시간 기간 동안에 스케줄링될 수 있다. 예를 들면, 작업 스케줄러(110)는, 미래의 유휴 시간 기간이 하나 이상의 소프트웨어 애플리케이션들에 대한 프레임들을 렌더링하는데 있어서 멈춤(예를 들면, 긴 유휴 시간)에 대응한다고 결정할 수 있다. 따라서, 작업 스케줄러(110)는 미래의 유휴 시간 기간 동안에 수행되도록 소프트웨어 가비지 콜렉션 작업들의 그룹을 스케줄링할 수 있고, 그룹은 선택된 소프트웨어 가비지 콜렉션 이벤트의 적어도 일부를 포함한다. 이러한 예에서, 그룹의 시간 듀레이션은 단일의 각각의 프레임의 듀레이션보다 더 크다(예를 들면, 16.6 ms보다 더 큼).
[0045] 이어서, 시스템(100)은 미래의 유휴 시간 기간 동안에 선택된 소프트웨어 가비지 콜렉션 이벤트를 수행한다(310). 앞서 설명된 바와 같이, 이벤트는 일련의 작업들(예를 들면, 각각의 미리 결정된 듀레이션)로서 수행될 수 있다. 일부 경우들에서, 이벤트는 단지 하나의 작업, 또는 동일한 유휴 기간에 수행될 수 있는 몇몇의 작업들일 수 있다. 그러나, 미래의 유휴 시간 기간은 연속적일 수 있거나, (예를 들면, 시스템 작업들과 각각의 프레임의 종료 사이에서) 몇몇의 프레임들에 걸쳐 있을 수 있다.
[0046] 위에서 설명된 예시적 프로세스들(200, 300 및 400) 및 관련된 피쳐들 및 애플리케이션들 대부분은 컴퓨터 판독 가능 저장 매체(또한 컴퓨터 판독 가능 매체로 지칭됨) 상에 기록된 명령들의 세트로서 특정되는 소프트웨어 프로세스들로서 구현될 수 있다. 이들 명령들이 하나 이상의 프로세싱 유닛(들)(예컨대, 하나 이상의 프로세서들, 프로세서들의 코어들, 또는 다른 프로세싱 유닛들)에 의해 실행될 때, 이들 명령들은 프로세싱 유닛(들)으로 하여금 명령들에서 표시되는 동작들을 수행하게 한다. 컴퓨터 판독 가능 매체들의 예들은 CD-ROM들, 플래시 드라이브들, RAM 칩들, 하드 드라이브들, EPROM들 등을 포함하지만, 이들로 제한되지는 않는다. 컴퓨터 판독 가능 매체들은 무선으로 또는 유선 연결들을 통해 전달되는 전자 신호들 및 반송파(carrier wave)들을 포함하지 않는다.
[0047] "소프트웨어"라는 용어는, 적절한 경우, 판독-전용 메모리에 상주하고 있는 펌웨어 또는 자기 저장소(magnetic storage)에 저장된 애플리케이션들을 포함하는 것을 의미하며, 이들은 프로세서에 의한 프로세싱을 위해 메모리에 입력(read into)될 수 있다. 또한, 일부 구현들에서, 본 개시내용의 다수의 소프트웨어 양상들은 본 개시내용의 개별 소프트웨어 양상들을 유지하면서 더 큰 프로그램의 서브-부분(sub-part)들로서 구현될 수 있다. 일부 구현들에서, 다수의 소프트웨어 양상들은 또한 개별 프로그램들로서 구현될 수 있다. 최종적으로, 여기서 설명되는 소프트웨어 양상을 함께 구현하는 개별 프로그램들의 임의의 조합이 본 개시내용의 범위 내에 속한다. 일부 구현들에서, 소프트웨어 프로그램들은, 하나 이상의 전자 시스템들 상에서 동작하도록 설치될 때, 소프트웨어 프로그램들의 동작들을 실행 및 수행하는 하나 이상의 특정 머신 구현(specific machine implementation)들을 정의한다.
[0048] 컴퓨터 프로그램(또한 프로그램, 소프트웨어, 소프트웨어 애플리케이션, 스크립트, 또는 코드로 알려짐)은 컴파일러형 언어(compiled language)들 또는 인터프리트형 언어(interpreted language)들, 선언형 언어(declarative language)들 또는 절차형 언어(procedural language)들을 포함한 임의의 형태의 프로그래밍 언어로 기록될 수 있으며, 독립형 프로그램 또는 모듈, 컴포넌트, 서브루틴, 오브젝트, 또는 컴퓨팅 환경에서 이용하기에 적합한 다른 유닛을 포함한 임의의 형태로 전개될 수 있다. 컴퓨터 프로그램은 파일 시스템 내의 파일에 대응할 수 있지만, 반드시 그러할 필요는 없다. 프로그램은 다른 프로그램들 또는 데이터를 유지하는 파일의 부분(예컨대, 마크업 언어 도큐먼트에 저장된 하나 이상의 스크립트들)에 저장되거나, 해당 프로그램 전용의 단일 파일에 저장되거나, 또는 다수의 협력형 파일(coordinated file)들(예컨대, 하나 이상의 모듈들, 서브 프로그램들, 또는 코드의 부분들을 저장하는 파일들)에 저장될 수 있다. 컴퓨터 프로그램은 하나의 컴퓨터 상에서 실행되도록 전개되거나, 또는 하나의 사이트에 로케이팅된 또는 다수의 사이트들에 걸쳐 분산되어 통신 네트워크에 의해 상호연결된 다수의 컴퓨터들 상에서 실행되도록 전개될 수 있다.
[0049] 도 4는 본 기술의 하나 이상의 양상들에 따라, 프로세서 유휴 기간들 동안에 소프트웨어 가비지 콜렉션을 스케줄링하는 것과 관련하여 사용하기 위한 예시적 전자 시스템(400)을 예시하는 도면이다. 전자 시스템(400)은 컴퓨팅 디바이스(100)의 동작과 연관된 소프트웨어, 또는 프로세스(300)의 하나 이상의 부분들 또는 단계들, 또는 도 1 내지 도 3에 의해 제공된 컴포넌트들 및 프로세스들과 연관된 소프트웨어의 실행을 위한 컴퓨팅 디바이스일 수 있다. 다양한 구현들에서, 전자 시스템(400)은 시스템(100)을 나타낼 수 있다. 이와 관련하여, 전자 시스템(400) 또는 시스템(100)은 개인용 컴퓨터 또는 모바일 디바이스, 이를테면, 태블릿 컴퓨터, 랩톱, 스마트폰, PDA, 또는 하나 이상의 프로세서들이 그 안에 임베딩되거나 그에 커플링되는 다른 터치 스크린 또는 텔레비전, 또는 무선 연결성을 갖는 임의의 다른 종류의 컴퓨터-관련 전자 디바이스일 수 있다.
[0050] 전자 시스템(400)은 다양한 타입들의 컴퓨터 판독 가능 매체들 및 다양한 다른 타입들의 컴퓨터 판독 가능 매체들에 대한 인터페이스들을 포함할 수 있다. 도시된 예에서, 전자 시스템(400)은 버스(408), 프로세싱 유닛(들)(412), 시스템 메모리(404), ROM(read-only memory)(410), 영구 저장 디바이스(402), 입력 디바이스 인터페이스(414), 출력 디바이스 인터페이스(406) 및 하나 이상의 네트워크 인터페이스들(416)을 포함한다. 일부 구현들에서, 전자 시스템(400)은 이전에 설명된 다양한 컴포넌트들 및 프로세스들의 동작을 위해 다른 컴퓨팅 디바이스들 또는 회로를 포함하거나 또는 그들과 통합될 수 있다.
[0051] 버스(408)는 전자 시스템(400)의 다수의 내부 디바이스들을 통신 가능하게 연결하는 모든 시스템, 주변장치 및 칩셋 버스들을 총괄적으로 나타낸다. 예컨대, 버스(408)는 프로세싱 유닛(들)(412)을 ROM(410), 시스템 메모리(404) 및 영구 저장 디바이스(402)와 통신 가능하게 연결한다.
[0052] 이러한 다양한 메모리 유닛들로부터, 프로세싱 유닛(들)(412)은 본 개시내용의 프로세스들을 실행하기 위해, 실행할 명령들 및 프로세싱할 데이터를 리트리브한다. 프로세싱 유닛(들)은 상이한 구현들에서 단일 프로세서 또는 멀티-코어 프로세서일 수 있다.
[0053] ROM(410)은 전자 시스템의 프로세싱 유닛(들)(412) 및 다른 모듈들에 의해 필요로 되는 정적 데이터 및 명령들을 저장한다. 반면에, 영구 저장 디바이스(402)는 판독-및-기록 메모리 디바이스이다. 이러한 디바이스는, 전자 시스템(400)이 오프일 때조차 명령들 및 데이터를 저장하는 비-휘발성 메모리 유닛이다. 본 개시내용의 일부 구현들은 영구 저장 디바이스(402)로서 대용량-저장 디바이스(이를테면, 자기 또는 광학 디스크 및 그것의 대응하는 디스크 드라이브)를 사용한다.
[0054] 다른 구현들은 영구 저장 디바이스(402)로서 착탈식 저장 디바이스(이를테면, 플로피 디스크, 플래시 드라이브 및 그것의 대응하는 디스크 드라이브)를 사용한다. 영구 저장 디바이스(402)와 같이, 시스템 메모리(404)는 판독-및-기록 메모리 디바이스이다. 그러나, 저장 디바이스(402)와 달리, 시스템 메모리(404)는 랜덤 액세스 메모리와 같은 휘발성 판독-및-기록 메모리이다. 시스템 메모리(404)는 프로세서가 실행시간에 필요로 하는 명령들 및 데이터 중 일부를 저장한다. 일부 구현들에서, 본 개시내용의 프로세스들은 시스템 메모리(404), 영구 저장 디바이스(402) 및/또는 ROM(410)에 저장된다. 이러한 다양한 메모리 유닛들로부터, 프로세싱 유닛(들)(412)은 일부 구현들의 프로세스들을 실행하기 위해 실행할 명령들 및 프로세싱할 데이터를 리트리브한다.
[0055] 버스(408)는 또한 입력 및 출력 디바이스 인터페이스들(414 및 406)에 연결된다. 입력 디바이스 인터페이스(414)는 사용자가 정보 및 선택 커맨드들을 전자 시스템에 통신하는 것을 가능하게 한다. 입력 디바이스 인터페이스(414)와 함께 사용되는 입력 디바이스들은, 예컨대, 알파벳 숫자 키보드들 및 포인팅 디바이스들(또한 "커서 제어 디바이스들"로 지칭됨)을 포함한다. 출력 디바이스 인터페이스들(406)은, 예컨대, 전자 시스템(400)에 의해 생성되는 이미지들의 디스플레이를 가능하게 한다. 출력 디바이스 인터페이스(406)와 함께 사용되는 출력 디바이스들은, 예컨대, 프린터들 및 디스플레이 디바이스들, 이를테면, CRT(cathode ray tubes) 또는 LCD(liquid crystal displays)를 포함한다. 일부 구현들은, 입력 및 출력 디바이스들 양쪽 모두로서 기능하는 터치스크린과 같은 디바이스들을 포함한다.
[0056] 마지막으로, 도 4에 도시된 바와 같이, 버스(408)는 또한 네트워크 인터페이스들(416)을 통해 전자 시스템(400)을 네트워크(도시되지 않음)에 커플링한다. 네트워크 인터페이스들(416)은 예컨대, 무선 액세스 포인트(예컨대, 블루투스 또는 WiFi) 또는 무선 액세스 포인트에 연결하기 위한 라디오 회로를 포함할 수 있다. 네트워크 인터페이스들(416)은 또한, 컴퓨터를 컴퓨터들의 네트워크, 이를테면, 로컬 영역 네트워크("LAN"), 광역 네트워크("WAN"), 무선 LAN 또는 인트라넷 또는 네트워크들의 네트워크, 이를테면, 인터넷의 부분에 연결하기 위한 하드웨어(예컨대, 이더넷 하드웨어)를 포함할 수 있다. 전자 시스템(400)의 임의의 또는 모든 컴포넌트들은 본 개시내용과 함께 이용될 수 있다.
[0057] 위에서 설명된 이러한 기능들은 컴퓨터 소프트웨어, 펌웨어 또는 하드웨어로 구현될 수 있다. 본 기법들은 하나 이상의 컴퓨터 프로그램 제품들을 이용하여 구현될 수 있다. 프로그램가능 프로세서들 및 컴퓨터들은 모바일 디바이스들에 포함되거나 모바일 디바이스들로서 패키징될 수 있다. 프로세스들 및 논리 흐름들은 하나 이상의 프로그램가능 프로세서들에 의해 그리고 하나 이상의 프로그램가능 논리 회로에 의해 수행될 수 있다. 범용 및 특수 목적 컴퓨팅 디바이스들 및 저장 디바이스들은 통신 네트워크들을 통해 상호연결될 수 있다.
[0058] 일부 구현들은 머신-판독 가능 또는 컴퓨터-판독 가능 매체(대안적으로, 컴퓨터-판독 가능 저장 매체들, 머신-판독 가능 매체들, 또는 머신-판독 가능 저장 매체들로 지칭됨)에 컴퓨터 프로그램 명령들을 저장하는 메모리, 저장소 및 마이크로프로세서들과 같은 전자 컴포넌트들을 포함한다. 이러한 컴퓨터-판독 가능 매체들의 일부 예들은 RAM, ROM, 판독-전용 컴팩트 디스크들(CD-ROM), 기록가능 컴팩트 디스크들(CD-R), 재기입가능 컴팩트 디스크들(CD-RW), 판독-전용 디지털 다기능 디스크들(예컨대, DVD-ROM, 듀얼-레이어 DVD-ROM), 다양한 기록가능/재기입가능 DVD들(예컨대, DVD-RAM, DVD-RW, DVD+RW 등), 플래시 메모리(예컨대, SD 카드들, 미니-SD 카드들, 마이크로-SD 카드들 등), 자기 및/또는 고체 상태 하드 드라이브들, 판독-전용 및 기록가능 Blu-Ray® 디스크들, 초고밀도 광 디스크(ultra density optical disc)들, 임의의 다른 광학 또는 자기 매체들, 및 플로피 디스크들을 포함한다. 컴퓨터-판독 가능 매체들은, 적어도 하나의 프로세싱 유닛에 의해 실행가능하고, 다양한 동작들을 수행하기 위한 명령들의 세트들을 포함하는 컴퓨터 프로그램을 저장할 수 있다. 컴퓨터 프로그램들 또는 컴퓨터 코드의 예들은, 컴파일러에 의해 생성되는 것과 같은 머신 코드(machine code)와, 인터프리터(interpreter)를 이용하여 컴퓨터, 전자 부품 또는 마이크로프로세서에 의해 실행되는 상위-레벨 코드를 포함하는 파일들을 포함한다.
[0059] 앞선 논의가 주로 소프트웨어를 실행하는 마이크로프로세서 또는 멀티-코어 프로세서들을 참조하지만, 일부 구현들은 주문형 집적 회로(ASIC)들 또는 필드 프로그램가능 게이트 어레이(FPGA)들과 같은 하나 이상의 집적 회로들에 의해 수행된다. 일부 구현들에서, 이러한 집적 회로들은 회로 그 자체 상에 저장되는 명령을 실행한다.
[0060] 본 명세서 및 본 출원의 임의의 청구항들에서 사용되는 바와 같은 "컴퓨터", "서버", "프로세서", 및 "메모리"라는 용어들은 모두 전자 또는 다른 기술적 디바이스들을 지칭한다. 이러한 용어들은 사람들 또는 사람들의 그룹들을 배제한다. 본 명세서의 목적들을 위해, 디스플레이 또는 디스플레이한다는 용어들은 전자 디바이스 상에 디스플레이하는 것을 의미한다. 본 명세서 및 본원의 임의의 청구항들에서 사용되는 바와 같은 "컴퓨터 판독 가능 매체" 및 "컴퓨터 판독 가능 매체들"이라는 용어들은 정보를 컴퓨터에 의해 판독 가능한 형태로 저장하는 유형의(tangible) 물리적 오브젝트들로 전적으로 제한된다. 이러한 용어들은 임의의 무선 신호들, 유선 다운로드 신호들, 및 임의의 다른 단기성(ephemeral) 신호들을 배제한다.
[0061] 사용자와의 상호작용을 제공하기 위해, 본 명세서에서 설명된 청구대상의 구현들은, 정보를 사용자에게 디스플레이하기 위한 디스플레이 디바이스, 예컨대 CRT(cathode ray tube) 또는 LCD(liquid crystal display) 모니터, 및 사용자가 컴퓨터에 입력을 제공할 수 있게 하는 키보드 및 포인팅 디바이스, 예컨대 마우스 또는 트랙볼을 갖는 컴퓨터 상에서 구현될 수 있다. 사용자와의 상호작용을 제공하기 위해 다른 종류들의 디바이스들이 또한 이용될 수 있으며; 예컨대, 사용자에게 제공되는 피드백은 예컨대 시각적 피드백, 청각적 피드백, 또는 촉각적 피드백과 같은 임의의 형태의 감각적 피드백일 수 있고; 사용자로부터의 입력은 음향, 스피치(speech), 또는 촉각 입력을 포함한 임의의 형태로 수신될 수 있다. 추가로, 컴퓨터는, 사용자에 의해 이용되는 디바이스에 문서들을 전송하고 디바이스로부터 문서들을 수신함으로써; 예컨대 웹 브라우저로부터 수신된 요청들에 대한 응답으로 사용자의 클라이언트 디바이스 상의 웹 브라우저에 웹 페이지들을 전송함으로써, 사용자와 상호작용할 수 있다.
[0062] 본 명세서에서 설명되는 청구대상의 실시예들은, 예컨대 데이터 서버와 같은 백 엔드 컴포넌트(back end component)를 포함하거나, 예컨대 애플리케이션 서버와 같은 미들웨어 컴포넌트를 포함하거나, 또는 예컨대 사용자가 본 명세서에 설명된 청구대상의 구현과 상호작용할 수 있게 하는 그래픽 사용자 인터페이스 또는 웹 브라우저를 갖는 클라이언트 컴퓨터와 같은 프론트 엔드 컴포넌트(front end component)를 포함하거나, 또는 하나 이상의 이러한 백 엔드 컴포넌트, 미들웨어 컴포넌트 또는 프론트 엔드 컴포넌트의 임의의 조합을 포함하는 컴퓨팅 시스템에서 구현될 수 있다. 시스템의 컴포넌트들은 예컨대 통신 네트워크와 같은 임의의 형태 또는 매체의 디지털 데이터 통신에 의해 상호연결될 수 있다. 통신 네트워크들의 예들은 로컬 영역 네트워크("LAN") 및 광역 네트워크("WAN"), 인터-네트워크(예컨대, 인터넷), 및 피어-투-피어 네트워크들(예컨대, 애드 혹 피어-투-피어 네트워크들)을 포함한다.
[0063] 컴퓨팅 시스템은 클라이언트들 및 서버들을 포함할 수 있다. 클라이언트 및 서버는 일반적으로 서로 떨어져 있으며, 통상적으로 통신 네트워크를 통해 상호작용한다. 클라이언트와 서버의 관계는, 각각의 컴퓨터들 상에서 실행되고 서로에 대해 클라이언트-서버 관계를 갖는 컴퓨터 프로그램들에 의해 발생한다. 일부 실시예들에서, 서버는 (예컨대, 클라이언트 디바이스와 상호작용하는 사용자에게 데이터를 디스플레이하고, 클라이언트 디바이스와 상호작용하는 사용자로부터 사용자 입력을 수신하는 목적들을 위해) 데이터(예컨대, HTML 페이지)를 클라이언트 디바이스에 송신한다. 클라이언트 디바이스에서 생성된 데이터(예컨대, 사용자 상호작용의 결과)는 클라이언트 디바이스로부터 서버에서 수신될 수 있다.
[0064] 당업자들은 본원에서 설명되는 다양한 예시적인 블록들, 모듈들, 엘리먼트들, 컴포넌트들, 방법들, 및 알고리즘들이 전자 하드웨어, 컴퓨터 소프트웨어, 또는 이 둘의 조합들로서 구현될 수 있음을 인식할 것이다. 하드웨어와 소프트웨어의 이러한 상호교환가능성을 예시하기 위해, 다양한 예시적인 블록들, 모듈들, 엘리먼트들, 컴포넌트들, 방법들, 및 알고리즘들은 그들의 기능의 관점들에서 일반적으로 상술되었다. 그러한 기능이 하드웨어로 구현되는지 또는 소프트웨어로 구현되는지는 특정 애플리케이션, 및 전체 시스템에 부과된 설계 제약들에 의존한다. 당업자들은 설명된 기능을 각각의 특정 애플리케이션에 대해 다양한 방식들로 구현할 수 있다. 다양한 컴포넌트들 및 블록들은, 본 기술의 범위로부터 전혀 벗어남이 없이 상이하게 배열될 수 있다(예컨대, 상이한 순서로 배열되거나 또는 상이한 방식으로 파티셔닝됨).
[0065] 개시된 프로세스들의 단계들의 특정 순서 또는 계층이 예시적인 접근법들의 예시라는 것이 이해된다. 설계 선호도들에 기반하여, 프로세스들에서의 단계들의 특정 순서 또는 계층이 재배열될 수 있다는 것이 이해된다. 단계들 중 일부가 동시에 수행될 수 있다. 첨부한 방법 청구항들은 다양한 단계들의 엘리먼트들을 표본적 순서로 제시하며, 제시된 특정 순서 또는 계층으로 제한되는 것으로 여겨지는 것은 아니다.
[0066] 이전의 설명은 당업자가, 본원에서 설명된 다양한 양상들을 실시하는 것을 가능하게 하기 위해 제공된다. 이전의 설명은 본 기술의 다양한 예들을 제공하며, 본 기술은 이러한 예들로 제한되지 않는다. 이러한 양상들에 대한 다양한 수정들이 당업자들에게 용이하게 명백할 것이며, 본원에서 정의된 포괄적 원리들은 다른 양상들에 적용될 수 있다. 따라서, 청구항들은 본원에서 도시된 양상들로 제한되는 것으로 의도되는 것이 아니라 문언 청구항들과 일치하는 전체 범위가 부여되어야 하며, 여기서 단수형의 엘리먼트에 대한 참조는 구체적으로 그렇게 언급하지 않는 한 "하나 및 단 하나"를 의미하는 것으로 의도되는 것이 아니라, 그보다는 "하나 이상"을 의미하는 것이다. 구체적으로 달리 언급되지 않는 한, "일부"라는 용어는 하나 이상을 나타낸다. 남성에 관한 대명사(예컨대, 그의)는 여성 및 중성(예컨대, 그녀의 및 그것의)을 포함하며, 그 반대도 가능하다. 제목들 및 부제목들이 사용되는 경우에는, 이러한 제목들 및 부제목들은 단지 편의를 위해 사용되며, 본 발명을 제한하지 않는다.
[0067] 본원에서 이용되는 바와 같은 웹사이트라는 용어는, 하나 이상의 웹 페이지들, 웹 관련 콘텐츠 등을 호스팅 또는 저장하기 위해 이용되는 하나 이상의 웹 서버들 등을 포함한 웹사이트의 임의의 양상을 포함할 수 있다. 따라서, 웹사이트라는 용어는 웹 페이지 및 서버라는 용어들과 상호교환가능하게 이용될 수 있다. "하도록 구성되는", "하도록 동작가능한", 및 "하도록 프로그래밍되는"이라는 서술적 단어들은 대상의 임의의 특정한 유형적 또는 무형적 수정을 암시하는 것이 아니라, 오히려 상호교환가능하게 이용되도록 의도된다. 예컨대, 동작 또는 컴포넌트를 모니터링 및 제어하도록 구성된 프로세서는 또한, 동작을 모니터링 및 제어하도록 프로그래밍된 프로세서 또는 동작을 모니터링 및 제어하도록 동작가능한 프로세서들을 의미할 수 있다. 마찬가지로, 코드를 실행하도록 구성된 프로세서는 코드를 실행하도록 프로그래밍되거나 코드를 실행하도록 동작가능한 프로세서로 해석될 수 있다.
[0068] "양상"과 같은 구절은, 이러한 양상이 본 기술에 필수적인 것이거나 또는 이러한 양상이 본 기술의 모든 구성들에 적용된다는 것을 암시하지 않는다. 양상과 관련되는 개시내용은 모든 구성들에 적용될 수 있거나 또는 하나 이상의 구성들에 적용될 수 있다. 양상은 하나 이상의 예들을 제공할 수 있다. 양상과 같은 구절은 하나 이상의 양상들을 나타낼 수 있으며, 그 반대도 가능하다. "실시예"와 같은 구절은, 이러한 실시예가 본 기술에 필수적인 것이거나 또는 이러한 실시예가 본 기술의 모든 구성들에 적용된다는 것을 암시하지는 않는다. 실시예와 관련되는 개시내용은 모든 실시예들에 적용될 수 있거나, 또는 하나 이상의 실시예들에 적용될 수 있다. 실시예는 하나 이상의 예들을 제공할 수 있다. "실시예"와 같은 구절은 하나 이상의 실시예들을 나타낼 수 있으며, 그 반대도 가능하다. "구성"과 같은 구절은 이러한 구성이 본 기술에 필수적인 것이거나 또는 이러한 구성이 본 기술의 모든 구성들에 적용된다는 것을 암시하지 않는다. 구성과 관련된 개시내용은 모든 구성들에 적용될 수 있거나, 또는 하나 이상의 구성들에 적용될 수 있다. 구성은 하나 이상의 예들을 제공할 수 있다. "구성"과 같은 구절은 하나 이상의 구성들을 나타낼 수 있으며, 그 반대도 가능하다.
[0069] 단어 "예시적인"은 본원에서 "예 또는 예시로서 기능하는 것"을 의미하기 위해 사용된다. "예시적인" 것으로서 본원에 설명된 임의의 양상 또는 설계는 반드시 다른 양상들 또는 설계들보다 바람직하거나 유리한 것으로서 해석되지 않아야 한다.
[0070] 당업자들에게 알려졌거나 추후에 알려지게 될 본 개시내용 전반에 걸쳐 설명된 다양한 양상들의 엘리먼트들에 대한 모든 구조적 및 기능적 등가물들은, 인용에 의해 본 명세서에 명백히 포함되고, 청구항들에 의해 포함되도록 의도된다. 더욱이, 본원에서 기재된 어떠한 내용도, 청구항들에서 그러한 개시내용이 명시적으로 기재되어 있는지 여부와 관계없이, 공중이 사용하도록 의도되는 것은 아니다. 청구항 엘리먼트가 명백히 "~을 위한 수단"이라는 문구를 사용하여 언급되거나, 방법 청구항의 경우에는 엘리먼트가 "~을 위한 단계"라는 문구를 사용하여 언급되지 않는 한, 어떠한 청구항 엘리먼트도 35 U.S.C.§112 6항의 조항들 하에서 해석되어야 하는 것은 아니다. 또한, 용어 "포함하는(include)", "갖는(have)" 등이 본 설명 또는 청구항들에 사용되는 경우, 이러한 용어는 "포함하는(comprise)"이 청구항에서 전이어로서 사용되는 경우에 "포함하는"이 해석되는 바와 같이, 용어 "포함하는"과 유사한 방식으로 내포적인 것으로 의도된다.

Claims (20)

  1. 컴퓨터-구현 방법으로서,
    하나 이상의 프로세서들이 하나 이상의 소프트웨어 애플리케이션들의 실행 동안에 유휴(idle) 상태에 있을 미래의 유휴 시간 기간을 결정하는 단계;
    상기 하나 이상의 소프트웨어 애플리케이션들에 대해 상기 미래의 유휴 시간 기간까지 할당될 메모리의 양을 추정하는 단계 ― 상기 할당될 메모리의 양을 추정하는 단계는 메모리 할당의 현재 속도(rate)를 결정하는 단계를 포함함 ―;
    상기 메모리 할당의 현재 속도에 기초하여, 상기 추정된 메모리 할당량이 상기 미래의 유휴 시간 기간에 임계 메모리 할당을 충족시킬 것이라고 결정하는 단계;
    결정된 미래의 유휴 시간 기간 및 추정된 메모리 할당량에 기초하여 복수의 미리 결정된 소프트웨어 가비지 콜렉션 이벤트들(software garbage collection events) 중 하나를 선택하는 단계;
    상기 미래의 유휴 시간 기간 동안에 수행되도록, 선택된 소프트웨어 가비지 콜렉션 이벤트를 스케줄링하는 단계; 및
    상기 미래의 유휴 시간 기간 동안에 상기 선택된 소프트웨어 가비지 콜렉션 이벤트를 수행하는 단계를 포함하는,
    컴퓨터-구현 방법.
  2. 제 1 항에 있어서,
    상기 선택하는 단계는,
    상기 추정된 메모리 할당량에 기초하여 상기 복수의 미리 결정된 소프트웨어 가비지 콜렉션 이벤트들 각각을 완료하기 위한 시간 추정을 결정하는 단계; 및
    상기 선택된 소프트웨어 가비지 콜렉션 이벤트에 대응하는 각각의 시간 추정 및 상기 미래의 유휴 시간 기간의 듀레이션에 기초하여, 상기 선택된 소프트웨어 가비지 콜렉션 이벤트를 선택하는 단계를 포함하는,
    컴퓨터-구현 방법.
  3. 제 1 항에 있어서,
    상기 방법은,
    프레임 레이트 및 하나 이상의 소프트웨어 애플리케이션 작업들에 기초하여 제 1 프레임 렌더링 시작 시간 및 제 2 프레임 렌더링 시작 시간을 결정하는 단계를 더 포함하고,
    상기 미래의 유휴 시간 기간은 상기 제 1 프레임 렌더링 시작 시간과 상기 제 2 프레임 렌더링 시작 시간 사이에 있는,
    컴퓨터-구현 방법.
  4. 제 1 항에 있어서,
    상기 선택된 가비지 콜렉션 이벤트는 소프트웨어 가비지 콜렉션 작업들의 그룹을 포함하고,
    상기 방법은,
    상기 미래의 유휴 시간 기간이 상기 하나 이상의 소프트웨어 애플리케이션들에 대한 프레임들을 렌더링하는데 있어서 멈춤(pause)에 대응한다고 결정하는 단계; 및
    상기 미래의 유휴 시간 기간 동안에 수행되도록 상기 소프트웨어 가비지 콜렉션 작업들의 그룹을 스케줄링하는 단계를 더 포함하고,
    상기 그룹의 시간 듀레이션은 각각의 프레임의 듀레이션보다 더 큰,
    컴퓨터-구현 방법.
  5. 삭제
  6. 삭제
  7. 제 1 항에 있어서,
    상기 추정된 메모리 할당량은 다수의 미래의 스케줄링된 유휴 시간들에 걸친 메모리 할당에 기초하는,
    컴퓨터-구현 방법.
  8. 제 1 항에 있어서,
    상기 복수의 미리 결정된 소프트웨어 가비지 콜렉션 이벤트들은 오브젝트 마킹(object marking), 완결(finalization) 및 메모리 스위핑(memory sweeping)을 포함하는,
    컴퓨터-구현 방법.
  9. 제 8 항에 있어서,
    상기 선택된 가비지 콜렉션 이벤트는 오브젝트 마킹 이벤트이고,
    상기 방법은, 상기 오브젝트 마킹 이벤트를 복수의 증분 오브젝트 마킹 작업들(incremental object marking tasks)로 단편화(fragmenting)하는 단계를 더 포함하고,
    상기 증분 오브젝트 마킹 작업들 중 제 1 작업은 상기 미래의 유휴 시간 기간 동안에 먼저 수행되도록 스케줄링되는,
    컴퓨터-구현 방법.
  10. 제 9 항에 있어서,
    상기 복수의 증분 오브젝트 마킹 작업들은 2 개 이상의 상이한 유휴 시간 기간들 사이에서 분할되도록 스케줄링되는,
    컴퓨터-구현 방법.
  11. 시스템으로서,
    하나 이상의 프로세서들; 및
    명령들을 포함하는 메모리를 포함하고, 상기 명령들은, 상기 하나 이상의 프로세서들에 의해 실행될 때, 상기 하나 이상의 프로세서들로 하여금,
    상기 하나 이상의 프로세서들이 하나 이상의 소프트웨어 애플리케이션들의 실행 동안에 유휴 상태에 있을 미래의 유휴 시간 기간을 결정하는 단계;
    상기 하나 이상의 소프트웨어 애플리케이션들에 대해 상기 미래의 유휴 시간 기간까지 할당될 메모리의 양을 추정하는 단계 ― 상기 할당될 메모리의 양을 추정하는 단계는 메모리 할당의 현재 속도(rate)를 결정하는 단계를 포함함 ―;
    상기 메모리 할당의 현재 속도에 기초하여, 상기 추정된 메모리 할당량이 상기 미래의 유휴 시간 기간에 임계 메모리 할당을 충족시킬 것이라고 결정하는 단계;
    결정된 미래의 유휴 시간 기간 및 추정된 메모리 할당량에 기초하여 복수의 미리 결정된 소프트웨어 가비지 콜렉션 이벤트들 중 하나를 선택하는 단계;
    상기 미래의 유휴 시간 기간 동안에 수행되도록, 선택된 소프트웨어 가비지 콜렉션 이벤트를 스케줄링하는 단계; 및
    상기 미래의 유휴 시간 기간 동안에 상기 선택된 소프트웨어 가비지 콜렉션 이벤트를 수행하는 단계를 가능하게 하는,
    시스템.
  12. 제 11 항에 있어서,
    상기 명령들은, 실행될 때, 상기 하나 이상의 프로세서들로 하여금,
    상기 추정된 메모리 할당량에 기초하여 상기 복수의 미리 결정된 소프트웨어 가비지 콜렉션 이벤트들 각각을 완료하기 위한 시간 추정을 결정하는 단계; 및
    상기 선택된 소프트웨어 가비지 콜렉션 이벤트에 대응하는 각각의 시간 추정 및 상기 미래의 유휴 시간 기간의 듀레이션에 기초하여, 선택된 소프트웨어 가비지 콜렉션 이벤트를 선택하는 단계를 추가로 가능하게 하는,
    시스템.
  13. 제 11 항에 있어서,
    상기 명령들은, 실행될 때, 상기 하나 이상의 프로세서들로 하여금,
    프레임 레이트 및 하나 이상의 소프트웨어 애플리케이션 작업들에 기초하여 제 1 프레임 렌더링 시작 시간 및 제 2 프레임 렌더링 시작 시간을 결정하는 단계를 추가로 가능하게 하고,
    상기 미래의 유휴 시간 기간은 상기 제 1 프레임 렌더링 시작 시간과 상기 제 2 프레임 렌더링 시작 시간 사이에 있는,
    시스템.
  14. 제 11 항에 있어서,
    상기 선택된 가비지 콜렉션 이벤트는 소프트웨어 가비지 콜렉션 작업들의 그룹을 포함하고,
    상기 명령들은, 실행될 때, 상기 하나 이상의 프로세서들로 하여금,
    상기 미래의 유휴 시간 기간이 상기 하나 이상의 소프트웨어 애플리케이션들에 대한 프레임들을 렌더링하는데 있어서 멈춤에 대응한다고 결정하는 단계; 및
    상기 미래의 유휴 시간 기간 동안에 수행되도록 상기 소프트웨어 가비지 콜렉션 작업들의 그룹을 스케줄링하는 단계를 추가로 가능하게 하고,
    상기 그룹의 시간 듀레이션은 각각의 프레임의 듀레이션보다 더 큰,
    시스템.
  15. 삭제
  16. 제 11 항에 있어서,
    상기 추정된 메모리 할당량은 다수의 미래의 스케줄링된 유휴 시간들에 걸친 메모리 할당에 기초하는,
    시스템.
  17. 제 11 항에 있어서,
    상기 복수의 미리 결정된 소프트웨어 가비지 콜렉션 이벤트들은 오브젝트 마킹, 완결 및 메모리 스위핑을 포함하는,
    시스템.
  18. 제 17 항에 있어서,
    상기 선택된 가비지 콜렉션 이벤트는 오브젝트 마킹 이벤트이고,
    상기 명령들은, 실행될 때, 상기 하나 이상의 프로세서들로 하여금, 상기 오브젝트 마킹 이벤트를 복수의 증분 오브젝트 마킹 작업들로 단편화하는 단계를 추가로 가능하게 하고,
    상기 증분 오브젝트 마킹 작업들 중 제 1 작업은 상기 미래의 유휴 시간 기간 동안에 먼저 수행되도록 스케줄링되는,
    시스템.
  19. 제 18 항에 있어서,
    상기 복수의 증분 오브젝트 마킹 작업들은 2 개 이상의 상이한 유휴 시간 기간들 사이에서 분할되도록 스케줄링되는,
    시스템.
  20. 명령들을 포함하는 비일시적인 컴퓨터-판독 가능 저장 매체로서,
    상기 명령들은, 실행될 때,
    하나 이상의 프로세서들이 하나 이상의 소프트웨어 애플리케이션들의 실행 동안에 유휴 상태에 있을 미래의 유휴 시간 기간을 결정하는 단계;
    상기 하나 이상의 소프트웨어 애플리케이션들에 대해 상기 미래의 유휴 시간 기간까지 할당될 메모리의 양을 추정하는 단계 ― 상기 할당될 메모리의 양을 추정하는 단계는 메모리 할당의 현재 속도(rate)를 결정하는 단계를 포함함 ―;
    상기 메모리 할당의 현재 속도에 기초하여, 상기 추정된 메모리 할당량이 상기 미래의 유휴 시간 기간에 임계 메모리 할당을 충족시킬 것이라고 결정하는 단계;
    결정된 미래의 유휴 시간 기간 및 추정된 메모리 할당량에 기초하여 복수의 미리 결정된 소프트웨어 가비지 콜렉션 작업들 중 하나를 선택하는 단계;
    상기 미래의 유휴 시간 기간 동안에 수행되도록, 선택된 소프트웨어 가비지 콜렉션 작업을 스케줄링하는 단계; 및
    상기 미래의 유휴 시간 기간 동안에 상기 선택된 소프트웨어 가비지 콜렉션 작업을 수행하는 단계를 가능하게 하는,
    비일시적인 컴퓨터-판독 가능 저장 매체.
KR1020177023944A 2015-05-29 2016-04-21 유휴 시간 소프트웨어 가비지 콜렉션 KR102161817B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/726,383 2015-05-29
US14/726,383 US20160350214A1 (en) 2015-05-29 2015-05-29 Idle time software garbage collection
PCT/US2016/028677 WO2016195840A1 (en) 2015-05-29 2016-04-21 Idle time software garbage collection

Publications (2)

Publication Number Publication Date
KR20170109607A KR20170109607A (ko) 2017-09-29
KR102161817B1 true KR102161817B1 (ko) 2020-10-05

Family

ID=55861267

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177023944A KR102161817B1 (ko) 2015-05-29 2016-04-21 유휴 시간 소프트웨어 가비지 콜렉션

Country Status (8)

Country Link
US (1) US20160350214A1 (ko)
EP (1) EP3304300A1 (ko)
JP (1) JP6553203B2 (ko)
KR (1) KR102161817B1 (ko)
CN (1) CN107430492A (ko)
DE (1) DE112016002420T5 (ko)
GB (1) GB2553049A (ko)
WO (1) WO2016195840A1 (ko)

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105278876B (zh) * 2015-09-23 2018-12-14 华为技术有限公司 一种固态硬盘的数据擦除方法及装置
KR102467032B1 (ko) 2015-10-08 2022-11-14 삼성전자주식회사 메모리 스케줄링 방법 및 메모리 시스템의 동작방법
US10140150B2 (en) * 2016-02-08 2018-11-27 Microsoft Technology Licensing, Llc Thread diversion awaiting log call return
US10417125B2 (en) 2016-02-11 2019-09-17 Oracle International Corporation Feedback-based selection of regions for abortable garbage collection
US10534655B1 (en) * 2016-06-21 2020-01-14 Amazon Technologies, Inc. Job scheduling based on job execution history
US11169592B2 (en) 2016-10-10 2021-11-09 International Business Machines Corporation SLA-based backup power management during utility power interruption in disaggregated datacenters
US10838482B2 (en) 2016-10-10 2020-11-17 International Business Machines Corporation SLA-based power management in disaggregated computing systems
US10360077B2 (en) 2016-10-10 2019-07-23 International Business Machines Corporation Measuring utilization of resources in datacenters
US10819599B2 (en) * 2016-10-10 2020-10-27 International Business Machines Corporation Energy consumption as a measure of utilization and work characterization in a system
CN108614663B (zh) * 2016-12-09 2021-05-04 北京兆易创新科技股份有限公司 基于NAND flash的数据处理方法和装置
US10635335B2 (en) 2017-03-21 2020-04-28 Western Digital Technologies, Inc. Storage system and method for efficient pipeline gap utilization for background operations
US11188456B2 (en) 2017-03-21 2021-11-30 Western Digital Technologies Inc. Storage system and method for predictive block allocation for efficient garbage collection
US11269764B2 (en) * 2017-03-21 2022-03-08 Western Digital Technologies, Inc. Storage system and method for adaptive scheduling of background operations
US11537513B2 (en) 2017-12-11 2022-12-27 SK Hynix Inc. Apparatus and method for operating garbage collection using host idle
US10489085B2 (en) * 2018-02-28 2019-11-26 Micron Technology, Inc. Latency-based scheduling of command processing in data storage devices
US11650916B2 (en) * 2018-06-14 2023-05-16 Microsoft Technology Licensing, Llc Closed loop garbage collector
CN108958943B (zh) * 2018-07-25 2021-02-09 北京小米移动软件有限公司 内存释放方法及装置
CN111078389B (zh) * 2018-10-18 2023-09-05 杭州海康威视数字技术股份有限公司 一种垃圾数据清理方法、装置、电子设备及可读存储介质
US10817046B2 (en) 2018-12-31 2020-10-27 Bmc Software, Inc. Power saving through automated power scheduling of virtual machines
US10877882B1 (en) * 2019-06-19 2020-12-29 Micron Technology, Inc. Garbage collection adapted to user device access
US11526434B1 (en) * 2019-06-25 2022-12-13 Amazon Technologies, Inc. Network-level garbage collection in an on-demand code execution system
US11550711B2 (en) * 2019-09-09 2023-01-10 Micron Technology, Inc. Dynamically adjusted garbage collection workload
US11748260B1 (en) * 2019-09-23 2023-09-05 Amazon Technologies, Inc. Service performance enhancement using advance notifications of reduced-capacity phases of operations
CN111078588B (zh) * 2019-12-17 2022-03-25 北京三快在线科技有限公司 垃圾回收方法、装置、设备及存储介质
US11314416B1 (en) * 2020-10-23 2022-04-26 EMC IP Holding Company LLC Defragmentation of striped volume in data storage system
CN112406748B (zh) * 2020-11-19 2023-08-01 广州瑞修得信息科技有限公司 一种车辆数据采集方法、装置及车辆诊断系统
CN116974455A (zh) * 2022-04-21 2023-10-31 戴尔产品有限公司 用于删除备份数据的方法、电子设备和计算机程序产品

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000339214A (ja) * 1999-05-28 2000-12-08 Nec Corp 実時間メモリ管理システム、及び実時間メモリ管理方法
US7962707B2 (en) * 2005-07-06 2011-06-14 Honeywell International Inc. Apparatus and method for deterministic garbage collection of a heap memory
US8364918B1 (en) * 2007-04-06 2013-01-29 Marvell International Ltd. Sensed opportunistic garbage collection in memory components
US7996642B1 (en) * 2007-04-25 2011-08-09 Marvell International Ltd. Digital locked loop on channel tagged memory requests for memory optimization
US8185903B2 (en) * 2007-12-13 2012-05-22 International Business Machines Corporation Managing system resources
US8583783B1 (en) * 2009-08-18 2013-11-12 Sprint Communications Company L.P. Method and system for adaptive recovery of heap memory
US8261269B2 (en) * 2009-09-21 2012-09-04 Oracle International Corporation System and method for synchronizing transient resource usage between virtual machines in a hypervisor environment
KR101992940B1 (ko) * 2012-08-08 2019-06-26 삼성전자주식회사 메모리 컨트롤러의 동작 방법, 및 상기 메모리 컨트롤러를 포함하는 시스템

Also Published As

Publication number Publication date
JP6553203B2 (ja) 2019-07-31
US20160350214A1 (en) 2016-12-01
EP3304300A1 (en) 2018-04-11
CN107430492A (zh) 2017-12-01
DE112016002420T5 (de) 2018-03-08
WO2016195840A1 (en) 2016-12-08
GB201715232D0 (en) 2017-11-08
JP2018510432A (ja) 2018-04-12
GB2553049A (en) 2018-02-21
KR20170109607A (ko) 2017-09-29

Similar Documents

Publication Publication Date Title
KR102161817B1 (ko) 유휴 시간 소프트웨어 가비지 콜렉션
US10223165B2 (en) Scheduling homogeneous and heterogeneous workloads with runtime elasticity in a parallel processing environment
US9846705B2 (en) Techniques for managing a data replication mode
US8185903B2 (en) Managing system resources
US8397235B2 (en) User tolerance based scheduling method for aperiodic real-time tasks
US10209851B2 (en) Management of inactive windows
US20150379160A1 (en) Apparatus and methods for transferring focus control and related return content within a graphical user interface
US10007555B1 (en) Dynamic resource management
US9665512B2 (en) Memory management in presence of asymmetrical memory transfer cost
US10963310B2 (en) Intelligent contentionless processing resource reduction in a multiprocessing system
WO2021093365A1 (zh) 一种gpu显存管理控制方法及相关装置
US10521275B2 (en) Asynchronous dispatcher for application framework
US8392627B2 (en) Adaptive semaphore
US20140075443A1 (en) Framework for critical-path resource-optimized parallel processing
US20170155610A1 (en) Processing messages in a data messaging system
US11334389B2 (en) Adaptive scheduling of latency-sensitive event-based processors
US11385928B2 (en) System and method for priority orchestration and scheduling of different background operations
EP2975516A1 (en) Intelligent application back stack management
CN114896013A (zh) 页面加载时长确定方法、装置、电子设备及存储介质
JP6295193B2 (ja) 情報処理装置、情報処置装置のリソース制御方法及びそのプログラム
CN115408164A (zh) 应用程序管理方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application
J201 Request for trial against refusal decision
J301 Trial decision

Free format text: TRIAL NUMBER: 2018101004884; TRIAL DECISION FOR APPEAL AGAINST DECISION TO DECLINE REFUSAL REQUESTED 20181130

Effective date: 20200130

S901 Examination by remand of revocation
E902 Notification of reason for refusal
GRNO Decision to grant (after opposition)
GRNT Written decision to grant