KR20160135698A - 애플리케이션 가상 머신의 오브젝트 저장소를 확장하기 위한 방법들 및 시스템들 - Google Patents

애플리케이션 가상 머신의 오브젝트 저장소를 확장하기 위한 방법들 및 시스템들 Download PDF

Info

Publication number
KR20160135698A
KR20160135698A KR1020167017245A KR20167017245A KR20160135698A KR 20160135698 A KR20160135698 A KR 20160135698A KR 1020167017245 A KR1020167017245 A KR 1020167017245A KR 20167017245 A KR20167017245 A KR 20167017245A KR 20160135698 A KR20160135698 A KR 20160135698A
Authority
KR
South Korea
Prior art keywords
objects
migrated
store
persistent data
memory
Prior art date
Application number
KR1020167017245A
Other languages
English (en)
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 KR20160135698A publication Critical patent/KR20160135698A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • 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/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • 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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • 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
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • G06F9/4856Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration
    • 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
    • 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/5083Techniques for rebalancing the load in a distributed system
    • G06F9/5088Techniques for rebalancing the load in a distributed system involving task migration
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1072Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers for memories with random access ports synchronised on clock signal pulse trains, e.g. synchronous memories, self timed memories
    • G06F2212/69
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7205Cleaning, compaction, garbage collection, erase control

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)

Abstract

여기에 설명된 실시예들은 애플리케이션 가상 머신에 대응하는 오브젝트 저장소를 확장함으로써 애플리케이션 가상 머신들의 성능을 개선하기 위한 방법들 및 시스템들을 포함한다. 이 방법은 애플리케이션 가상 머신과 관련된 복수의 오브젝트로부터 마이그레이션가능한 오브젝트들의 서브세트를 식별하는 단계를 포함하고, 여기서 마이그레이션가능한 오브젝트들의 서브세트는 하나 이상의 오브젝트를 포함하고, 복수의 오브젝트는 애플리케이션 가상 머신에 대해 할당된 메모리의 일부를 포함하는 오브젝트 저장소에 저장된다. 이 방법은, 오브젝트 저장소로부터 지속 데이터저장소로 마이그레이션될 각각의 오브젝트를 마이그레이션가능한 오브젝트들의 서브세트로부터 선택하는 단계를 또한 포함하고, 여기서 지속 데이터저장소는 오브젝트 저장소와는 구별된다. 이 방법은, 각각의 오브젝트가 오브젝트 저장소로부터 지속 데이터저장소로 마이그레이션되게 하는 단계를 더 포함한다.

Description

애플리케이션 가상 머신의 오브젝트 저장소를 확장하기 위한 방법들 및 시스템들{METHODS AND SYSTEMS FOR EXTENDING THE OBJECT STORE OF AN APPLICATION VIRTUAL MACHINE}
개시된 실시예들은 일반적으로 애플리케이션 가상 머신들에 관한 것이며, 구체적으로는 애플리케이션 가상 머신(예를 들어, 자바 가상 머신)의 오브젝트 저장소(예를 들어, 힙(heap))를 확장하는 것에 관한 것이다.
일반적으로, 자바 가상 머신("JVM")의 인스턴스는 단일 애플리케이션 또는 프로그램을 실행한다. JVM은 메소드 영역 및 힙을 포함하는 애플리케이션을 위한 복수의 런타임 데이터 영역들을 포함한다. 메소드 영역과 힙은 둘 다 애플리케이션의 모든 스레드들 간에 공유된다. 힙에는 애플리케이션에 의해 인스턴스화된 오브젝트들을 저장하기 위한 미리 정의된 양의 고속, 고비용의 메모리(예를 들어, DRAM)가 할당된다. 그러나, 프로그램이 이용가능하게 될 수 있는 것보다 많은 힙 공간을 요구한다면, JVM은 OutOfMemoryError를 스로잉한다.
현재, 가상 메모리는 큰 스왑 파일을 사용함으로써 힙을 확장하기 위해 사용된다. 그러나, 이 해결책은 페이지 입도 및 스와핑 알고리즘들로 인해 매우 불량한 성능을 갖는다.
개시된 방법 및 시스템은 더 낮은 비용의 비휘발성 메모리(예를 들어, 플래시 메모리)를 사용하여 애플리케이션 가상 머신의 오브젝트 저장소(예를 들어, 힙)을 확장함으로써 애플리케이션 가상 머신들의 성능을 개선한다. 결국, 이것은 DRAM을 확장하는 것에 비해 감소된 비용 및 보다 높은 데이터 용량을 제공하면서, 가상 머신이 OutOfMemoryError를 스로잉하지 않고서 그리고 힙을 페이징하는 것으로 인해 애플리케이션이 불량한 성능을 겪지 않고서 애플리케이션이 대량의 데이터에 액세스하는 데 도움을 준다. 게다가, 오브젝트 저장소는 애플리케이션 또는 프로그램에 최대로 투명한 방식으로 확장된다.
본 개시내용이 보다 상세히 이해될 수 있도록, 보다 구체적인 설명은 다양한 실시예들의 특징들을 참조하여 이루어질 수 있고, 이들 중 일부는 첨부 도면들에 도시되어 있다. 그러나, 이 설명은 다른 효과적인 특징들을 허용할 수 있으므로, 첨부 도면들은 본 개시내용의 보다 적절한 특징들만을 도시할 뿐이며, 따라서 제한하는 것으로 고려되어서는 안 된다.
도 1a 및 도 1b는 일부 실시예들에 따른 애플리케이션 가상 머신의 구현들을 도시하는 블록도들이다.
도 2a는 일부 실시예들에 따른 메모리 관리자의 구현을 도시하는 블록도이다.
도 2b는 일부 실시예들에 따른 애플리케이션 가상 머신을 실행하는 전자 디바이스의 구현을 도시하는 블록도이다.
도 3은 일부 실시예들에 따른 메모리 계층구조를 도시하는 블록도이다.
도 4a 및 도 4b는 일부 실시예들에 따른 애플리케이션 가상 머신과 관련된 데이터 구조들의 구현들을 도시하는 블록도들이다.
도 5는 일부 실시예들에 따른 애플리케이션 가상 머신에 대한 가비지 수집 프로세스의 구현과 관련된 데이터 구조들의 블록도들을 도시한다.
도 6a 내지 도 6c는 일부 실시예들에 따른 애플리케이션 가상 머신과 관련된 오브젝트들을 관리하는 방법의 플로우차트 표현을 도시한다.
도 7a 및 도 7b는 일부 실시예들에 따른 애플리케이션 가상 머신과 관련된 오브젝트들을 관리하는 방법의 플로우차트 표현을 도시한다.
일반적인 관례에 따라 도면에 도시된 다양한 특징들은 축척에 맞게 도시되지 않았다. 따라서, 다양한 특징들의 치수들은 분명히 하기 위해 임의로 확대 또는 축소될 수 있다. 또한, 도면의 일부는 주어진 시스템, 방법 또는 디바이스의 컴포넌트들 모두를 도시하지 않을 수 있다. 마지막으로, 유사한 참조 번호들이 본 명세서 및 도면들 전체에 걸쳐 유사한 특징들을 표시하는 데 사용될 수 있다.
여기에 설명된 다양한 실시예들은 자바 가상 머신("JVM")과 같은 애플리케이션 가상 머신(때로는 프로세스 가상 머신이라고도 함)의 신뢰성 및 성능을 개선하는 방법들, 디바이스들 및/또는 시스템들을 포함한다. 일부 실시예들은 애플리케이션 가상 머신의 오브젝트 저장소(예를 들어, 힙)를 고용량, 비용 효과적인 지속 데이터저장소 내로 확장하기 위한 방법들, 디바이스들 및/또는 시스템들을 포함한다.
일부 실시예들은 애플리케이션 가상 머신과 관련된 오브젝트들을 관리하는 방법을 포함한다. 일부 실시예들에서, 방법은 하나 이상의 프로세서 및 지속 데이터저장소를 관리하도록 구성된 메모리 관리자에 동작가능하게 결합된 메모리를 갖는 전자 디바이스(예를 들어, 클라이언트 디바이스 또는 서버 시스템)에 의해 실행되거나 호스팅된 애플리케이션 가상 머신에 의해 수행된다. 방법은 애플리케이션 가상 머신과 관련된 복수의 오브젝트로부터 마이그레이션가능한 오브젝트들의 서브세트를 식별하는 것을 포함하고, 여기서 마이그레이션가능한 오브젝트들의 서브세트는 하나 이상의 오브젝트를 포함하고 복수의 오브젝트는 애플리케이션 가상 머신에 대해 할당된 메모리의 일부를 포함하는 오브젝트 저장소 내에 저장된다. 방법은 또한 오브젝트 저장소로부터 전자 디바이스에 동작가능하게 결합된 지속 데이터저장소로 마이그레이션될 각각의 오브젝트를 마이그레이션가능한 오브젝트들의 서브세트로부터 선택하는 것을 또한 포함하고, 여기서 지속 데이터저장소는 전자 디바이스와 관련된 메모리와 구별된다. 방법은 각각의 오브젝트가 오브젝트 저장소로부터 지속 데이터저장소로 마이그레이션되게 하는 것을 더 포함한다.
일부 실시예들은 애플리케이션 가상 머신과 관련된 오브젝트들을 관리하는 방법을 포함한다. 일부 실시예들에서, 방법은 하나 이상의 프로세서 및 지속 데이터저장소를 관리하도록 구성된 메모리 관리자에 동작가능하게 결합된 메모리를 갖는 전자 디바이스(예를 들어, 클라이언트 디바이스 또는 서버 시스템)에 의해 실행되거나 호스팅된 애플리케이션 가상 머신에 의해 수행된다. 방법은 애플리케이션 가상 머신과 관련된 복수의 오브젝트로부터 마이그레이션가능한 오브젝트들의 서브세트를 식별하는 것을 포함하고, 여기서 마이그레이션가능한 오브젝트들의 서브세트는 하나 이상의 오브젝트를 포함하고 복수의 오브젝트는 애플리케이션 가상 머신에 대해 할당된 메모리의 일부를 포함하는 오브젝트 저장소 내에 저장된다. 방법은 또한 마이그레이션가능한 오브젝트들의 서브세트 내의 제1 오브젝트의 수정(또는 생성)을 검출하고; 수정(또는 생성)을 검출한 것에 응답하여, 수정된(또는 생성된) 제1 오브젝트가 전자 디바이스에 동작가능하게 결합된 지속 데이터저장소로 마이그레이션되게 하는 것을 포함하고, 여기서 지속 데이터저장소는 전자 디바이스와 관련된 메모리와 구별된다. 방법은 오브젝트 저장소로부터 지속 데이터저장소로 마이그레이션될 마이그레이션가능한 오브젝트들의 서브세트로부터 제2 오브젝트를 선택하는 것을 더 포함한다. 선택된 제2 오브젝트가 제1 오브젝트와 구별된다는 결정에 따라, 방법은 선택된 제2 오브젝트가 지속 데이터저장소로 마이그레이션되게 하는 것을 포함한다. 선택된 제2 오브젝트가 제1 오브젝트라는 결정에 따라, 방법은 선택된 제2 오브젝트의 마이그레이션을 중지하는 것을 포함한다.
일부 실시예들은 하나 이상의 프로세서; 및 하나 이상의 프로세서에 의해 실행될, 여기에 설명된 방법들 중 임의의 것을 수행하거나 그 성능을 제어하는 명령어들을 포함하는 하나 이상의 프로그램을 저장하는 메모리를 포함하는, 전자 시스템 또는 디바이스를 포함한다. 일부 실시예들은 전자 시스템 또는 디바이스의 하나 이상의 프로세서에 의해 실행하기 위한, 여기에 설명된 방법들 중 임의의 것을 수행하는 명령어들을 포함하는 하나 이상의 프로그램을 저장하는 비일시적인 컴퓨터 판독가능 저장 매체를 포함한다. 일부 실시예들은 여기에 설명된 방법들 중 임의의 것의 동작들을 수행하는 수단을 포함하는 전자 시스템 또는 디바이스를 포함한다. 일부 실시예들에서, 애플리케이션 가상 머신은 전자 시스템 또는 디바이스에 의해 실행되거나 호스팅된다.
첨부 도면에 도시된 예시적인 실시예들의 철저한 이해를 제공하기 위해 많은 상세들이 여기에 설명된다. 그러나, 일부 실시예들은 특정한 상세들 중 많은 것이 없이도 실시될 수 있고, 청구항들은 청구항들에서 구체적으로 열거된 그들 특징 및 양태들에 의해서만 제한된다. 더구나, 널리 공지된 방법들, 컴포넌트들, 및 회로들은 여기에 설명된 실시예들의 보다 적절한 양태들을 불필요하게 불명하게 하지 않도록 총망라한 상세로 설명되지 않았다.
도 1a는 일부 실시예들에 따른 애플리케이션 가상 머신(100A)의 구현을 도시하는 블록도이다. 예를 들어, 애플리케이션 가상 머신(100A)은 각각의 애플리케이션 또는 프로그램을 위한 가상 머신의 대표적인 인스턴스를 도시한다. 설명의 용이성을 위해, 애플리케이션 가상 머신(100A)은 자바 가상 머신("JVM")으로서 설명된다. 그러나, 본 기술 분야의 통상의 기술자는 여기에 개시된 설명된 실시예들 및 방법들이 또한 복수의 해석 언어들(예를 들어, 스몰토크(Smalltalk), 자바, 리스프(Lisp), 스칼라(Scala), 루비(Ruby) 등) 중 임의의 것으로 작성된 복수의 유사한 애플리케이션 가상 머신 구현 중 어느 하나에 어떻게 적용할 수 있는지를 알 것이다.
자바 가상 머신의 런타임 인스턴스는 하나의 자바 애플리케이션 또는 프로그램을 구동하는 분명한 미션을 갖는다. 자바 애플리케이션이 시작할 때, 런타임 인스턴스가 생성되고, 자바 애플리케이션이 완료할 때, 인스턴스는 중지된다. 한 예로서, 사용자가 동일한 컴퓨터 상에서, 동시에 3개의 자바 애플리케이션을 시작하면, 3개의 자바 가상 머신 인스턴스가 생성될 것이고, 여기서 3개의 자바 애플리케이션은 각각의 자바 가상 머신 인스턴스 내부에서 구동한다.
일부 실시예들에서, 자바 가상 머신 인스턴스가 일부 초기 클래스의 main() 메소드를 호출함으로써 그것의 단 하나의 애플리케이션을 구동하는 것을 시작한다. 이러한 main() 메소드를 갖는 임의의 클래스는 자바 애플리케이션을 위한 시작점으로서 사용될 수 있다. 애플리케이션의 초기 클래스의 main() 메소드는 그 애플리케이션의 초기 스레드를 위한 시작점의 역할을 한다. 초기 스레드는 다른 스레드들을 스폰(spawn)할 수 있다. 일부 실시예들에서, 스레드들은 2개의 플레이버: 데몬(daemon)과 비데몬(non-daemon) 내에 들어온다. 데몬 스레드는 통상적으로 가비지 수집을 수행하는 스레드와 같은 배경 프로세스들을 위한 가상 머신 자체에 의해 사용된 스레드이다. 그러나, 애플리케이션의 초기 스레드 - main()에서 시작하는 것 - 는 비데몬 스레드이다. 자바 애플리케이션은 임의의 비데몬 스레드들이 여전히 구동하고 있는 한 계속 실행한다(가상 머신 인스턴스는 계속 라이브임). 자바 애플리케이션의 모든 비데몬 스레드들이 종료할 때, 가상 머신 인스턴스는 종료한다.
도 1a는 일부 실시예들에 따른 주 서브시스템들 및 메모리 영역들을 포함하는 자바 가상 머신(100A)의 블록도를 도시한다. 자바 가상 머신(100A)은 클래스 로더 서브시스템(102) 및 실행 엔진(118)을 포함한다. 클래스 로더 서브시스템(102)은 완전히 자격이 있는 이름들이 주어지는 유형들(즉, 클래스들 및 인터페이스들)을 로딩하는 메커니즘이다. 실행 엔진(118)은 로드된 클래스들의 메소드들 내에 포함된 명령어들을 실행하는 것을 담당하는 메커니즘이다.
일부 실시예들에서, 실행 엔진(118)은 적시(just-in-time)("JIT") 컴파일러(120) 및 가비지 수집기 스레드(122)를 포함한다. JIT 컴파일러(120)는 바이트코드를 런타임에서 네이티브 머신 코드로 컴파일하고 네이티브 머신 코드를 실행하도록 구성된다. 일부 실시예들에서, 가비지 수집기 스레드(122)는 오브젝트 저장소(106) 내의 오브젝트들을 스캔하고 가비지 수집 및 복구를 위해 참조되지 않은 오브젝트들(즉, 다른 오브젝트들에 의해 참조되지 않거나 포인팅되지 않은 오브젝트들)을 마킹하도록 구성된다.
자바 가상 머신(100A)이 애플리케이션 또는 프로그램을 구동할 때, 메모리는 바이트코드 및 다른 정보를 저장하는 것이 요구된다. 자바 가상 머신(100A)은 로드된 클래스 파일들로부터, 애플리케이션이 인스턴스화하는 오브젝트들, 메소드들로의 파라미터들, 리턴 값들, 로컬 변수들, 계산들의 중간 결과들 등을 추출한다. 자바 가상 머신(100A)은 애플리케이션을 복수의 런타임 데이터 영역들(104) 내로 실행하는 데 필요한 메모리를 구성한다. 일부 실시예들에서, 런타임 데이터 영역들(104) 중 일부는 애플리케이션의 모든 스레드들 중에 공유되고 다른 것들은 각각의 스레드에 대해 유일하다. 자바 가상 머신의 각각의 인스턴스는 메소드 영역(108) 및 오브젝트 저장소(106)(때로는 "힙"이라고도 함)를 갖는다. 메소드 영역(108)과 오브젝트 저장소(106)는 자바 가상 머신(100A) 내부에서 구동하는 모든 스레드들에 의해 공유된다. 자바 가상 머신(100A)이 클래스 파일을 로드할 때, 그것은 클래스 파일 내에 포함된 이진 데이터로부터 유형에 관한 정보를 분석한다. 자바 가상 머신(100A)은 이 유형 정보를 메소드 영역(108) 내로 놓고, 애플리케이션이 구동함에 따라, 자바 가상 머신(100A)은 애플리케이션이 인스턴스화하는 모든 오브젝트들을 오브젝트 저장소(106) 내로 놓는다.
일부 실시예들에서, 각각의 새로운 스레드가 생김에 따라, 새로운 스레드에는 그 자신의 각각의 PC 레지스터(112)(예를 들어, 프로그램 카운터) 및 자바 스택(110)이 할당된다. 스레드가 (네이티브 메소드가 아닌) 자바 메소드를 실행하면, 각각의 PC 레지스터의 값은 실행할 다음 명령어를 표시하고, 스레드의 각각의 자바 스택은 스레드를 위한 자바(즉, 네이티브가 아님) 메소드 호출들의 상태를 저장한다. 자바 메소드 호출의 상태는 그것의 로컬 변수들, 그것이 호출된 파라미터들, 그것의 리턴 값(있는 경우), 및 중간 계산들을 포함한다. 비교 시에, 네이티브 메소드 호출들의 상태는 가능하게는 레지스터들 또는 다른 구현-종속 메모리 영역들 내에 뿐만 아니라, 네이티브 메소드 스택(들)(114) 내에 구현-종속 방식으로 저장된다.
일부 실시예들에서, 자바 스택(들)(110)은 스택 프레임들(또는 프레임들)로 구성된다. 스택 프레임은 하나의 자바 메소드 호출의 상태를 포함한다. 스레드가 메소드를 호출할 때, 자바 가상 머신은 새로운 프레임을 그 스레드의 자바 스택 상으로 민다. 메소드가 완료할 때, 자바 가상 머신은 그 메소드에 대한 프레임을 팝하고 폐기한다. 일부 실시예들에서, 자바 가상 머신(100A)은 중간 데이터 값들을 유지하기 위한 레지스터들을 갖지 않는다. 대신에, 명령어 세트가 중간 데이터 값들의 저장을 위해 자바 스택(들)(110)을 사용한다. 일부 실시예들에서, 네이티브 메소드 인터페이스(116)는 자바 프로그램이 C 또는 C++ 프로그램(즉, 네이티브 메소드)에서 펑션을 콜하게 하거나 C 또는 C++ 프로그램이 자바 프로그램에서 펑션을 콜하게 하도록 구성된다. 예를 들어, 네이티브 메소드들은 네이티브 메소드 인터페이스(116)를 사용하여 네이티브 메소드 라이브러리들로부터 콜될 수 있다.
도 1b는 일부 실시예들에 따른 지속성 환경(150)과 동작가능하게 결합된 수정된 애플리케이션 가상 머신(100B)의 블록도를 도시한다. 일부 실시예들에서, 애플리케이션 가상 머신(100B)은 대표적인 마이그레이션 스레드(124)를 포함하는 하나 이상의 마이그레이션 스레드를 포함하는 애플리케이션 가상 머신(100A)의 수정된 구현이다. 애플리케이션 가상 머신(100B)은 도 1a에서 위에 설명된 애플리케이션 가상 머신(100A)과 유사하다. 이와 같이, 유사한 참조 번호들에 대해서는 간결성을 위해 다시 논의되지 않을 것이다.
일부 실시예들에서, 마이그레이션 스레드(124)는 수정된 애플리케이션 가상 머신(100B) 내에 프리로드되거나 매립된 데몬 스레드이다. 마이그레이션 스레드(124)는 마이그레이션 및/또는 축출 정책들의 세트에 따라 오브젝트들이 오브젝트 저장소(106)로부터 지속성 환경(150)으로 마이그레이션하게 하는 배경 마이그레이션/축출 프로세스를 관리하도록 구성된다. 일부 실시예들에서, 마이그레이션 및 축출 정책들의 세트가 미리 결정되고, 또는 일부 다른 실시예들에서, 애플리케이션 또는 프로그램에 의해 제공된 마이그레이션 및/또는 축출 정책들의 세트는 애플리케이션 가상 머신(100B)에서 구동한다. 일부 실시예들에서, 마이그레이션 스레드(124)는 애플리케이션이 마이그레이션된 오브젝트를 요구 또는 참조할 때 지속성 환경(150)으로부터 오브젝트들을 리트리빙하도록 또한 구성된다.
일부 실시예들에서, 지속성 환경(150)은 메모리 관리자(152) 및 지속 데이터저장소(154)를 포함한다. 메모리 관리자(152)는 CRUD(Create, Read, Update, and Delete) 동작들의 세트를 통해 지속 데이터저장소(154)를 관리하도록 구성된다. 지속 데이터저장소(154)는 하나 이상의 자기 디스크 저장 디바이스들, 광학 디스크 저장 디바이스들, 플래시 메모리 디바이스들, 또는 다른 비휘발성 고체 상태 저장 디바이스들과 같은 비휘발성 메모리를 포함한다.
도 2a는 일부 실시예들에 따른 메모리 관리자(152)의 구현을 도시하는 블록도이다. 메모리 관리자(152)는 전형적으로 메모리(206) 내에 저장된 모듈들, 프로그램들 및/또는 명령어들을 실행하여 처리 동작들을 수행하는 하나 이상의 프로세서(때로는 CPU들 또는 처리 유닛들 또는 마이크로프로세서들 또는 마이크로컨트롤러들이라고도 함)(202), 메모리(206), 다른 컴퓨팅 디바이스들(예를 들어, 메모리 관리자(150))과의 하나 이상의 통신 인터페이스(264), 저장 디바이스들(예를 들어, 지속 데이터저장소(154))과의 하나 이상의 스토리지 인터페이스(205), 및 이들 컴포넌트를 상호접속하는 하나 이상의 통신 버스(208)를 포함한다. 통신 버스들(208)은 시스템 컴포넌트들을 상호접속하고 그 사이의 통신을 제어하는 회로(때로는 칩셋이라고 함)를 선택적으로 포함한다. 일부 실시예들에서, 메모리 관리자(152)는 통신 버스들(208) 및 하나 이상의 통신 인터페이스(204)에 의해, 전자 디바이스(260)와 같은 다른 컴퓨팅 디바이스들과 동작가능하게 결합된다. 일부 실시예들에서, 메모리 관리자(152)는 통신 버스들(208) 및 하나 이상의 스토리지 인터페이스(205)에 의해, 지속 데이터저장소(154)와 같은, 저장 디바이스들과 동작가능하게 결합된다. 메모리(206)는 고속 랜덤 액세스 메모리(예를 들어, DRAM, SRAM, DDR RAM 또는 다른 랜덤 액세스 고체 상태 메모리 디바이스들)와 같은 하나 이상의 반도체 메모리 디바이스를 포함하고, 비휘발성 메모리(예를 들어, 하나 이상의 자기 디스크 저장 디바이스, 하나 이상의 광학 디스크 저장 디바이스, 하나 이상의 플래시 메모리 디바이스, 하나 이상의 3차원(3D) 메모리 디바이스, 또는 다른 비휘발성 고체 상태 저장 디바이스들 등)를 포함할 수 있다. 메모리(206)는 프로세서(들)(202)로부터 원격 위치된 하나 이상의 저장 디바이스를 선택적으로 포함한다. 메모리(206), 또는 대안적으로 메모리(206) 내의 비휘발성 메모리 디바이스(들)는 비일시적인 컴퓨터 판독가능 저장 매체를 포함한다. 일부 실시예들에서, 메모리(206), 또는 메모리(206)의 컴퓨터 판독가능 저장 매체는 다음의 프로그램들, 모듈들, 및 데이터 구조들, 또는 그것의 서브세트를 저장한다:
● 다양한 기본 시스템 서비스들을 핸들링하고 하드웨어 종속 태스크들을 수행하는 절차들을 포함하는 동작 로직(210);
● 하나 이상의 통신 인터페이스(204)를 통해 다른 컴퓨터 시스템들 또는 컴퓨터 컴포넌트들(예를 들어, 도 2b의 전자 디바이스(260))과 통신하는 통신 모듈(212);
● 전자 디바이스(260)로부터의 요청들(예를 들어, 마이그레이션 스레드(124)로부터의 JNI(자바 네이티브 인터페이스) 겟(get) 및 풋(put) 콜들)을 수신하고, 그 요청들에 응답하고, 그 요청들을 핸들링하는 요청 모듈(214);
● 오브젝트 저장소(106)와 지속 데이터저장소(154) 사이에서 오브젝트들을 마이그레이션하기 위해 CRUD(Create, Read, Update, and Delete) 동작들을 수행하는 마이그레이션 관리자(220) - 이는 다음의 것을 포함하지만 이에 제한되지는 않음 -:
○ 로컬 캐시(250) 내에 저장된 오브젝트들을 관리하고 축출하는 캐시 관리 모듈;
○ 마이그레이션 스레드(124)로부터 수신된 요청들을 처리하는 마이그레이션 인터페이스(224) - 이는 다음의 것을 포함하지만 이에 제한되지는 않음 -:
■ 선택된 오브젝트를 마이그레이션하기 위해 마이그레이션 스레드(124)로부터의 요청(예를 들어, JNI 풋 콜)에 응답하여 오브젝트를 지속 데이터저장소(154) 내로 삽입하는 오브젝트 생성 모듈(226);
■ 마이그레이션 스레드(124)로부터의 요청(예를 들어, JNI 겟 콜)에 응답하여 지속 데이터저장소(154)로부터 오브젝트를 리트리빙하는 오브젝트 판독 모듈(228);
■ 지속 데이터저장소(154) 내의 오브젝트의 값을 갱신하는 오브젝트 갱신 모듈(230); 및
■ 가비지 수집을 위해 마킹된 오브젝트를 삭제하기 위해 가비지 수집기 스레드(122)로부터의 요청에 응답하여 지속 데이터저장소(154) 내의 오브젝트를 삭제하는 오브젝트 삭제 모듈(232);
● 애플리케이션 가상 머신의 인스턴스들 사이에 오브젝트들을 지속하는 지속성 모듈(240);
● 선택적으로, 분배된 저장 시스템의 노드들 간에, 지속 데이터저장소(154) 내에 저장된 하나 이상의 오브젝트를 복제하는 복제 모듈(242);
● 가비지 수집기 스레드(122)에 의해 수행된 가비지 수집 프로세스와 병행하여 지속 데이터저장소(154)로 마이그레이션된 오브젝트들에 대해 가비지 수집 프로세스를 수행하는 가비지 수집 모듈(244); 및
● 지속 데이터저장소(154) 내에 저장하기 전에 마이그레이션된 오브젝트들을 저장하고 판독 액세스를 위해 마이그레이션된 오브젝트들을 캐싱하는 로컬 캐시(250)(예를 들어, DRAM으로 구현됨).
위에 참고된 요소들 각각은 앞서 언급된 메모리 디바이스들 중 하나 이상 내에 저장될 수 있고, 위에 설명된 펑션을 수행하는 명령어들의 세트에 대응한다. 위에 참고된 모듈들 및 프로그램들(즉, 명령어들의 세트들)은 별개의 소프트웨어 프로그램들, 절차들 또는 모듈들로서 구현될 필요가 없으므로, 이들 모듈의 다양한 서브세트들은 조합될 수 있거나 혹은 다양한 실시예들에서 재배열될 수 있다. 일부 실시예들에서, 메모리(206)는 위에 참조된 모듈들 및 데이터 구조들의 서브세트를 저장할 수 있다. 또한, 메모리(206)는 위에 설명되지 않은 추가의 모듈들 및 데이터 구조들을 저장할 수 있다.
도 2b는 일부 실시예들에 따른 전자 디바이스(260)의 구현을 도시하는 블록도이다. 전자 디바이스(260)는 컴퓨터, 랩톱 컴퓨터, 태블릿 디바이스, 노트북, 인터넷 키오스크, 개인 휴대 단말기, 모바일 전화, 스마트폰, 웨어러블 컴퓨팅 디바이스, 셋톱 박스, 게임 디바이스, 서버 시스템(예를 들어, 애플리케이션 서버 또는 웹 서버), 또는 임의의 다른 컴퓨팅 디바이스와 같은 임의의 적합한 컴퓨팅 디바이스일 수 있다. 전자 디바이스(260)는 전형적으로 메모리(266) 내에 저장된 모듈들, 프로그램들 및/또는 명령어들을 실행하여 처리 동작들을 수행하는 하나 이상의 프로세서(때로는 CPU들 또는 처리 유닛들 또는 마이크로프로세서들 또는 마이크로컨트롤러들이라고도 함)(262), 메모리(266), 하나 이상의 입/출력 디바이스(예를 들어, 하나 이상의 스피커, 하나 이상의 가상 디스플레이, 키보드, 마우스, 음성-커맨드 입력 유닛 또는 마이크로폰, 터치 스크린 디스플레이, 터치-감지 입력 패드, 제스처 캡처링 카메라, 및/또는 다른 입력 버튼들 또는 제어들)와의 하나 이상의 입/출력 인터페이스(263), 다른 컴퓨팅 디바이스들(예를 들어, 메모리 관리자(152))과의 하나 이상의 통신 인터페이스(264), 및 이들 컴포넌트를 상호접속하는 하나 이상의 통신 버스(268)를 포함한다. 통신 버스들(268)은 시스템 컴포넌트들을 상호접속하고 그 사이의 통신을 제어하는 회로(때로는 칩셋이라고 함)를 선택적으로 포함한다. 일부 실시예들에서, 전자 디바이스(260)는 통신 버스들(268) 및 하나 이상의 통신 인터페이스(264)에 의해 메모리 관리자(152)와 동작가능하게 결합된다. 메모리(266)는 고속 랜덤 액세스 메모리(예를 들어, DRAM, SRAM, DDR RAM 또는 다른 랜덤 액세스 고체 상태 메모리 디바이스들)와 같은 하나 이상의 반도체 메모리 디바이스를 포함하고, 비휘발성 메모리(예를 들어, 하나 이상의 자기 디스크 저장 디바이스, 하나 이상의 광학 디스크 저장 디바이스, 하나 이상의 플래시 메모리 디바이스, 하나 이상의 3차원(3D) 메모리 디바이스, 또는 다른 비휘발성 고체 상태 저장 디바이스들 등)를 포함할 수 있다. 메모리(266)는 프로세서(들)(262)로부터 원격 위치된 하나 이상의 저장 디바이스를 선택적으로 포함한다. 메모리(266), 또는 대안적으로 메모리(266) 내의 비휘발성 메모리 디바이스(들)는 비일시적인 컴퓨터 판독가능 저장 매체를 포함한다.
일부 실시예들에서, 전자 디바이스(260)가 하나 이상의 네트워크(즉, 유선 또는 무선)를 통해 서버 시스템(예를 들어, 애플리케이션 서버)와 동작가능하게 결합된 클라이언트 디바이스(예를 들어, 모바일 전화, 랩톱 컴퓨터, 데스크톱 컴퓨터, 태블릿 컴퓨터, 웨어러블 컴퓨팅 디바이스, 또는 다른 컴퓨팅 디바이스)일 때, 메모리(266), 또는 메모리(266)의 컴퓨터 판독가능 저장 매체는 다음의 프로그램들, 모듈들, 및 데이터 구조들, 또는 그것의 서브세트 또는 수퍼세트를 저장한다:
● 다양한 기본 시스템 서비스들을 핸들링하고 하드웨어 종속 태스크들을 수행하는 절차들을 포함하는 동작 로직(270);
● 하나 이상의 통신 인터페이스(268)를 통해 하나 이상의 네트워크에 걸쳐 다른 컴퓨터 시스템들(예를 들어, 메모리 관리자(152), 서버 시스템 등) 또는 컴퓨터 컴포넌트들과 통신하기 위해 사용되는 통신 모듈(272);
● 하나 이상의 입/출력 인터페이스(263)와 관련된 하나 이상의 출력 디바이스(예를 들어, 디스플레이들, 스피커들 등)를 통해 클라이언트 디바이스(104)에서 정보(예를 들어, 사용자 인터페이스, 웹페이지, 또는 애플리케이션, 오디오 및/또는 비디오 콘텐트, 텍스트 등)의 프리젠테이션을 가능하게 하는 프리젠테이션 모듈(274);
● 하나 이상의 입/출력 인터페이스(263)와 관련된 하나 이상의 입력 디바이스(예를 들어, 키보드, 마우스, 마이크로폰, 터치 스크린 디스플레이 등) 중 하나로부터의 하나 이상의 사용자 입력 또는 상호작용을 검출하고 검출된 입력 또는 상호작용을 해석하는 입력 처리 모듈(276);
● 웹페이지들을 보고 그들에 액세스하는 웹 브라우저(278);
● 애플리케이션 가상 머신(100A/100B)에 의해 실행하기 위한 하나 이상의 애플리케이션/프로그램(290) - 이는 다음의 것을 포함하지만 이에 제한되지는 않음 -:
○ 하나 이상의 애플리케이션/프로그램(290)을 위한 클래스 파일들(292); 및
○ 하나 이상의 애플리케이션/프로그램(290)을 위한 라이브러리들(294);
● 애플리케이션 가상 머신(100A/100B)에 대응하는 런타임 데이터 영역들(104) - 이는 다음의 것을 포함하지만 이에 제한되지는 않음 -:
○ 애플리케이션 가상 머신(100A/100B)의 메소드들에 의해 인스턴스화된 오브젝트들을 저장하는 오브젝트 저장소(106);
○ 로드된 클래스 파일들(292)로부터의 분석된 유형 정보를 저장하는 메소드 영역(들)(108);
○ 애플리케이션 가상 머신(100A/100B)의 각각의 스레드를 위한 별개의 자바 스택 내에 스택 프레임들을 저장하는 자바 스택(들)(110);
○ 애플리케이션 가상 머신(100A/100B)의 각각의 스레드를 위한 별개의 레지스터 내에 프로그램 카운터를 저장하는 PC 레지스터(들)(112); 및
○ 네이티브 메소드 호출들의 상태를 저장하는 네이티브 메소드 스택(들)(114).
일부 실시예들에서, 전자 디바이스(260)가 하나 이상의 네트워크(즉, 유선 또는 무선)를 통해 하나 이상의 클라이언트 디바이스(예를 들어, 모바일 전화들, 랩톱 컴퓨터들, 데스크톱 컴퓨터들, 태블릿 컴퓨터들, 웨어러블 컴퓨팅 디바이스들, 또는 다른 컴퓨팅 디바이스들)와 동작가능하게 결합된 서버 시스템(예를 들어, 애플리케이션 서버)일 때, 메모리(266), 또는 메모리(266)의 컴퓨터 판독가능 저장 매체는 다음의 프로그램들, 모듈들, 및 데이터 구조들, 또는 그것의 서브세트 또는 수퍼세트를 저장한다:
● 다양한 기본 시스템 서비스들을 핸들링하고 하드웨어 종속 태스크들을 수행하는 절차들을 포함하는 동작 로직(270);
● 하나 이상의 통신 인터페이스(268)를 통해 하나 이상의 네트워크에 걸쳐 다른 컴퓨터 시스템들(예를 들어, 메모리 관리자(152), 하나 이상의 클라이언트 디바이스 등) 또는 컴퓨터 컴포넌트들과 통신하기 위해 사용되는 통신 모듈(272);
● 하나 이상의 클라이언트 디바이스로부터의 요청들을 수신하고 그들에 응답하는 요청 핸들러(280);
● 하나 이상의 클라이언트 디바이스로 정보를 송신하는 송신 모듈(282);
● 애플리케이션 가상 머신(100A/100B)에 의해 실행하기 위한 하나 이상의 애플리케이션/프로그램(290) - 이는 다음의 것을 포함하지만 이에 제한되지는 않음 -:
○ 하나 이상의 애플리케이션/프로그램(290)을 위한 클래스 파일들(292); 및
○ 하나 이상의 애플리케이션/프로그램(290)을 위한 라이브러리들(294);
● 애플리케이션 가상 머신(100A/100B)에 대응하는 런타임 데이터 영역들(104) - 이는 다음의 것을 포함하지만 이에 제한되지는 않음 -:
○ 애플리케이션 가상 머신(100A/100B)의 메소드들에 의해 인스턴스화된 오브젝트들을 저장하는 오브젝트 저장소(106);
○ 로드된 클래스 파일들(292)로부터의 분석된 유형 정보를 저장하는 메소드 영역(들)(108);
○ 애플리케이션 가상 머신(100A/100B)의 각각의 스레드를 위한 별개의 자바 스택 내에 스택 프레임들을 저장하는 자바 스택(들)(110);
○ 애플리케이션 가상 머신(100A/100B)의 각각의 스레드를 위한 별개의 레지스터 내에 프로그램 카운터를 저장하는 PC 레지스터(들)(112); 및
○ 네이티브 메소드 호출들의 상태를 저장하는 네이티브 메소드 스택(들)(114).
일부 실시예들에서, 전자 디바이스(260)(예를 들어, 클라이언트 디바이스 또는 서버 시스템)는 하나 이상의 애플리케이션/프로그램(290)의 각각의 애플리케이션/프로그램이 실행되는 애플리케이션 가상 머신(100A/100B)을 실행하거나 호스팅한다. 일부 실시예들에서, 메모리(266)(예를 들어, DRAM)의 부분은 그것의 런타임 데이터 영역들(104)을 형성하기 위해 애플리케이션 가상 머신(100A/100B)에 대해 할당된다. 일부 실시예들에서, 애플리케이션 가상 머신(100A/100B)은 각각의 애플리케이션/프로그램(290)과 관련된 클래스 파일들(292) 또는 라이브러리들(294)을 로드한다.
한 예에서, 전자 디바이스(260)가 클라이언트 디바이스일 때, 각각의 애플리케이션/프로그램은 애플리케이션 가상 머신(100A/100B) 내에서 실행되는 애플릿이고, 애플리케이션 가상 머신(100A/100B)은 클라이언트 디바이스에 의해 실행되거나 호스팅된 클라이언트 애플리케이션이다. 이 예에서, 각각의 애플리케이션/프로그램은 웹 브라우저(278)를 실행하는 데 사용되는 프로세스와 별도의 프로세스에서 전형적으로 실행된다. 또 하나의 예에서, 전자 디바이스(260)가 서버 시스템일 때, 각각의 애플리케이션/프로그램은 애플리케이션 가상 머신(100A/100B) 내에서 실행되는 서브릿이고, 애플리케이션 가상 머신(100A/100B)은 서버 시스템에 의해 실행되거나 호스팅된 서버 애플리케이션이다.
위에 참조된 요소들 각각은 앞서 언급된 메모리 디바이스들 중 하나 이상 내에 저장될 수 있고, 위에 설명된 펑션을 수행하는 명령어들의 세트에 대응한다. 위에 참조된 모듈들 및 프로그램들(즉, 명령어들의 세트들)은 별개의 소프트웨어 프로그램들, 절차들 또는 모듈들로서 구현될 필요가 없으므로, 이들 모듈의 다양한 서브세트들은 조합될 수 있거나 혹은 다양한 실시예들에서 재배열될 수 있다. 일부 실시예들에서, 메모리(266)는 위에 참조된 모듈들 및 데이터 구조들의 서브세트를 저장할 수 있다. 또한, 메모리(266)는 위에 설명되지 않은 추가의 모듈들 및 데이터 구조들을 저장할 수 있다. 일부 실시예들에서, 메모리(266), 또는 메모리(266)의 컴퓨터 판독가능 저장 매체 내에 저장된 프로그램들, 모듈들, 및 데이터 구조들은 도 6a 내지 도 6c 및/또는 도 7a 및 도 7b를 참조하여 아래에 설명되는 방법들에서 각각의 동작들을 구현하는 명령어들을 제공한다.
도 3은 일부 실시예들에 따른 메모리 계층구조(300)의 구현을 도시하는 블록도이다. 일부 실시예들에서, 하나 이상의 비휘발성 메모리 디바이스(322)를 포함하는 지속 데이터저장소(154)는 애플리케이션 가상 머신(100B)에 대응하는 오브젝트 저장소(106)를 확장한다. 예를 들어, 오브젝트들은 오브젝트 저장소(106)와 지속 데이터저장소(154) 사이에서 이동한다.
일부 실시예들에서, 전자 디바이스(260)(예를 들어, 클라이언트 디바이스 또는 서버 시스템)는 애플리케이션 가상 머신(100B)을 실행하거나 호스팅한다. 결국, 애플리케이션 가상 머신(100B)에 의해 구동된 애플리케이션 또는 프로그램과 관련된 오브젝트들은 오브젝트 저장소(106)에서 인스턴스화된다. 일부 실시예들에서, 애플리케이션 가상 머신(100B) 내의 마이그레이션 엔진(예를 들어, 도 1b의 마이그레이션 스레드(124))은 마이그레이션/축출 프로세스에 기초하여 마이그레이션을 위해 오브젝트 저장소(106) 내의 오브젝트들을 선택한다. 일부 실시예들에서, 선택된 오브젝트를 마이그레이션하기 위해서, 마이그레이션 엔진은 선택된 오브젝트를 오브젝트 저장소(106)로부터 지속 데이터저장소(154)로 마이그레이션하라는 요청(예를 들어, JNI 풋 콜)을 메모리 관리자(152)에 송신한다.
일부 실시예들에서, 각각의 오브젝트를 마이그레이션하라는 요청을 수신한 것에 응답하여, 메모리 관리자(152)는 로컬 캐시(250) 내에 각각의 오브젝트 또는 그것의 카피를 저장하고, 후속하여, 각각의 오브젝트 또는 그것의 카피를 지속 데이터저장소(154)에 기입한다. 예를 들어, 각각의 오브젝트 또는 그것의 카피는 FIFO, LRU, 또는 다른 널리 공지된 캐시 축출 정책에 따라 로컬 캐시(250)로부터 축출되고 지속 데이터저장소(154)에 기입된다.
일부 실시예들에서, 오브젝트를 리트리빙하기 위해서, 마이그레이션 엔진은 지속 데이터저장소(154)로부터 오브젝트 저장소(106)로 오브젝트를 리트리빙하라는 요청(예를 들어, JNI 겟 콜)을 메모리 관리자(152)에 송신한다. 예를 들어, 애플리케이션은 마이그레이션된 오브젝트를 요구하거나 참조한다. 일부 실시예들에서, 오브젝트를 리트리빙하라는 요청을 수신한 것에 응답하여, 메모리 관리자(152)는 지속 데이터저장소(154)로부터 오브젝트를 리트리빙하고 로컬 캐시(250) 내에 오브젝트 또는 그것의 카피를 저장함으로써 오브젝트를 이용가능하게 한다. 후속하여, 마이그레이션 스레드(124) 또는 메모리 관리자(152)는 오브젝트 또는 그것의 카피를 오브젝트 저장소(106)에 기입한다.
일부 실시예들에서, 지속 데이터저장소(154)는 하나 이상의 비휘발성 메모리 제어기(320) 및 하나 이상의 비휘발성 메모리 디바이스(322)를 포함한다. 일부 실시예들에서, 하나 이상의 비휘발성 메모리 디바이스(322)는 자기 디스크 저장 디바이스(들), 광학 디스크 저장 디바이스(들), 플래시 메모리 디바이스(들), 또는 다른 비휘발성 고체 상태 저장 디바이스(들)를 포함한다. 예를 들어, 하나 이상의 비휘발성 메모리 제어기(320)는 비휘발성 메모리에의 기입 및 그로부터의 판독 요청들을 핸들링하고 하나 이상의 비휘발성 메모리 디바이스(322)를 모니터링한다. 일부 실시예들에서, 하나 이상의 비휘발성 메모리 디바이스(322)는 여기에 더 정의되는 것과 같은, 하나 이상의 3차원(3D) 메모리 디바이스, 또는 플래시 DIMM들을 포함한다. 일부 실시예들에서, 3D 메모리 디바이스들은 제어기(예를 들어, 하나 이상의 비휘발성 메모리 제어기(320))에 결합된다. 또한, 일부 실시예들에서, 하나 이상의 비휘발성 메모리 제어기(320)는 고체 상태 드라이브(SSD) 제어기들이다. 그러나, 일부 상황들에서, 하나 이상의 다른 유형의 반도체 메모리 디바이스가 광범위하게 다양한 실시예들의 양태들에 따라 지속 데이터저장소(154) 내에 포함될 수 있다.
도 4a는 일부 실시예들에 따른 애플리케이션 가상 머신(100B)과 관련된 데이터 구조의 구현이다. 도 4a에서, 복수의 데이터 오브젝트(414)가 애플리케이션 가상 머신(100B)(도 1b)에 대응하는 오브젝트 저장소(106) 내에 저장된다. 데이터 오브젝트들(414) 각각은 대응하는 메타데이터(412)와 관련된다.
도 4a에서, 데이터 오브젝트(414-2)에 대응하는 메타데이터(412-2)는 데이터 오브젝트(414-2)에 대한 오브젝트 식별자("ID")(416), 데이터 오브젝트(414-2)에 의해 참조된 데이터 오브젝트들에 대응하는 복수의 엔트리(418), 및 다른 그러한 메타데이터를 포함한다. 복수의 엔트리(418) 각각은 참조된 오브젝트의 오브젝트 식별자 및 참조된 오브젝트의 위치에 대한 포인터, 또는 그 위치를 포함한다. 일부 실시예들에서, 데이터 오브젝트(414-2)에 대한 오브젝트 식별자(416)는 데이터 오브젝트(414-2) 내에 포함되고 메타데이터(412-2) 내에 포함되지 않는다.
일부 실시예들에서, 각각의 데이터 오브젝트가 오브젝트 저장소(106)로부터 지속 데이터저장소(154)로 마이그레이션되어야 한다는 결정에 따라 또는 각각의 오브젝트를 지속 데이터저장소(154)로 마이그레이션한 후에, 마이그레이션 스레드(124)(도 1b)는 각각의 데이터 오브젝트를 참조하는 데이터 오브젝트들 내의 각각의 데이터 오브젝트에 대응하는 모든 메타데이터 엔트리들을 각각의 데이터 오브젝트가 지속 데이터저장소(154)로 마이그레이션되었다는 것을 표시하는 예약 값으로 설정하도록 구성된다.
도 4a에서, 데이터 오브젝트(414-4)에 대응하는 메타데이터(412-4)는 데이터 오브젝트(414-4)에 의해 참조된 데이터 오브젝트로의 엔트리(422-2)를 포함한다. 엔트리(422-2)는 참조된 오브젝트의 오브젝트 식별자 및 참조된 데이터 오브젝트가 지속 데이터저장소(154)로 마이그레이션되었다는 것을 표시하는 예약 값을 포함한다.
도 4b는 일부 실시예들에 따른 애플리케이션 가상 머신(100B)과 관련된 데이터 구조들의 구현이다. 도 4b에서, 복수의 데이터 오브젝트(454)는 애플리케이션 가상 머신(100B)(도 1b)에 대응하는 오브젝트 저장소(106) 내에 저장된다. 도 4b에서, 데이터 오브젝트들(454) 각각은 대응하는 메타데이터(452)와 관련된다.
도 4b에서, 데이터 오브젝트(454-1)에 대응하는 메타데이터(452-1)는 데이터 오브젝트(454-1)에 대한 오브젝트 식별자("ID")(456), 데이터 오브젝트(454-1)에 의해 참조된 데이터 오브젝트들로의 복수의 데이터 식별자(458), 및 다른 그러한 메타데이터를 포함한다. 일부 실시예들에서, 데이터 오브젝트(454-1)에 대한 오브젝트 식별자(456)는 데이터 오브젝트(454-1) 내에 포함되고 메타데이터(452-1) 내에 포함되지 않는다. 유사하게, 데이터 오브젝트(454-2)에 대응하는 메타데이터(452-2)는 데이터 오브젝트(454-2)에 대한 오브젝트 식별자("ID")(462), 데이터 오브젝트(454-2)에 의해 참조된 데이터 오브젝트들로의 복수의 데이터 식별자(464), 및 다른 그러한 메타데이터를 포함한다.
도 4b에서, 리다이렉션 테이블(470)은 애플리케이션 가상 머신(100B)과 관련되고 오브젝트 저장소(106) 내에 저장된 복수의 데이터 오브젝트(454)에 대응한다. 도 4b에서, 리다이렉션 테이블(470) 내의 각각의 엔트리는 애플리케이션 가상 머신(100B)에 의해 인스턴스화되는 각각의 데이터 오브젝트에 대응한다. 도 4b에서, 리다이렉션 테이블(470) 내의 각각의 엔트리는 각각의 데이터 오브젝트에 대응하는 오브젝트 식별자, 각각의 데이터 오브젝트의 위치에 대한 포인터(472), 또는 그 위치, 및 각각의 데이터 오브젝트가 오브젝트 저장소(106) 내에 존재하거나 지속 데이터저장소(154)로 마이그레이션되었는지를 표시하는 마이그레이션 플래그 또는 비트(474)를 포함한다.
일부 실시예들에서, 각각의 데이터 오브젝트가 오브젝트 저장소(106)로부터 지속 데이터저장소(154)로 마이그레이션되어야 한다는 결정에 따라 또는 각각의 오브젝트를 지속 데이터저장소(154)로 마이그레이션한 후에, 마이그레이션 스레드(124)(도 1b)는 각각의 데이터 오브젝트가 지속 데이터저장소(154)로 마이그레이션되었다는 것을 표시하기 위해 각각의 데이터 오브젝트에 대응하는 리다이렉션 테이블(470) 내의 마이그레이션 플래그 또는 비트(474)를 설정하도록 구성된다.
예를 들어, 데이터 오브젝트(454-1)에 의해 참조된, 오브젝트 식별자(458-1)에 대응하는 데이터 오브젝트에 대한 마이그레이션 플래그 또는 비트(474-2)는 설정되지 않아서, 오브젝트 식별자(458-1)에 대응하는 데이터 오브젝트가 오브젝트 저장소(106) 내에 존재한다는 것을 표시한다. 또 하나의 예에서, 데이터 오브젝트(454-2)에 의해 참조된, 오브젝트 식별자(464-1)에 대응하는 데이터 오브젝트에 대한 마이그레이션 플래그 또는 비트(474-6)는 설정되어서, 오브젝트 식별자(464-1)에 대응하는 데이터 오브젝트가 지속 데이터저장소(154)로 마이그레이션되었다는 것을 표시한다.
도 5는 일부 실시예들에 따른 애플리케이션 가상 머신(100B)에 대한 가비지 수집 프로세스의 구현과 관련된 데이터 구조들을 도시한다. 일부 실시예들에서, 마이그레이션 스레드(124)(도 1b)는 마이그레이션된 오브젝트들 테이블(510) 및 라이브 참조들을 갖는 마이그레이션된 오브젝트들의 리스트(520)를 유지한다.
일부 실시예들에서, 각각의 오브젝트가 지속 데이터저장소(154)로 마이그레이션되게 한 후에, 마이그레이션 스레드(124)는 각각의 오브젝트에 대응하는 마이그레이션된 오브젝트들 테이블(510) 내에 엔트리를 생성한다. 도 5에서, 마이그레이션된 오브젝트들 테이블(510)은 복수의 엔트리를 포함하고, 여기서 각각의 엔트리는 마이그레이션된 오브젝트에 대응한다. 마이그레이션된 오브젝트들 테이블(510) 내의 각각의 엔트리는 마이그레이션된 오브젝트에 대응하는 오브젝트 식별자("ID")(512) 및, 선택적으로, 마이그레이션된 오브젝트의 위치에 대한 포인터(514), 또는 그 위치를 포함한다.
일부 실시예들에서, 라이브 참조들을 갖는 마이그레이션된 오브젝트들의 리스트(520)는 오브젝트 저장소(106) 내의 오브젝트들에 의해 참조된 각각의 마이그레이션된 오브젝트에 대한 엔트리를 포함한다. 라이브 참조들을 갖는 마이그레이션된 오브젝트들의 리스트(520) 내의 각각의 엔트리는 각각의 마이그레이션된 오브젝트에 대응하는 오브젝트 식별자("ID")(522) 및 각각의 마이그레이션된 오브젝트를 참조하는 오브젝트 저장소(106) 내의 오브젝트들에 대응하는 하나 이상의 오브젝트 식별자(524)를 포함한다.
일부 실시예들에서, 각각의 오브젝트를 마이그레이션한 후에, 마이그레이션 스레드(124)는 각각의 오브젝트에 대응하는 라이브 참조들을 갖는 마이그레이션된 오브젝트들의 리스트(520) 내에 엔트리를 생성하기 위해 오브젝트 저장소(106) 내의 오브젝트들을 스캔한다. 일부 실시예들에서, 마이그레이션 스레드(124)는 라이브 참조들을 갖는 마이그레이션된 오브젝트들의 리스트(520) 내의 엔트리들을 갱신하기 위해 오브젝트 저장소(106) 내의 오브젝트들을 주기적으로 스캔한다. 예를 들어, 오브젝트 저장소(106) 내의 오브젝트가 각각의 마이그레이션된 오브젝트를 더 이상 참조하지 않으면, 마이그레이션 스레드(124)는 이 변화를 반영하기 위해 각각의 마이그레이션된 오브젝트와 관련된 라이브 참조들을 갖는 마이그레이션된 오브젝트들의 리스트(520) 내의 엔트리를 갱신한다. 또 하나의 예에서, 각각의 마이그레이션된 오브젝트가 오브젝트 저장소(106) 내의 어떠한 오브젝트들에 의해서도 더 이상 참조되지 않으면, 마이그레이션 스레드(124)는 라이브 참조들을 갖는 마이그레이션된 오브젝트들의 리스트(520)로부터 각각의 마이그레이션된 오브젝트와 관련된 엔트리를 삭제한다.
대안적으로, 일부 실시예들에서, 가비지 수집 프로세스 중에, 가비지 수집기 스레드(122)(도 1b)는 지속 데이터저장소(154) 내의 마이그레이션된 오브젝트들에 대한 오브젝트 저장소(106) 내의 오브젝트들 내의 참조들을 식별하기 위해 오브젝트 저장소(106) 내의 오브젝트들을 스캔한다. 일부 실시예들에서, 가비지 수집기 스레드(122)는 지속 데이터저장소(154) 내의 마이그레이션된 오브젝트들에 대한 식별된 참조들에 기초하여 라이브 참조들을 갖는 마이그레이션된 오브젝트들의 리스트(520)를 결정한다.
일부 실시예들에서, 가비지 수집기 스레드(122)는 마이그레이션된 오브젝트들 테이블(510) 내의 마이그레이션된 오브젝트들과 라이브 참조들을 갖는 마이그레이션된 오브젝트들의 리스트(520) 내의 라이브 마이그레이션된 오브젝트들 간의 차이 연산을 수행함으로써 가비지 수집될 마이그레이션된 오브젝트들을 결정한다. 일부 실시예들에서, 마이그레이션된 오브젝트들 테이블(510) 내에 포함되지만 라이브 참조들을 갖는 마이그레이션된 오브젝트들의 리스트(520) 내에 포함되지 않는 마이그레이션된 오브젝트들은 이러한 오브젝트들에 대응하는 오브젝트 식별자들(532)을 포함하는 가비지 수집을 위한 마이그레이션된 오브젝트들의 리스트(530) 내에 포함된다. 일부 실시예들에서, 가비지 수집기 스레드(122)는 가비지 수집을 위한 마이그레이션된 오브젝트들의 리스트(530) 상에 포함된 지속 데이터저장소(154) 내의 오브젝트들을 가비지 수집 또는 삭제하라는 요청을 메모리 관리자(152)에 송신한다.
도 6a 내지 도 6c는 일부 실시예들에 따른 애플리케이션 가상 머신과 관련된 오브젝트들을 관리하는 방법(600)의 플로우차트 표현을 도시한다. 일부 실시예들에서, 방법(600)은 서버 시스템(예를 들어, 애플리케이션 서버) 또는 클라이언트 디바이스(예를 들어, 모바일 전화, 랩톱 컴퓨터, 데스크톱 컴퓨터, 태블릿 컴퓨터, 웨어러블 컴퓨팅 디바이스, 또는 다른 컴퓨팅 디바이스) 등의 하나 이상의 프로세서 및 메모리를 갖는 전자 디바이스 상에서 실행되는 애플리케이션 가상 머신에 의해 수행된다. 일부 실시예들에서, 방법(600)은 비일시적인 컴퓨터 판독가능 저장 매체 내에 저장된 명령어들에 의해 통제되고, 명령어들은 애플리케이션 가상 머신을 실행하거나 호스팅하는 전자 디바이스의 하나 이상의 프로세서에 의해 실행된다.
일부 실시예들에서, 애플리케이션 가상 머신(100B)(도 1b)은 하나 이상의 프로세서 및 메모리를 포함하는 전자 디바이스(260)(도 2b)에 의해 실행되거나 호스팅된다. 메모리(266)(예를 들어, DRAM)의 영역은 애플리케이션 가상 머신(100B)에 의한 사용을 위해 할당된다. 일부 실시예들에서, 애플리케이션 가상 머신(100B)에 대해 할당된 메모리의 영역은 오브젝트 저장소(106)를 포함하는 런타임 데이터 영역들(104)(도 1b)을 포함한다. 일부 실시예들에서, 전자 디바이스(260)는 메모리 관리자(152) 및 지속 데이터저장소(154)(예를 들어, 플래시 메모리 디바이스들과 같은 하나 이상의 비휘발성 메모리("NVM") 디바이스를 포함함)를 포함하는 지속성 환경(150)과 동작가능하게 결합된다.
애플리케이션 가상 머신은 애플리케이션 가상 머신과 관련된 복수의 오브젝트 중에서 하나 이상의 마이그레이션가능한 오브젝트의 서브세트를 식별하고(602), 여기서 복수의 오브젝트는 애플리케이션 가상 머신에 대해 할당된 메모리의 영역의 일부를 포함하는 오브젝트 저장소에 저장된다. 일부 실시예들에서, 애플리케이션 가상 머신(100B)(도 1b)에 의해 인스턴스화된 오브젝트들은 오브젝트 저장소(106) 내에 저장된다. 일부 실시예들에서, 마이그레이션 스레드(124)(도 1b)는 오브젝트 저장소(106) 내에 저장된 복수의 오브젝트 중에서 마이그레이션가능한 오브젝트들의 서브세트를 식별한다.
일부 실시예들에서, 마이그레이션가능한 오브젝트들의 서브세트를 식별하는 것은 하나 이상의 미리 정의된 기준에 따라 오브젝트 저장소 내의 복수의 오브젝트로부터 오브젝트들을 식별하는 것(604)을 포함한다. 일부 실시예들에서, 마이그레이션 스레드(124)는 마이그레이션가능한 오브젝트들로서 직렬화가능한 오브젝트 저장소(106) 내의 오브젝트들을 식별한다. 예를 들어, 오브젝트는 그것이 오브젝트가 외부 스토리지 내에 저장되게 하는 머신-독립형일 때 직렬화가능하다. 일부 실시예들에서, 마이그레이션 스레드(124)는 마이그레이션가능한 오브젝트들로서, 마이그레이션가능한 인터페이스와 같은, 미리 결정된 인터페이스를 구현하는 클래스에 속하는 오브젝트 저장소(106) 내의 오브젝트들을 식별한다. 예를 들어, 마이그레이션가능한 인터페이스는 마이그레이션가능한 인터페이스를 구현하는 클래스들과 관련된 오브젝트들이 마이그레이션가능하다는 것을 표시하는 마커 또는 확장의 역할을 하는 빈 인터페이스(즉, 마이그레이션가능한 인터페이스는 여분의 메소드들을 포함하지 않음)이다. 이 예에서, 애플리케이션/프로그램의 소스 코드는 일부 클래스들이 마이그레이션가능한 인터페이스를 구현하도록 수정된다. 일부 실시예들에서, 마이그레이션 스레드(124)는 애플리케이션 또는 프로그램에 최대로 투명하도록 스타트-업에서 애플리케이션 가상 머신(100B)에 전달되는 환경 변수들 내에 포함된 하나 이상의 속성을 갖거나 그와 관련된 오브젝트 저장소(106) 내의 오브젝트들을 식별한다. 예를 들어, 속성들 중 하나는 적어도 미리 정의된 크기인 오브젝트들 만이 마이그레이션가능하다는 것을 특정하는 크기 속성이다.
일부 실시예들에서, 마이그레이션가능한 오브젝트들의 서브세트를 식별하는 것은 하나 이상의 특정된 클래스와 관련되는(예를 들어, 이들 특정된 클래스들에서의 오브젝트들의 인스턴스들인) 오브젝트들을 오브젝트 저장소 내의 복수의 오브젝트로부터 식별하는 것(606)을 포함한다. 일부 실시예들에서, 환경 변수들은 애플리케이션 또는 프로그램에 최대로 투명하도록 마이그레이션가능한 클래스들을 식별하는 스타트-업에서 애플리케이션 가상 머신(100B)에 전달된다. 예를 들어, HashMap 클래스와 같은 미리 정의된 코어 클래스들은 스타트-업에서 마이그레이션가능한 것으로서 식별된다.
일부 실시예들에서, 애플리케이션 가상 머신은 하나 이상의 미리 결정된 조건이 만족되는지를 결정한다(608). 일부 실시예들에서, 하나 이상의 조건 중 하나는 오브젝트 저장소(106)가 미리 결정된 양의 할당되지 않은 또는 자유 공간을 포함할 때 만족된다. 예를 들어, 조건은 오브젝트 저장소(106)가 자유 공간을 포함하지 않거나 오브젝트 저장소(106)의 전체 크기의 25%, 50% 등이 자유이거나 할당되지 않을 때 만족된다.
애플리케이션 가상 머신은 오브젝트 저장소로부터 지속 데이터저장소로 마이그레이션될 각각의 오브젝트를 마이그레이션가능한 오브젝트들의 서브세트로부터 선택한다(610). 일부 실시예들에서, 마이그레이션 스레드(124)는 배경 마이그레이션/축출 프로세스에 따라 마이그레이션을 위한 각각의 오브젝트를 선택하는 데몬 스레드이다.
일부 실시예들에서, 애플리케이션 가상 머신은 하나 이상의 미리 결정된 조건이 만족된다는 결정에 따라 각각의 오브젝트를 선택한다. 예를 들어, 마이그레이션 스레드(124)는 하나 이상의 미리 결정된 기준이 만족될 때(예를 들어, 오브젝트 저장소(106)가 다 차고, 75% 차지, 50% 차지되는 등) 마이그레이션을 위한 오브젝트들을 선택한다. 대안적으로, 일부 실시예들에서, 소정량의 시간 동안 터치되지 않은 마이그레이션가능한 오브젝트들은 오브젝트 저장소(106)로부터 지속 데이터저장소(154)로 마이그레이션된다. 일부 실시예들에서, 후보들로 되도록 결정된 소정의 오브젝트 클래스들 내의 하나 이상의 오브젝트는 공간이 문제가 되기 전에 오브젝트 저장소(106)로부터 지속 데이터저장소(154)로 자동적으로 마이그레이션된다. 예를 들어, 드물게 참조되고 비교적 큰 오브젝트들을 갖는 특정한 클래스들은 보다 자주 참조되는 오브젝트들을 위한 오브젝트 저장소(106) 내의 공간을 만들기 위해 자동적으로 지속 데이터저장소(154)로 마이그레이션된다.
일부 실시예들에서, 애플리케이션 가상 머신은 미리 결정된 대체 알고리즘에 적어도 부분적으로 기초하여 마이그레이션될 각각의 오브젝트를 선택한다(612). 일부 실시예들에서, 마이그레이션 스레드(124)는 마이그레이션/축출 프로세스 또는 대체 알고리즘에 따라 마이그레이션을 위한 각각의 오브젝트를 선택한다. 일부 실시예들에서, 대체 알고리즘은 FIFO, LRU, 클록 대체, 랜덤 대체 등과 같은 복수의 널리 공지된 캐시 알고리즘들 또는 캐시 축출 정책들 중 하나이다. 일부 실시예들에서, 오브젝트들은 그들이 대체 알고리즘의 희생물들이라고 결정될 때 지속 데이터저장소(154)로 단지 마이그레이션된다.
애플리케이션 가상 머신은 각각의 오브젝트가 오브젝트 저장소로부터 지속 데이터저장소로 마이그레이션되게 한다(614). 일부 실시예들에서, 마이그레이션 스레드(124)는 선택된 오브젝트를 오브젝트 저장소(106)로부터 지속 데이터저장소(154)(예를 들어, 도 3의 하나 이상의 비휘발성 메모리("NVM") 디바이스(322)를 포함함)로 마이그레이션하라는 요청(예를 들어, JNI 풋 콜)을 메모리 관리자(152)에 송신함으로써 각각의 오브젝트가 마이그레이션되게 한다. 일부 실시예들에서, 지속 데이터저장소(154)를 포함하는 하나 이상의 비휘발성 메모리 디바이스(322)는 여기에 더 정의된 것과 같은, 하나 이상의 3차원(3D) 메모리를 포함한다. 일부 실시예들에서, 3D 메모리 디바이스들은 제어기(예를 들어, 하나 이상의 비휘발성 메모리 제어기(320))와 결합된다.
일부 실시예들에서, 마이그레이션 프로세스의 부분으로서, 애플리케이션 가상 머신은 각각의 오브젝트를 마이그레이션하라는 요청을 지속 데이터저장소와 관련된 메모리 관리자에 송신한다(616). 일부 실시예들에서, 이 요청은 메모리 관리자(152)에 의해 핸들링되는 JNI 풋 콜이다. 일부 실시예들에서, 메모리 관리자(152)는 애플리케이션 가상 머신(100B)으로부터의 요청들을 핸들링하고 또한 지속 데이터저장소(154) 내에 저장된 오브젝트들을 관리하는 CRUD 동작들을 갖는 마이그레이션 인터페이스(224)(도 2a)를 포함한다.
일부 실시예들에서, 마이그레이션 프로세스의 부분으로서, 애플리케이션 가상 머신은 지속 데이터저장소에 각각의 오브젝트를 저장하기 이전에 지속 데이터저장소와 관련된 메모리 관리자에 대응하는 메모리에 각각의 오브젝트가 저장되게 한다(618). 일부 실시예들에서, 각각의 오브젝트를 마이그레이션하라는 마이그레이션 스레드(124)로부터의 요청에 응답하여, 메모리 관리자(152)는 지속 데이터저장소(154) 내에 각각의 오브젝트의 카피를 저장하기 전에 각각의 오브젝트 또는 그것의 카피를 로컬 캐시(250) 내에 저장한다. 예를 들어, 메모리 관리자(152)는 FIFO, LRU, 또는 다른 널리 공지된 캐시 축출 정책에 따라 로컬 캐시(250)로부터 각각의 오브젝트 또는 그것의 카피를 축출하고 그것을 지속 데이터저장소(154)에 기입한다.
일부 실시예들에서, 마이그레이션 프로세스의 부분으로서, 애플리케이션 가상 머신은 각각의 오브젝트에 대응하는 스터브를 오브젝트 저장소에서 발생시킨다(620). 예를 들어, 마이그레이션 스레드(124)는, 각각의 오브젝트를, 각각의 오브젝트가 지속 데이터저장소(154)로 마이그레이션되었다는 것을 표시하는 오브젝트 저장소(106) 내의 스터브로 대체한다.
일부 실시예들에서, 마이그레이션 프로세스의 부분으로서, 애플리케이션 가상 머신은 리다이렉션 테이블에서 각각의 오브젝트와 관련된 엔트리에 마이그레이션 비트를 설정한다(622). 일부 실시예들에서, 각각의 데이터 오브젝트가 오브젝트 저장소(106)로부터 지속 데이터저장소(154)로 마이그레이션되어야 한다는 결정에 따라 또는 각각의 오브젝트를 지속 데이터저장소(154)로 마이그레이션한 후에, 마이그레이션 스레드(124)는 각각의 데이터 오브젝트가 지속 데이터저장소(154)로 마이그레이션되었는다는 것을 표시하기 위해 각각의 데이터 오브젝트에 대응하는 마이그레이션 플래그 또는 비트(474)를 리다이렉션 테이블(470)에 설정하도록 구성된다. 도 4b에서, 예를 들어, 마이그레이션 플래그 또는 비트(474-6)가 오브젝트 식별자(464-1)에 대응하는 데이터 오브젝트가 지속 데이터저장소(154)로 마이그레이션되었다는 것을 표시하기 위해 오브젝트 식별자(464-1)에 대응하는 데이터 오브젝트에 대해 설정되었다.
일부 실시예들에서, 마이그레이션 프로세스의 부분으로서, 애플리케이션 가상 머신은, 각각의 오브젝트에 대한 참조들을, 각각의 오브젝트가 마이그레이션되었다는 것을 표시하는 예약 값으로 대체한다(625). 일부 실시예들에서, 각각의 데이터 오브젝트가 오브젝트 저장소(106)로부터 지속 데이터저장소(154)로 마이그레이션되어야 한다는 결정에 따라 또는 각각의 오브젝트를 지속 데이터저장소(154)로 마이그레이션한 후에, 마이그레이션 스레드(124)는 각각의 데이터 오브젝트가 지속 데이터저장소(154)로 마이그레이션되었다는 것을 표시하기 위한 예약 값으로 각각의 데이터 오브젝트를 참조하는 데이터 오브젝트들 내의 각각의 데이터 오브젝트에 대응하는 모든 메타데이터 엔트리들을 설정하도록 구성된다. 도 4a에서, 예를 들어, 데이터 오브젝트(414-4)에 대응하는 메타데이터(412-4)에서, 데이터 오브젝트(414-4)에 의해 참조된 데이터 오브젝트에 대응하는 엔트리(422-2)는 참조된 데이터 오브젝트가 지속 데이터저장소(154)로 마이그레이션되었다는 것을 표시하는 예약 값으로 설정된다.
일부 실시예들에서, 마이그레이션 프로세스의 부분으로서, 각각의 오브젝트와 관련된 마이그레이션 플래그 또는 비트를 설정하거나 각각의 오브젝트에 대한 참조들을 예약 값으로 대체한 후에, 애플리케이션 가상 머신은 오브젝트 저장소로부터 각각의 오브젝트를 삭제한다(624/626). 일부 실시예들에서, 각각의 오브젝트를 삭제하는 것은 가비지 수집 및 복구를 위한 각각의 오브젝트를 가비지 수집기 스레드(122)(도 1b)에 의해 마킹하는 것을 포함한다.
일부 실시예들에서, 각각의 오브젝트가 마이그레이션되게 한 후에, 애플리케이션 가상 머신은 가비지 수집 프로세스를 수행한다(627). 일부 실시예들에서, 가비지 수집 프로세스는 가비지 수집기 스레드(122)(도 1b)에 의해 수행된다. 일부 실시예들에서, 가비지 수집 프로세스는 다른 오브젝트들 내의 라이브 참조들에 의해 참조되지 않은 제로 또는 그 이상의 오브젝트들의 세트를 식별하기 위해 오브젝트 저장소(106) 내의 오브젝트들을 스캔하는 것을 포함한다. 제로 또는 그 이상의 식별된 오브젝트들의 세트는 가비지 수집을 위해 마킹되고, 후속하여, 마킹된 오브젝트들은 삭제되고 오브젝트 저장소(106) 내의 그들의 대응하는 메모리 위치(들)는 복구된다.
일부 실시예들에서, 지속 데이터저장소로 마이그레이션된 후에, 각각의 오브젝트는 오브젝트 저장소 내의 어떠한 오브젝트들도 참조하지 않는다(628). 일부 실시예들에서, 마이그레이션가능한 오브젝트들은 직렬화되어야 한다. 직렬화가능한 오브젝트들은 그들이 참조하는 다른 오브젝트들을 갖는 지속 데이터저장소(154)로 마이그레이션된다. 이와 같이, 지속 데이터저장소(154) 내의 마이그레이션된 오브젝트들은 오브젝트 저장소(106) 내의 오브젝트들에 대한 아웃바운드 참조들을 갖지 않고, 마이그레이션된 오브젝트들은 오브젝트 저장소(106) 내의 오브젝트들에 의해 참조되거나 포인팅될 수 있거나 또는 지속 데이터저장소(154) 내의 다른 오브젝트들을 참조한다.
일부 실시예들에서, 가비지 수집 프로세스의 부분으로서, 애플리케이션 가상 머신은 오브젝트 저장소 내의 라이브 오브젝트들에서의 라이브 참조들에 의해 참조되는 지속 데이터저장소 내의 마이그레이션된 오브젝트들의 세트를 결정하고; 오브젝트 저장소 내의 라이브 오브젝트들에서의 라이브 참조들에 의해 참조되지 않은 마이그레이션된 오브젝트들의 세트를 식별하기 위해 마이그레이션된 오브젝트들의 결정된 세트를 마이그레이션된 오브젝트들의 맵과 비교하고; 가비지 수집을 위해 마이그레이션된 오브젝트들의 식별된 세트를 마킹한다(630). 일부 실시예들에서, 마이그레이션 스레드(124)는 마이그레이션된 오브젝트들 테이블(510)(도 5)을 관리한다. 예를 들어, 각각의 오브젝트가 지속 데이터저장소(154)로 마이그레이션되게 한 후에, 마이그레이션 스레드(124)는 각각의 오브젝트에 대응하는 마이그레이션된 오브젝트들 테이블(510) 내에 엔트리를 생성한다. 일부 실시예들에서, 가비지 수집 프로세스 중에, 가비지 수집기 스레드(122)는 지속 데이터저장소(154) 내의 마이그레이션된 오브젝트들에 대한 오브젝트 저장소 내의 오브젝트들 내의 참조를 식별하기 위해 오브젝트 저장소(106) 내의 오브젝트들을 스캔한다. 일부 실시예들에서, 가비지 수집기 스레드(122)는 지속 데이터저장소(154) 내의 마이그레이션된 오브젝트들에 대한 식별된 참조들에 기초하여 라이브 참조들을 갖는 마이그레이션된 오브젝트들의 리스트(520)를 결정한다. 일부 실시예들에서, 가비지 수집 프로세스 중에, 가비지 수집기 스레드(122)는 오브젝트 저장소(106) 내의 라이브 오브젝트들 내의 라이브 참조들에 의해 참조되지 않은 마이그레이션된 오브젝트들의 세트를 식별하기 위해 라이브 참조들을 갖는 마이그레이션된 오브젝트들의 리스트(520)를 마이그레이션된 오브젝트들 테이블(510)과 비교하는 차이 연산을 수행한다. 마이그레이션된 오브젝트들의 식별된 세트는 가비지 수집을 위해 마킹되고 가비지 수집을 위해 마이그레이션된 오브젝트들의 리스트(530) 내에 포함된다. 예를 들어, 마이그레이션된 오브젝트들의 식별된 세트는 장래 소정의 시간에 가비지 수집을 위해 마킹된다.
대안적으로, 일부 실시예들에서, 가비지 수집기 스레드(122)는 지속 데이터저장소(154) 내의 마이그레이션된 오브젝트들의 가비지 수집을 연기한다. 대신에, 메모리 관리자(152) 또는 그것의 컴포넌트(예를 들어, 도 2a의 가비지 수집 모듈(244))는 오브젝트 저장소(106) 내의 오브젝트들에 대한 가비지 수집기 스레드(122)에 의해 수행된 가비지 수집 프로세스와 병행하여 지속 데이터저장소(154) 내의 마이그레이션된 오브젝트들에 대해 가비지 수집 프로세스를 수행한다.
일부 실시예들에서, 가비지 수집 프로세스의 부분으로서, 애플리케이션 가상 머신은 라이브 오브젝트들에서의 라이브 참조들에 의해 참조되는 지속 데이터저장소에서의 마이그레이션된 오브젝트들의 세트를 결정하고(632), 라이브 오브젝트들은 오브젝트 저장소 내의 라이브 오브젝트들 및 지속 데이터저장소 내의 라이브 오브젝트들을 포함한다. 일부 실시예들에서, 가비지 수집 프로세스 중에, 가비지 수집기 스레드(122)는 오브젝트 저장소(106) 및/또는 지속 데이터저장소(154) 내의 라이브 오브젝트들 내의 라이브 참조들(예를 들어, 가비지 수집되지 않은 오브젝트들에 대한 참조들)에 의해 참조된 마이그레이션된 오브젝트들의 세트를 결정한다.
일부 실시예들에서, 마이그레이션된 오브젝트들의 세트를 결정하는 것은 지속 데이터저장소로부터 오브젝트 데이터를 리트리빙하는 것(634)을 포함하고, 오브젝트 데이터는 다른 라이브 오브젝트들에서의 라이브 참조들에 의해 참조되는 라이브 오브젝트들의 부분들 또는 오브젝트들의 카피들을 포함한다. 일부 실시예들에서, 가비지 수집기 스레드(122)는 지속 데이터저장소(154) 내의 마이그레이션된 오브젝트들의 카피들 또는 라이브 오브젝트들에 의해 참조된 지속 데이터저장소(154) 내의 마이그레이션된 오브젝트들의 부분들을 포함하는, 오브젝트 데이터를 리트리빙하라는 요청(예를 들어, JNI 겟 콜)을 메모리 관리자(152)에 송신한다.
일부 실시예들에서, 오브젝트 데이터를 리트리빙하는 것은 오브젝트 저장소와는 구별되는 각각의 메모리 또는 메모리 부분에 오브젝트 데이터를 저장하는 것(636)을 포함한다. 일부 실시예들에서, 오브젝트 데이터(예를 들어, 마이그레이션된 오브젝트들의 카피들 또는 지속 데이터저장소(154) 내의 마이그레이션된 오브젝트들의 부분들)는 라이브 비마이그레이션된 오브젝트들을 저장한 오브젝트 저장소(106)의 부분과 분리된 오브젝트 저장소(106)의 부분 내에 저장된다. 이와 같이, 자주 사용된 또는 오브젝트 저장소(106) 내에 존재하는 "핫" 오브젝트들은 리트리빙된 오브젝트 데이터로 대체되지 않는다.
일부 실시예들에서, 마이그레이션된 오브젝트들의 세트를 결정하는 것은 오브젝트 저장소 및/또는 지속 데이터저장소 내의 라이브 오브젝트들에 대한 참조들을 리트리빙된 오브젝트 데이터에서 식별하는 것(638)을 또한 포함한다. 일부 실시예들에서, 가비지 수집 프로세스 중에, 가비지 수집기 스레드(122)는 오브젝트 저장소(106) 및/또는 지속 데이터저장소(154) 내의 라이브 오브젝트들에 대한 참조들을 리트리빙된 오브젝트 데이터에서 식별하고, 라이브 참조들을 갖는 마이그레이션된 오브젝트들의 리스트(520)(도 5)를 채우기 위해 그 정보를 사용한다.
일부 실시예들에서, 가비지 수집 프로세스의 부분으로서, 마이그레이션된 오브젝트들의 세트를 결정한(632) 후에, 애플리케이션 가상 머신은 오브젝트 저장소 내의 라이브 오브젝트들에서의 라이브 참조들에 참조되지 않은 마이그레이션된 오브젝트들을 식별하기 위해 마이그레이션된 오브젝트들의 결정된 세트를 마이그레이션된 오브젝트들의 맵과 비교한다(640). 일부 실시예들에서, 가비지 수집 프로세스 중에, 가비지 수집기 스레드(122)는 오브젝트 저장소(106) 내의 라이브 오브젝트들 내의 라이브 참조들에 의해 참조되지 않은 마이그레이션된 오브젝트들의 세트를 식별하기 위해 라이브 참조들을 갖는 마이그레이션된 오브젝트들의 리스트(520)를 마이그레이션된 오브젝트들 테이블(510)과 비교하는 차이 연산을 수행한다. 마이그레이션된 오브젝트들의 식별된 세트는 가비지 수집을 위해 마킹되고 가비지 수집을 위해 마이그레이션된 오브젝트들의 리스트(530) 내에 포함된다. 예를 들어, 마이그레이션된 오브젝트들의 식별된 세트는 장래 소정의 시간에 가비지 수집을 위해 마킹된다.
일부 실시예들에서, 애플리케이션 가상 머신의 종료 전에, 애플리케이션 가상 머신은 지속 데이터저장소에 현재 저장되지 않은 오브젝트 저장소 내의 마이그레이션가능한 오브젝트들이 지속 데이터저장소로 마이그레이션되게 하고, 애플리케이션 가상 머신의 종료 후에, 애플리케이션 가상 머신의 후속 인스턴스는 적어도 마이그레이션된 오브젝트들의 서브세트가 지속 데이터저장소로부터 리트리빙되어 애플리케이션 가상 머신의 후속 인스턴스의 오브젝트 저장소에 저장되게 한다(642). 일부 실시예들에서, 애플리케이션 가상 머신(100B)의 종료 전에, 마이그레이션 스레드(124)는 마이그레이션/축출 프로세스에 의해 선택되지 않은 마이그레이션가능한 오브젝트들이 지속 데이터저장소(154)로 마이그레이션되게 한다. 일부 실시예들에서, 메모리 관리자(152) 또는 그것의 컴포넌트(예를 들어, 도 2a의 지속성 모듈(240))는 마이그레이션된 오브젝트들을 애플리케이션 또는 프로그램과 관련시킴으로써 애플리케이션 가상 머신(100B)의 인스턴스들 사이에 오브젝트들을 지속한다. 일부 실시예들에서, 애플리케이션 가상 머신(100B)의 후속 인스턴스에서, 마이그레이션 스레드(124)는 애플리케이션 가상 머신(100B)의 이전의 인스턴스로부터 지속된 오브젝트들을 리트리빙하라는 요청(예를 들어, JNI 겟 콜)을 송신하고, 오브젝트 저장소(106) 내에 애플리케이션 가상 머신(100B)의 이전의 인스턴스로부터의 지속된 오브젝트들을 저장한다.
도 7a 및 도 7b는 일부 실시예들에 따른 애플리케이션 가상 머신과 관련된 오브젝트들을 관리하는 방법(700)의 플로우차트 표현을 도시한다. 일부 실시예들에서, 방법(700)은 서버 시스템(예를 들어, 애플리케이션 서버) 또는 클라이언트 디바이스(예를 들어, 모바일 전화, 랩톱 컴퓨터, 데스크톱 컴퓨터, 태블릿 컴퓨터, 웨어러블 컴퓨팅 디바이스, 또는 다른 컴퓨팅 디바이스) 등의 하나 이상의 프로세서 및 메모리를 갖는 전자 디바이스 상에서 실행되는 애플리케이션 가상 머신에 의해 수행된다. 일부 실시예들에서, 방법(700)은 비일시적인 컴퓨터 판독가능 저장 매체 내에 저장된 명령어들에 의해 통제되고, 명령어들은 애플리케이션 가상 머신을 실행하거나 호스팅하는 전자 디바이스의 하나 이상의 프로세서에 의해 실행된다.
일부 실시예들에서, 애플리케이션 가상 머신(100B)(도 1b)은 하나 이상의 프로세서 및 메모리를 포함하는 전자 디바이스(260)(도 2b)에 의해 실행되거나 호스팅된다. 메모리(266)의 영역은 애플리케이션 가상 머신(100B)에 의한 사용을 위해 할당된다. 일부 실시예들에서, 애플리케이션 가상 머신(100B)에 대해 할당된 메모리의 영역은 오브젝트 저장소(106)를 포함하는 런타임 데이터 영역들(104)(도 1b)을 포함한다. 일부 실시예들에서, 전자 디바이스(260)는 메모리 관리자(152) 및 지속 데이터저장소(154)(예를 들어, 플래시 메모리 디바이스들과 같은 하나 이상의 비휘발성 메모리("NVM") 디바이스를 포함함)를 포함하는 지속성 환경(150)과 동작가능하게 결합된다.
애플리케이션 가상 머신은 애플리케이션 가상 머신과 관련된 복수의 오브젝트 중에서 하나 이상의 마이그레이션가능한 오브젝트의 서브세트를 식별하고(702), 여기서 복수의 오브젝트는 애플리케이션 가상 머신에 대해 할당된 메모리의 영역의 일부를 포함하는 오브젝트 저장소에 저장된다. 일부 실시예들에서, 애플리케이션 가상 머신(100B)에 의해 인스턴스화된 오브젝트들은 오브젝트 저장소(106) 내에 저장된다. 일부 실시예들에서, 마이그레이션 스레드(124)는 오브젝트 저장소(106) 내에 저장된 복수의 오브젝트 중에서 마이그레이션가능한 오브젝트들의 서브세트를 식별한다.
일부 실시예들에서, 마이그레이션가능한 오브젝트들의 서브세트를 식별하는 것은 하나 이상의 미리 정의된 기준에 따라 오브젝트 저장소 내의 복수의 오브젝트로부터 오브젝트들을 식별하는 것(704)을 포함한다. 일부 실시예들에서, 마이그레이션 스레드(124)는 마이그레이션가능한 오브젝트들로서 직렬화가능한 오브젝트 저장소(106) 내의 오브젝트들을 식별한다. 예를 들어, 오브젝트는 그것이 오브젝트가 외부 스토리지 내에 저장되게 하는 머신-독립형일 때 직렬화가능하다. 일부 실시예들에서, 마이그레이션 스레드(124)는 마이그레이션가능한 오브젝트들로서, 마이그레이션가능한 인터페이스와 같은, 미리 결정된 인터페이스를 구현하는 클래스에 속하는 오브젝트 저장소(106) 내의 오브젝트들을 식별한다. 예를 들어, 마이그레이션가능한 인터페이스는 마이그레이션가능한 인터페이스를 구현하는 클래스들과 관련된 오브젝트들이 마이그레이션가능하다는 것을 표시하는 마커 또는 확장의 역할을 하는 빈 인터페이스(즉, 마이그레이션가능한 인터페이스는 여분의 메소드들을 포함하지 않음)이다. 이 예에서, 애플리케이션/프로그램의 소스 코드는 클래스들이 마이그레이션가능한 인터페이스를 구현하도록 수정된다. 일부 실시예들에서, 마이그레이션 스레드(124)는 애플리케이션 또는 프로그램에 최대로 투명하도록 스타트-업에서 애플리케이션 가상 머신(100B)에 전달되는 환경 변수들 내에 포함된 하나 이상의 속성과 관련된 오브젝트 저장소(106) 내의 오브젝트들을 식별한다. 예를 들어, 속성들 중 하나는 적어도 미리 정의된 크기인 오브젝트 만이 마이그레이션가능하다는 것을 특정하는 크기 속성이다.
일부 실시예들에서, 마이그레이션가능한 오브젝트들의 서브세트를 식별하는 것은 하나 이상의 특정된 클래스와 관련되는 오브젝트들을 오브젝트 저장소 내의 복수의 오브젝트로부터 식별하는 것(706)을 포함한다. 일부 실시예들에서, 환경 변수들은 애플리케이션 또는 프로그램에 최대로 투명하도록 마이그레이션가능한 클래스들을 식별하는 스타트-업에서 애플리케이션 가상 머신(100B)에 전달된다. 예를 들어, HashMap 클래스와 같은 미리 정의된 코어 클래스들은 스타트-업에서 마이그레이션가능한 것으로서 식별된다.
애플리케이션 가상 머신은 마이그레이션가능한 오브젝트들의 서브세트에서의 제1 오브젝트에 대한 수정(또는 그것의 생성)을 검출한다(708). 일부 실시예들에서, 동시 기입(write-through) 방법에 따라, 마이그레이션 스레드(124)는 오브젝트 저장소(106)에서 제1 오브젝트에 대한 수정(또는 그것의 생성)을 검출한다.
수정을 검출하는 것에 응답하여, 애플리케이션 가상 머신은 수정된(또는 생성된) 제1 오브젝트가 지속 데이터저장소로 마이그레이션되게 한다(710). 일부 실시예들에서, 동시 기입 방법에 따라, 마이그레이션 스레드(124)는 수정된(또는 생성된) 제1 오브젝트 또는 그것의 카피가 지속 데이터저장소(154)로 마이그레이션되거나 기입되게 한다. 그러나, 일부 실시예들에서, 마이그레이션 스레드는 제1 오브젝트가 대체 알고리즘에 의해 선택될 때까지, 오브젝트 저장소(106) 내의 제1 오브젝트에 대해 할당된 공간을 해제하지 않는다. 예를 들어, 마이그레이션 스레드(124)는 수정된 제1 오브젝트를 지속 데이터저장소(154)로 마이그레이션하라는 요청(예를 들어, JNI 풋 콜)을 메모리 관리자(152)에 송신한다.
일부 실시예들에서, 애플리케이션 가상 머신은 하나 이상의 미리 결정된 조건이 만족되는지를 결정한다(712). 일부 실시예들에서, 하나 이상의 조건 중 하나는 오브젝트 저장소(106)가 미리 결정된 양의 할당되지 않은 또는 자유 공간을 포함할 때 만족된다. 예를 들어, 조건은 오브젝트 저장소(106)가 자유 공간을 포함하지 않거나 오브젝트 저장소(106)의 전체 크기의 25%, 50% 등이 자유이거나 할당되지 않을 때 만족된다.
애플리케이션 가상 머신은 오브젝트 저장소로부터 지속 데이터저장소로 마이그레이션될 제2 오브젝트를 마이그레이션가능한 오브젝트들의 서브세트로부터 선택한다(714). 일부 실시예들에서, 마이그레이션 스레드(124)는 배경 마이그레이션/축출 프로세스에 따라 마이그레이션을 위한 각각의 오브젝트를 선택하는 데몬 스레드이다.
일부 실시예들에서, 애플리케이션 가상 머신은 하나 이상의 미리 결정된 조건이 만족된다는 결정에 따라 제2 오브젝트를 선택한다. 예를 들어, 마이그레이션 스레드(124)는 하나 이상의 미리 결정된 기준이 만족될 때(예를 들어, 오브젝트 저장소(106)가 다 차고, 75% 차지, 50% 차지되는 등) 마이그레이션을 위한 제2 오브젝트를 선택한다.
일부 실시예들에서, 애플리케이션 가상 머신은 미리 결정된 대체 알고리즘에 적어도 부분적으로 기초하여 마이그레이션될 제2 오브젝트를 선택한다(716). 일부 실시예들에서, 마이그레이션 스레드(124)는 마이그레이션/축출 프로세스 또는 대체 알고리즘에 따라 마이그레이션을 위한 각각의 오브젝트를 선택한다. 일부 실시예들에서, 대체 알고리즘은 FIFO, LRU, 클록 대체, 랜덤 대체 등과 같은 복수의 널리 공지된 캐시 알고리즘들 또는 캐시 축출 정책들 중 하나이다. 일부 실시예들에서, 오브젝트들은 그들이 대체 알고리즘의 희생물들이라고 결정될 때 지속 데이터저장소(154)로 단지 마이그레이션된다.
애플리케이션 가상 머신은 선택된 제2 오브젝트가 제1 오브젝트인지를 결정한다(718). 일부 실시예들에서, 마이그레이션 스레드(124)는 선택된 제2 오브젝트가 단계 710에서 지속 데이터저장소(154)로 이미 마이그레이션되었거나 기입되었던, 수정된(또는 생성된) 제1 오브젝트인지를 결정한다.
선택된 제2 오브젝트가 수정된(또는 생성된) 제1 오브젝트가 아니라는 결정에 따라, 애플리케이션 가상 머신은 제2 오브젝트가 오브젝트 저장소로부터 지속 데이터저장소로 마이그레이션되게 한다(720). 일부 실시예들에서, 마이그레이션 스레드(124)는 선택된 오브젝트를 오브젝트 저장소(106)로부터 지속 데이터저장소(154)로 마이그레이션하라는 요청(예를 들어, JNI 풋 콜)을 메모리 관리자(152)에 송신함으로써 각각의 오브젝트가 마이그레이션되게 한다.
선택된 제2 오브젝트가 수정된(또는 생성된) 제1 오브젝트라는 결정에 따라, 애플리케이션 가상 머신은 제2 오브젝트의 마이그레이션을 중지한다(722). 일부 실시예들에서, 선택된 제2 오브젝트가 수정된(또는 생성된) 제1 오브젝트일 때, 마이그레이션 스레드(124)는 수정된 제1 오브젝트가 단계 710에서 지속 데이터저장소(154)로 이미 마이그레이션 또는 기입되었기 때문에 선택된 제2 오브젝트의 마이그레이션을 중지한다. 더구나, 일부 실시예들에서, 마이그레이션 스레드(125)는 오브젝트 저장소(106) 내의 제1 오브젝트에 할당된 공간을 해제한다. 예를 들어, 애플리케이션 가상 머신(100B)은 그것이 발생한 대로 오브젝트에 대한 각각의 수정마다 기입한다. 이와 같이, 이 예에서, 이러한 수정된 오브젝트가 희생물로서 선택될 때, 수정된 오브젝트는 지속 데이터저장소(154) 내의 수정된 오브젝트에 대한 값이 현재 것이기 때문에 지속 데이터저장소(154)로 기입될 필요는 없다.
일부 구현들에서, 위에 설명된 방법들 중 임의의 것에 대해, 지속 데이터저장소(154)는 단일의 비휘발성 메모리("NVM") 디바이스(예를 들어, 플래시 메모리 디바이스)를 포함하지만, 다른 구현들에서, 지속 데이터저장소(154)는 복수의 NVM 디바이스(예를 들어, 플래시 메모리 디바이스)를 포함한다. 일부 구현들에서, 위에 설명된 방법들 중 임의의 것에 대해, 지속 데이터저장소(154)는 스토리지 제어기(예를 들어, 도 3의 하나 이상의 NVM 제어기(320)) 및 저장 매체(예를 들어, 도 3의 하나 이상의 NVM 디바이스(322))를 포함한다.
반도체 메모리 디바이스들은 동적 랜덤 액세스 메모리("DRAM") 또는 정적 랜덤 액세스 메모리("SRAM") 디바이스들과 같은 휘발성 메모리 디바이스들, 저항성 랜덤 액세스 메모리("ReRAM")와 같은 비휘발성 메모리 디바이스들, 전기적 소거 및 프로그램가능 판독 전용 메모리("EEPROM"), (EEPROM의 서브세트로도 고려될 수 있는) 플래시 메모리, 강유전성 랜덤 액세스 메모리("FRAM"), 및 자기저항성 랜덤 액세스 메모리("MRAM"), 및 정보를 저장할 수 있는 다른 반도체 요소들을 포함한다. 메모리 디바이스의 각각의 유형은 상이한 구성들을 가질 수 있다. 예를 들어, 플래시 메모리 디바이스들은 NAND 또는 NOR 구성으로 구성될 수 있다.
메모리 디바이스들은 임의의 조합들로, 수동 및/또는 능동 요소들로부터 형성될 수 있다. 비제한적인 예로서, 수동 반도체 메모리 요소들은 일부 실시예들에서 안티-퓨즈, 위상 변화 재료 등과 같은 비저항 스위칭 저장 요소, 및 선택적으로 다이오드 등과 같은 조종 요소를 포함하는 ReRAM 디바이스 요소들을 포함한다. 또한 비제한적인 예로서, 능동 반도체 메모리 요소들은 일부 실시예들에서 플로팅 게이트, 도전성 나노입자들, 또는 전하 저장 유전체 재료와 같은 전하 저장 영역을 포함하는 요소들을 포함하는, EEPROM 및 플래시 메모리 디바이스 요소들을 포함한다.
다중 메모리 요소들은 그들이 직렬로 접속되도록 또는 각각의 요소가 개별적으로 액세스가능하도록 구성될 수 있다. 비제한적인 예로서, NAND 구성(NAND 메모리) 내의 플래시 메모리 디바이스들은 전형적으로 직렬로 접속된 메모리 요소들을 포함한다. NAND 메모리 어레이는 어레이가 스트링이 단일 비트 라인을 공유하고 그룹으로서 액세스되는 다중 메모리 요소로 이루어진 메모리의 다중 스트링들로 이루어지도록 구성될 수 있다. 대안적으로, 메모리 요소들은 각각의 요소가 개별적으로 액세스가능하도록 구성될 수 있다(예를 들어, NOR 메모리 어레이). NAND 및 NOR 메모리 구성들은 예시적이고, 메모리 요소들은 달리 구성될 수 있다.
기판 내에 및/또는 위에 위치된 반도체 메모리 요소들은 2차원 메모리 구조 또는 3차원 메모리 구조와 같이, 2차원 또는 3차원으로 배열될 수 있다.
2차원 메모리 구조에서, 반도체 메모리 요소들은 단일 평면 또는 단일 메모리 디바이스 레벨로 배열된다. 전형적으로, 2차원 메모리 구조에서, 메모리 요소들은 메모리 요소들을 지지하는 기판의 주 표면에 실질적으로 평행하게 연장되는 평면(예를 들어, x-z 방향 평면) 내에 배열된다. 기판은 웨이퍼일 수 있고 웨이퍼 위나 안에는 메모리 요소들의 층이 형성되거나 그것은 그들이 형성된 후에 메모리 요소들에 부착된 캐리어 기판일 수 있다. 비제한적인 예로서, 기판은 실리콘과 같은 반도체를 포함할 수 있다.
메모리 요소들은 복수의 행 및/또는 열과 같이, 정렬된 어레이로 단일 메모리 디바이스 레벨로 배열될 수 있다. 그러나, 메모리 요소들은 비정규 또는 비직교 구성들로 배열될 수 있다. 메모리 요소들은 각각, 비트 라인들 및 워드 라인들과 같은, 2개 이상의 전극들 또는 접촉 라인들을 가질 수 있다.
3차원 메모리 어레이는 메모리 요소들이 다중 평면들 또는 다중 메모리 디바이스 레벨들을 차지하도록 배열될 수 있고, 그럼으로써 3차원(즉, x, y, 및 z 방향들, 여기서 y 방향은 기판의 주 표면에 수직이고 x 및 z 방향들은 기판의 주 표면에 실질적으로 평행함)으로 구조들을 형성한다.
비제한적인 예로서, 3차원 메모리 구조는 다중 2차원 메모리 디바이스 레벨들의 스택으로서 수직으로 배열될 수 있다. 또 하나의 비제한적인 예로서, 3차원 메모리 어레이는 수직 열들(예를 들어, 기판의 주 표면에 실질적으로 수직으로, 즉 y 방향으로 연장되는 열들)로서 배열될 수 있고 각각의 열은 각각의 열 내의 다중 메모리 요소들을 갖는다. 열들은 2차원 구성(예를 들어, x-z 평면)으로 배열될 수 있고, 결국 다중의 수직으로 적층된 메모리 평면들 상에 요소들이 있는 메모리 요소들의 3차원 배열을 이룬다. 3차원의 메모리 요소들의 다른 구성들은 또한 3차원 메모리 어레이를 구성할 수 있다.
비제한적인 예로서, 3차원 NAND 메모리 어레이에서, 메모리 요소들은 단일의 수평(예를 들어, x-z) 메모리 디바이스 레벨 내에 NAND 스트링을 형성하기 위해 함께 결합될 수 있다. 대안적으로, 메모리 요소들은 다중의 수평 메모리 디바이스 레벨들을 가로지르는 수직의 NAND 스트링을 형성하기 위해 함께 결합될 수 있다. 다른 3차원 구성들이 상상될 수 있는데 여기서 일부 NAND 스트링들은 단일 메모리 레벨 내에 메모리 요소들을 포함하고 다른 스트링들은 다중 메모리 레벨들을 통해 걸치는 메모리 요소들을 포함한다. 3차원 메모리 어레이들은 NOR 구성으로 및 ReRAM 구성으로 또한 설계될 수 있다.
전형적으로, 모놀리식 3차원 메모리 어레이에서, 하나 이상의 메모리 디바이스 레벨이 단일 기판 위에 형성된다. 선택적으로, 모놀리식 3차원 메모리 어레이는 또한 단일 기판 내에 적어도 부분적으로 하나 이상의 메모리 층을 가질 수 있다. 비제한적인 예로서, 기판은 실리콘과 같은 반도체를 포함할 수 있다. 모놀리식 3차원 어레이에서, 어레이의 각각의 메모리 디바이스 레벨을 구성하는 층들은 전형적으로 어레이의 하부의 메모리 디바이스 레벨들의 층들 상에 형성된다. 그러나, 모놀리식 3차원 메모리 어레이의 인접한 메모리 디바이스 레벨들의 층들은 메모리 디바이스 레벨들 간에 공유될 수 있거나 개입하는 층들을 가질 수 있다.
다음에 다시, 2차원 어레이들이 별개로 형성된 다음 메모리의 다중 층들을 갖는 비모놀리식 메모리 디바이스를 형성하기 위해 함께 패키징될 수 있다. 예를 들어, 비모놀리식 적층된 메모리들은 별개의 기판들 상에 메모리 레벨들을 형성한 다음 서로 그 위에 메모리 레벨들을 적층함으로써 구성될 수 있다. 기판들은 적층 전에 메모리 디바이스 레벨들로부터 얇게 되거나 제거될 수 있지만, 메모리 디바이스 레벨들이 별개의 기판 위에 초기에 형성됨에 따라, 결과적인 메모리 어레이들은 모놀리식 3차원 메모리 어레이들이 아니다. 또한, 다중의 2차원 메모리 어레이들 또는 3차원 메모리 어레이들(모놀리식 또는 비모놀리식)이 별개의 칩들 상에 형성된 다음 적층된 칩 메모리 디바이스를 형성하기 위해 함께 패키징될 수 있다.
관련된 회로는 메모리 요소들의 동작을 위해 그리고 메모리 요소들의 통신을 위해 전형적으로 필요하다. 비제한적인 예들로서, 메모리 디바이스들은 프로그래밍 및 판독과 같은 기능들을 달성하기 위해 메모리 요소들을 제어하고 구동하기 위해 사용되는 회로를 가질 수 있다. 이 관련된 회로는 메모리 요소들과 동일한 기판 상에 및/또는 별개의 기판 상에 있을 수 있다. 예를 들어, 메모리 판독-기입 동작들을 위한 제어기는 별개의 제어기 칩 상에 및/또는 메모리 요소들과 동일한 기판 상에 위치될 수 있다.
"3차원 메모리 디바이스"(또는 3D 메모리 디바이스)라는 용어는 다음의 것 중 임의의 것을 포함하는, 메모리 요소들의 다중 메모리 층들 또는 다중 레벨들(예를 들어, 때로는 다중 메모리 디바이스 레벨들이라고 함)을 갖는 메모리 디바이스를 의미하는 것으로 여기서 정의된다: 그 일부 비제한적인 예들이 위에 설명된, 모놀리식 또는 비모놀리식 3D 메모리 어레이를 갖는 메모리 디바이스; 또는 그 일부 비제한적인 예들이 위에 설명된, 적층된-칩 메모리 디바이스를 형성하기 위해 함께 패키징된 2개 이상의 2D 또는 3D 메모리 디바이스들을 갖는 메모리 디바이스.
본 기술 분야의 통상의 기술자는 본 발명은 설명된 2차원 및 3차원의 예시적인 구조들로 제한되지 않고 여기에 설명된 것과 같이 그리고 본 기술 분야의 통상의 기술자에 의해 이해되는 바와 같이 발명의 취지 및 범위 내에서 모든 관련된 메모리 구조들을 커버한다는 것을 인식할 것이다.
여기서 "제1", "제2" 등이라는 용어가 다양한 요소들을 설명하기 위해 사용될 수 있지만, 이들 요소는 이들 용어에 의해 제한되지 않아야 한다는 것을 이해할 것이다. 이들 용어는 한 요소를 다른 요소와 구별하기 위해 단지 사용된다. 예를 들어, "제1 오브젝트"의 모든 출현들이 일관적으로 재명명되고 "제2 오브젝트"의 모든 출현들이 일관적으로 재명명되는 한, 제1 오브젝트를 제2 오브젝트라고 할 수 있고, 유사하게, 제2 오브젝트를 제1 오브젝트라고 할 수 있다. 제1 오브젝트 및 제2 오브젝트는 둘 다 오브젝트들이지만, 그들은 동일한 오브젝트가 아니다.
여기에 사용된 용어는 구체적인 실시예들을 단지 설명하기 위한 것이고 청구항들을 제한하려는 의도는 아니다. 실시예들 및 첨부된 청구항들에서 사용된 바와 같이, 단수 표현들("a" "an" 및 "the")은 문맥이 달리 분명히 표시하지 않는다면, 복수의 형태를 역시 포함하는 것으로 의도된다. 여기에 사용된 것과 같은 용어 "및/또는"은 관련된 나열된 아이템들의 하나 이상의 임의의 또는 모든 가능한 조합들을 참조하고 그들을 포함한다는 것을 또한 이해할 것이다. 본 명세서에서 사용될 때, 용어들 "포함한다" 및/또는 "포함하는"은 기술된 특징들, 정수들, 단계들, 동작들, 요소들, 및/또는 컴포넌트들의 존재를 특정하지만, 하나 이상의 다른 특징들, 정수들, 단계들, 동작들, 요소들, 컴포넌트들, 및/또는 그것의 그룹들의 존재 또는 추가를 배제하지 않는다는 것이 또한 이해될 것이다.
여기에 사용된 바와 같이, 문구 "A, B 및 C 중 적어도 하나"는 나열된 아이템들 중 하나 이상을 요구하는 것으로 해석되어야 하고, 이 문구는 A 단독의 단일 예, B 단독의 단일 예, 또는 C 단독의 단일 예로 읽히지만, 또한 "임의의 C 없이 A의 하나 이상 또는 B의 하나 이상" 등과 같은 나열된 아이템들의 조합들을 포함한다.
여기에 사용된 바와 같이, "~라면(if)"이라는 용어는 "할 때" 또는 "할 시에" 또는 기술된 선행 조건이 그 문맥에 따라 참이라는 것을 "결정한 것에 응답하여" 또는 "결정에 따라" 또는 "검출한 것에 응답하여"를 의미하는 것으로 해석된다. 유사하게, 문구 "[기술된 선행 조건이 참]이라는 것이 결정되면" 또는 "[기술된 선행 조건이 참]이면" 또는 "[기술된 선행 조건이 참]일 때"는 기술된 전제 조건이 그 문맥에 따라 참이라는 것을 "결정할 시에" 또는 "결정한 것에 응답하여" 또는 "결정에 따라" 또는 "검출할 시에" 또는 "검출한 것에 응답하여"를 의미하는 것으로 해석될 수 있다.
설명의 목적을 위한 상기 설명은 특정한 실시예들을 참조하여 설명되었다. 그러나, 상기 예시적인 논의들은 총망라하려는 것도 아니고 청구항들을 개시된 정확한 형태들로 제한하려는 것도 아니다. 많은 수정들 및 변화들이 상기 교시들에 비추어서 가능하다. 동작의 원리들 및 실제 응용들을 가장 잘 설명함으로써, 본 기술 분야의 통상의 기술자가 할 수 있게 하기 위해 실시예들이 선택되었고 설명되었다.

Claims (26)

  1. 하나 이상의 프로세서 및 메모리를 갖는 전자 디바이스에 의해 실행되는 애플리케이션 가상 머신과 관련된 오브젝트들을 관리하는 방법으로서,
    상기 애플리케이션 가상 머신과 관련된 복수의 오브젝트로부터 마이그레이션가능한 오브젝트들(migratable objects)의 서브세트를 식별하는 단계 - 상기 마이그레이션가능한 오브젝트들의 서브세트는 하나 이상의 오브젝트를 포함하고, 상기 복수의 오브젝트는 상기 애플리케이션 가상 머신에 대해 할당된 상기 메모리의 일부를 포함하는 오브젝트 저장소(object store)에 저장됨 -;
    상기 오브젝트 저장소로부터 상기 전자 디바이스에 동작가능하게 결합된 지속 데이터저장소(persistent datastore)로 마이그레이션될 각각의 오브젝트를 상기 마이그레이션가능한 오브젝트들의 서브세트로부터 선택하는 단계 - 상기 지속 데이터저장소는 상기 전자 디바이스와 관련된 상기 메모리와는 구별됨 -; 및
    상기 각각의 오브젝트가 상기 오브젝트 저장소로부터 상기 지속 데이터저장소로 마이그레이션되게 하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 각각의 오브젝트를 선택하는 단계 이전에, 하나 이상의 미리 결정된 조건이 만족되는지를 결정하는 단계를 더 포함하고,
    상기 선택하는 단계는, 상기 하나 이상의 미리 결정된 조건이 만족된다는 결정에 따라 상기 각각의 오브젝트를 선택하는 단계를 포함하는 방법.
  3. 제1항 또는 제2항에 있어서,
    상기 마이그레이션가능한 오브젝트들의 서브세트를 식별하는 단계는, 하나 이상의 미리 정의된 기준에 따라 상기 오브젝트 저장소 내의 상기 복수의 오브젝트로부터 오브젝트들을 식별하는 단계를 포함하는 방법.
  4. 제1항 또는 제2항에 있어서,
    상기 마이그레이션가능한 오브젝트들의 서브세트를 식별하는 단계는, 상기 오브젝트 저장소 내의 상기 복수의 오브젝트로부터, 하나 이상의 특정된 클래스와 관련되는 오브젝트들을 식별하는 단계를 포함하는 방법.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서,
    상기 마이그레이션될 각각의 오브젝트를 선택하는 단계는, 미리 결정된 대체 알고리즘에 적어도 부분적으로 기초하여 마이그레이션될 상기 각각의 오브젝트를 선택하는 단계를 포함하는 방법.
  6. 제1항 내지 제5항 중 어느 한 항에 있어서,
    상기 각각의 오브젝트가 마이그레이션되게 하는 단계는, 상기 각각의 오브젝트를 마이그레이션하라는 요청을 상기 지속 데이터저장소와 관련된 메모리 관리자에 송신하는 단계를 포함하는 방법.
  7. 제1항 내지 제6항 중 어느 한 항에 있어서,
    상기 각각의 오브젝트가 마이그레이션되게 하는 단계는, 상기 지속 데이터저장소에 상기 각각의 오브젝트를 저장하기 이전에, 상기 지속 데이터저장소와 관련된 메모리 관리자와 관련되는 메모리에 상기 각각의 오브젝트가 저장되게 하는 단계를 포함하는 방법.
  8. 제1항 내지 제7항 중 어느 한 항에 있어서,
    상기 각각의 오브젝트가 마이그레이션되게 하는 단계는, 상기 각각의 오브젝트에 대한 스터브를 상기 오브젝트 저장소에서 발생시키는 단계를 포함하는 방법.
  9. 제1항 내지 제7항 중 어느 한 항에 있어서,
    상기 각각의 오브젝트가 마이그레이션되게 하는 단계는, 리다이렉션 테이블에서 상기 각각의 오브젝트와 관련된 엔트리에 마이그레이션 비트를 설정하는 단계를 포함하는 방법.
  10. 제1항 내지 제7항 중 어느 한 항에 있어서,
    상기 각각의 오브젝트가 마이그레이션되게 하는 단계는, 상기 각각의 오브젝트에 대한 참조들을, 상기 각각의 오브젝트가 마이그레이션되었다는 것을 표시하는 예약 값(reserved value)으로 대체하는 단계를 포함하는 방법.
  11. 제1항 내지 제10항 중 어느 한 항에 있어서,
    상기 지속 데이터저장소로 마이그레이션된 이후에, 상기 각각의 오브젝트는 상기 오브젝트 저장소에서의 어떠한 오브젝트들도 참조하지 않는 방법.
  12. 제11항에 있어서,
    상기 오브젝트 저장소 내의 라이브 오브젝트들(live objects)에서의 라이브 참조들(live references)에 의해 참조되는, 상기 지속 데이터저장소 내의 마이그레이션된 오브젝트들의 세트를 결정하는 단계;
    상기 오브젝트 저장소 내의 라이브 오브젝트들에서의 라이브 참조들에 의해 참조되지 않은 마이그레이션된 오브젝트들의 세트를 식별하기 위해 상기 결정되는 마이그레이션된 오브젝트들의 세트와 마이그레이션된 오브젝트들의 맵을 비교하는 단계; 및
    가비지 수집을 위해 상기 식별되는 마이그레이션된 오브젝트들의 세트를 마킹하는 단계
    를 더 포함하는 방법.
  13. 제1항 내지 제10항 중 어느 한 항에 있어서,
    라이브 오브젝트들에서의 라이브 참조들에 의해 참조되는, 상기 지속 데이터저장소 내의 마이그레이션된 오브젝트들의 세트를 결정하는 단계 - 라이브 오브젝트는 상기 오브젝트 저장소 내의 라이브 오브젝트들, 및 상기 지속 데이터저장소 내의 라이브 오브젝트들을 포함함 -;
    상기 오브젝트 저장소 내의 라이브 오브젝트들에서의 라이브 참조들에 의해 참조되지 않은 마이그레이션된 오브젝트들을 식별하기 위해 상기 결정되는 마이그레이션된 오브젝트들의 세트와 마이그레이션된 오브젝트들의 맵을 비교하는 단계; 및
    가비지 수집을 위해 상기 식별되는 마이그레이션된 오브젝트들의 세트를 마킹하는 단계
    를 더 포함하고,
    상기 마이그레이션된 오브젝트들의 세트를 결정하는 단계는,
    상기 지속 데이터저장소로부터 오브젝트 데이터를 리트리빙(retrieving)하는 단계 - 상기 오브젝트 데이터는 다른 라이브 오브젝트들에서의 라이브 참조들에 의해 참조되는 라이브 오브젝트들의 부분들 또는 오브젝트들의 카피들을 포함함 -; 및
    상기 오브젝트 저장소 및/또는 상기 지속 데이터저장소 내의 라이브 오브젝트들에 대한 참조들을 상기 리트리빙된 오브젝트 데이터에서 식별하는 단계
    를 포함하는 방법.
  14. 제13항에 있어서,
    상기 오브젝트 데이터를 리트리빙하는 단계는, 상기 오브젝트 저장소와는 구별되는 각각의 메모리 또는 메모리 부분에 상기 오브젝트 데이터를 저장하는 단계를 포함하는 방법.
  15. 제1항 내지 제14항 중 어느 한 항에 있어서,
    상기 애플리케이션 가상 머신의 종료 이전에, 상기 지속 데이터저장소에 현재 저장되지 않은 상기 오브젝트 저장소 내의 마이그레이션가능한 오브젝트들이 상기 지속 데이터저장소로 마이그레이션되게 하는 단계; 및
    상기 애플리케이션 가상 머신의 종료 이후에, 적어도 상기 마이그레이션된 오브젝트들의 서브세트가 상기 지속 데이터저장소로부터 리트리빙되어 상기 애플리케이션 가상 머신의 후속 인스턴스의 오브젝트 저장소에 저장되게 하는 단계
    를 더 포함하는 방법.
  16. 전자 디바이스로서,
    하나 이상의 프로세서; 및
    상기 하나 이상의 프로세서에 의해 실행될 하나 이상의 프로그램을 저장하는 메모리
    를 포함하고,
    상기 하나 이상의 프로그램은,
    상기 전자 디바이스에 의해 호스팅되는 애플리케이션 가상 머신과 관련된 복수의 오브젝트로부터 마이그레이션가능한 오브젝트들의 서브세트를 식별하기 위한 명령어들 - 상기 마이그레이션가능한 오브젝트들의 서브세트는 하나 이상의 오브젝트를 포함하고, 상기 복수의 오브젝트는 상기 애플리케이션 가상 머신에 대해 할당된 상기 메모리의 일부를 포함하는 오브젝트 저장소에 저장됨 -;
    상기 오브젝트 저장소로부터 상기 전자 디바이스에 동작가능하게 결합된 지속 데이터저장소로 마이그레이션될 각각의 오브젝트를 상기 마이그레이션가능한 오브젝트들의 서브세트로부터 선택하기 위한 명령어들 - 상기 지속 데이터저장소는 상기 전자 디바이스와 관련된 상기 메모리와는 구별됨 -; 및
    상기 각각의 오브젝트가 상기 오브젝트 저장소로부터 상기 지속 데이터저장소로 마이그레이션되게 하기 위한 명령어들
    을 포함하는 전자 디바이스.
  17. 제16항에 있어서,
    상기 마이그레이션가능한 오브젝트들의 서브세트를 식별하는 것은, 하나 이상의 미리 정의된 기준에 따라 상기 오브젝트 저장소에 저장된 상기 복수의 오브젝트로부터 오브젝트들을 식별하는 것을 포함하는 전자 디바이스.
  18. 제16항 또는 제17항에 있어서,
    상기 마이그레이션될 각각의 오브젝트를 선택하는 것은, 미리 결정된 대체 알고리즘에 적어도 부분적으로 기초하여 마이그레이션될 상기 각각의 오브젝트를 선택하는 것을 포함하는 전자 디바이스.
  19. 제16항 내지 제18항 중 어느 한 항에 있어서,
    상기 각각의 오브젝트가 마이그레이션되게 하는 것은,
    상기 각각의 오브젝트를 마이그레이션하라는 요청을 상기 지속 데이터저장소와 관련된 메모리 관리자에 송신하는 것;
    상기 지속 데이터저장소에 상기 각각의 오브젝트를 저장하기 이전에, 상기 지속 데이터저장소와 관련된 메모리 관리자와 관련되는 메모리에 상기 각각의 오브젝트가 저장되게 하는 것;
    상기 각각의 오브젝트에 대한 스터브를 상기 오브젝트 저장소에서 발생시키는 것;
    리다이렉션 테이블에서 상기 각각의 오브젝트와 관련된 엔트리에 마이그레이션 비트를 설정하는 것; 및
    상기 각각의 오브젝트에 대한 참조들을, 상기 각각의 오브젝트가 마이그레이션되었다는 것을 표시하는 예약 값으로 대체하는 것
    중 하나 이상을 포함하는 전자 디바이스.
  20. 제16항 내지 제19항 중 어느 한 항에 있어서,
    상기 하나 이상의 프로그램은, 상기 하나 이상의 프로세서에 의해 실행될 때, 상기 전자 디바이스로 하여금,
    상기 오브젝트 저장소 내의 라이브 오브젝트들에서의 라이브 참조들에 의해 참조되는, 상기 지속 데이터저장소 내의 마이그레이션된 오브젝트들의 세트를 결정하는 것;
    상기 오브젝트 저장소 내의 라이브 오브젝트들에서의 라이브 참조들에 의해 참조되지 않은 마이그레이션된 오브젝트들의 세트를 식별하기 위해 상기 결정되는 마이그레이션된 오브젝트들의 세트와 마이그레이션된 오브젝트들의 맵을 비교하는 것; 및
    가비지 수집을 위해 상기 식별되는 마이그레이션된 오브젝트들의 세트를 마킹하는 것
    을 또한 수행하게 하는 전자 디바이스.
  21. 제16항에 있어서,
    상기 하나 이상의 프로그램은, 상기 하나 이상의 프로세서에 의해 실행될 때, 상기 전자 디바이스로 하여금 제1항 내지 제15항 중 어느 한 항의 방법을 수행하게 하는 전자 디바이스.
  22. 하나 이상의 프로그램을 저장하는 비일시적인 컴퓨터 판독가능 저장 매체로서,
    상기 하나 이상의 프로그램은 명령어들을 포함하고, 상기 명령어들은, 하나 이상의 프로세서를 갖는 전자 시스템에 의해 실행될 때, 상기 전자 시스템으로 하여금,
    상기 전자 디바이스에 의해 호스팅되는 애플리케이션 가상 머신과 관련된 복수의 오브젝트로부터 마이그레이션가능한 오브젝트들의 서브세트를 식별하는 것 - 상기 마이그레이션가능한 오브젝트들의 서브세트는 하나 이상의 오브젝트를 포함하고, 상기 복수의 오브젝트는 상기 애플리케이션 가상 머신에 대해 할당된 상기 메모리의 일부를 포함하는 오브젝트 저장소에 저장됨 -;
    상기 오브젝트 저장소로부터 상기 전자 디바이스에 동작가능하게 결합된 지속 데이터저장소로 마이그레이션될 각각의 오브젝트를 상기 마이그레이션가능한 오브젝트들의 서브세트로부터 선택하는 것 - 상기 지속 데이터저장소는 상기 전자 디바이스와 관련된 상기 메모리와는 구별됨 -; 및
    상기 각각의 오브젝트가 상기 오브젝트 저장소로부터 상기 지속 데이터저장소로 마이그레이션되게 하는 것
    을 포함하는 동작들을 수행하게 하는 비일시적인 컴퓨터 판독가능 저장 매체.
  23. 제22항에 있어서,
    상기 마이그레이션가능한 오브젝트들의 서브세트를 식별하는 것은, 하나 이상의 미리 정의된 기준에 따라 상기 오브젝트 저장소에 저장된 상기 복수의 오브젝트로부터 오브젝트들을 식별하는 것을 포함하는 비일시적인 컴퓨터 판독가능 저장 매체.
  24. 제22항 또는 제23항에 있어서,
    상기 각각의 오브젝트가 마이그레이션되게 하는 것은,
    상기 각각의 오브젝트를 마이그레이션하라는 요청을 상기 지속 데이터저장소와 관련된 메모리 관리자에 송신하는 것;
    상기 지속 데이터저장소에 상기 각각의 오브젝트를 저장하기 이전에, 상기 지속 데이터저장소와 관련된 메모리 관리자와 관련되는 메모리에 상기 각각의 오브젝트가 저장되게 하는 것;
    상기 각각의 오브젝트에 대한 스터브를 상기 오브젝트 저장소에서 발생시키는 것;
    리다이렉션 테이블에서 상기 각각의 오브젝트와 관련된 엔트리에 마이그레이션 비트를 설정하는 것; 및
    상기 각각의 오브젝트에 대한 참조들을, 상기 각각의 오브젝트가 마이그레이션되었다는 것을 표시하는 예약 값으로 대체하는 것
    중 하나 이상을 포함하는 비일시적인 컴퓨터 판독가능 저장 매체.
  25. 제22항 또는 제23항에 있어서,
    상기 하나 이상의 프로그램은, 상기 하나 이상의 프로세서에 의해 실행될 때, 상기 전자 시스템으로 하여금,
    상기 오브젝트 저장소 내의 라이브 오브젝트들에서의 라이브 참조들에 의해 참조되는, 상기 지속 데이터저장소 내의 마이그레이션된 오브젝트들의 세트를 결정하는 것;
    상기 오브젝트 저장소 내의 라이브 오브젝트들에서의 라이브 참조들에 의해 참조되지 않은 마이그레이션된 오브젝트들의 세트를 식별하기 위해 상기 결정되는 마이그레이션된 오브젝트들의 세트와 마이그레이션된 오브젝트들의 맵을 비교하는 것; 및
    가비지 수집을 위해 상기 식별되는 마이그레이션된 오브젝트들의 세트를 마킹하는 것
    을 또한 수행하게 하는 비일시적인 컴퓨터 판독가능 저장 매체.
  26. 제22항에 있어서,
    상기 하나 이상의 프로그램은, 상기 하나 이상의 프로세서에 의해 실행될 때, 상기 전자 디바이스로 하여금 제1항 내지 제15항 중 어느 한 항의 방법을 수행하게 하는 비일시적인 컴퓨터 판독가능 저장 매체.
KR1020167017245A 2014-03-24 2015-03-02 애플리케이션 가상 머신의 오브젝트 저장소를 확장하기 위한 방법들 및 시스템들 KR20160135698A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201461969705P 2014-03-24 2014-03-24
US61/969,705 2014-03-24
US14/339,072 2014-07-23
US14/339,072 US20150268989A1 (en) 2014-03-24 2014-07-23 Methods and Systems for Extending the Object Store of an Application Virtual Machine
PCT/US2015/018252 WO2015148058A1 (en) 2014-03-24 2015-03-02 Methods and systems for extending the object store of an application virtual machine

Publications (1)

Publication Number Publication Date
KR20160135698A true KR20160135698A (ko) 2016-11-28

Family

ID=54142204

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167017245A KR20160135698A (ko) 2014-03-24 2015-03-02 애플리케이션 가상 머신의 오브젝트 저장소를 확장하기 위한 방법들 및 시스템들

Country Status (4)

Country Link
US (1) US20150268989A1 (ko)
KR (1) KR20160135698A (ko)
CN (1) CN106104477A (ko)
WO (1) WO2015148058A1 (ko)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101703984B1 (ko) * 2014-07-18 2017-02-09 주식회사 큐램 메모리 처리 방법, 및 메모리 처리 시스템
US9600409B2 (en) 2014-08-29 2017-03-21 EMC IP Holding Company LLC Method and system for garbage collection in a storage system based on longevity of stored data
US11146629B2 (en) * 2014-09-26 2021-10-12 Red Hat, Inc. Process transfer between servers
US9996377B2 (en) * 2015-06-30 2018-06-12 International Business Machines Corporation Virtual machine migration via a mobile device
US20180276016A1 (en) * 2017-03-21 2018-09-27 Ca, Inc. Java virtual machine ability to process a native object
CN107578102A (zh) * 2017-07-21 2018-01-12 韩永刚 一种类神经节点信息处理方法及智能设备
KR102648539B1 (ko) * 2018-07-27 2024-03-18 삼성전자주식회사 전자 장치 및 그의 동작 방법
US11240109B2 (en) * 2019-10-31 2022-02-01 Dell Products, L.P. Systems and methods for workspace continuity and remediation
CN112068928B (zh) * 2020-08-12 2023-10-20 福建升腾资讯有限公司 一种基于重定向的虚拟机数据存储方法及系统
WO2023137444A2 (en) * 2022-01-14 2023-07-20 Sentinel Labs Israel Ltd. Systems and methods for data management and query optimization

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6324543B1 (en) * 1998-03-06 2001-11-27 International Business Machines Corporation Dynamic object migration method using proxy object links to support automatic object distribution in an object-oriented environment
US6934755B1 (en) * 2000-06-02 2005-08-23 Sun Microsystems, Inc. System and method for migrating processes on a network
US8189794B2 (en) * 2008-05-05 2012-05-29 Sony Corporation System and method for effectively performing data restore/migration procedures
US8195774B2 (en) * 2008-05-23 2012-06-05 Vmware, Inc. Distributed virtual switch for virtualized computer systems
US8478725B2 (en) * 2009-09-14 2013-07-02 Vmware, Inc. Method and system for performing live migration of persistent data of a virtual machine
JP5735124B2 (ja) * 2011-10-28 2015-06-17 株式会社日立製作所 ストレージシステム、及びオブジェクト管理方法

Also Published As

Publication number Publication date
WO2015148058A1 (en) 2015-10-01
CN106104477A (zh) 2016-11-09
US20150268989A1 (en) 2015-09-24

Similar Documents

Publication Publication Date Title
KR20160135698A (ko) 애플리케이션 가상 머신의 오브젝트 저장소를 확장하기 위한 방법들 및 시스템들
CN108509480B (zh) 配置为执行非阻塞控制更新操作的数据存储设备
US8225058B2 (en) Memory system managing a size of logs
KR102434170B1 (ko) 하이브리드 메모리 시스템
US8171206B2 (en) Avoidance of self eviction caused by dynamic memory allocation in a flash memory storage device
JP7057435B2 (ja) ハイブリッドメモリシステム
CN112988627B (zh) 存储设备、存储系统和操作存储设备的方法
US8583890B2 (en) Disposition instructions for extended access commands
US20240078187A1 (en) Per-process re-configurable caches
US11327892B2 (en) Latency-based storage in a hybrid memory system
CN107209738B (zh) 储存存储器直接访问
Xu et al. I/O Transit Caching for PMem-based Block Device
Xu et al. Caiti: I/O transit caching for persistent memory-based block device
CN116501243A (zh) 存储控制器及其操作方法、存储装置的操作方法
CN118140205A (zh) 用于早期命令取消的存储系统和方法