CN106104477A - 用于扩展应用虚拟机的对象存储区的方法和*** - Google Patents
用于扩展应用虚拟机的对象存储区的方法和*** Download PDFInfo
- Publication number
- CN106104477A CN106104477A CN201580003482.9A CN201580003482A CN106104477A CN 106104477 A CN106104477 A CN 106104477A CN 201580003482 A CN201580003482 A CN 201580003482A CN 106104477 A CN106104477 A CN 106104477A
- Authority
- CN
- China
- Prior art keywords
- memory
- memory block
- data store
- virtual machine
- permanent data
- Prior art date
- Legal status (The legal status 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 status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/12—Replacement control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/12—Replacement control
- G06F12/121—Replacement control using replacement algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
- G06F9/4856—Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation 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/5016—Allocation 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
- G06F9/5088—Techniques for rebalancing the load in a distributed system involving task migration
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C7/00—Arrangements for writing information into, or reading information out from, a digital store
- G11C7/10—Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
- G11C7/1072—Input/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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7205—Cleaning, 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
技术领域
公开的实施例总的来说涉及应用虚拟机,且具体来说,涉及扩展应用虚拟机(例如,Java虚拟机的对象存储区(object storage)(例如,堆(heap))。
背景技术
通常,Java虚拟机(“JVM”)的实例执行单个应用或者程序。JVM包括用于包括方法区域和堆的应用的多个运行时间数据区域。方法区域和堆两者在应用的所有线程之间共享。向堆分配预定义量的高速、高成本存储器(例如,DRAM)以用于存储由应用实例化(instantiate)的对象。但是,如果程序需要比可以使得可用的更多的堆空间,则JVM施加OutOfMemoryError(用尽存储器错误)。
当前,使用虚拟存储器来通过利用大的交换(swap)文件而扩展堆。但是,该解决方案由于页粒度和交换算法而具有非常差的性能。
发明内容
公开的方法和***通过使用低成本非易失性存储器(例如,闪存存储器)扩展应用虚拟机的对象存储区(例如,堆)而改进了应用虚拟机的性能。接着,这又帮助应用在虚拟机不施加(throwing)OutOfMemoryError和应用不由于分页(paging)堆而遭受差性能的情况下访问大量数据,同时提供相对于扩展DRAM的降低的成本和更高的数据容量。此外,以对应用或者程序最大限度地透明的方式扩展对象存储区。
附图说明
为了能够更详细地理解本公开,可以引用各种实施例的特征进行更具体的描述,在附图中图示了其中一些特征。但是,附图仅图示本公开的更相关的特征且因此不考虑限定,因为描述可能允许其他有效的特征。
图1A-1B是图示根据某些实施例的应用虚拟机的实现的框图。
图2A是图示根据某些实施例的存储器管理器的实现的框图。
图2B是图示根据某些实施例的执行应用虚拟机的电子装置的实现的框图。
图3是图示根据某些实施例的存储器分层的框图。
图4A-4B是图示根据某些实施例的与应用虚拟机相关联的数据结构的实现的框图。
图5图示根据某些实施例的与用于应用虚拟机的垃圾收集处理的实现相关联的数据结构的框图。
图6A-6C图示根据某些实施例的管理与应用虚拟机相关联的对象的方法的流程图表示。
图7A-7B图示根据某些实施例的管理与应用虚拟机相关联的对象的方法的流程图表示。
根据惯例,附图中图示的各种特征可以不必是按比例描绘的。因此,各种特征的维度可以为了清楚任意地扩展或者缩小。另外,某些附图可以不绘出给定***、方法或装置的所有组成部分。最后,相同的附图标记可以用于表示整个说明书和附图中相同的特征。
具体实施方式
在这里描述的各种实施例包括改进比如Java虚拟机(“JVM”)的应用虚拟机(有时也称为处理虚拟机)的可靠性和性能的方法、装置和/或***。某些实施例包括用于将应用虚拟机的对象存储区(例如,堆)扩展为大容量、成本有效的永久数据存储区(storage)的方法、装置和/或***。
某些实施例包括管理与应用虚拟机相关联的对象的方法。在一些实施例中,由具有一个或多个处理器和操作地耦接到配置为管理永久数据存储区的存储器管理器的存储器的电子装置(例如,客户端装置或者服务器***)执行或者操纵的应用虚拟机执行该方法。该方法包括从与应用虚拟机相关联的多个对象中标识可迁移(migratable)对象的子集,其中可迁移对象的子集包括一个或多个对象,且多个对象被存储在包括分配用于应用虚拟机的存储器的一部分的对象存储区中。该方法还包括从可迁移对象的子集中选择要从对象存储区迁移到操作地耦接到电子装置的永久数据存储区的各个对象,其中永久数据存储区不同于与电子装置相关联的存储器。该方法进一步包括使得各个对象从对象存储区迁移到永久数据存储区。
某些实施例包括管理与应用虚拟机相关联的对象的方法。在一些实施例中,由具有一个或多个处理器和操作地耦接到配置为管理永久数据存储区的存储器管理器的存储器的电子装置(例如,客户端装置或者服务器***)执行或者操纵的应用虚拟机执行该方法。该方法包括从与应用虚拟机相关联的多个对象中标识可迁移对象的子集,其中可迁移对象的子集包括一个或多个对象,且多个对象被存储在包括分配用于应用虚拟机的存储器的一部分的对象存储区中。该方法还包括:检测可迁移对象的子集中的第一对象的修改(或者创建);和响应于检测修改(或者创建),使得修改(或者创建)的第一对象迁移到操作地耦接到电子装置的永久数据存储区,其中永久数据存储区不同于与电子装置相关联的存储器。该方法进一步包括:从可迁移对象的子集中选择要从对象存储区迁移到永久数据存储区的第二对象。根据所选的第二对象不同于第一对象的确定,该方法包括使得所选的第二对象迁移到永久数据存储区。根据所选的第二对象是第一对象的确定,该方法包括放弃所选的第二对象的迁移。
某些实施例包括电子***或装置,其包括:一个或多个处理器;和存储要由一个或多个处理器执行的一个或多个程序,该一个或多个程序包括用于执行或者控制在这里描述的任何方法的实现的指令。某些实施例包括非瞬时计算机可读存储介质,存储用于由电子***或装置的一个或多个处理器执行的一个或多个程序,该一个或多个程序包括用于执行在这里描述的任何方法的指令。某些实施例包括电子***或装置,其包括:用于执行在这里描述的任何方法的操作的装置。在一些实施例中,应用虚拟机由电子***或装置执行或者操纵。
在这里描述许多细节为了提供附图中图示的示例实施例的全面理解。但是,可以没有许多细节地实践某些实施例,且权利要求的范围仅由在权利要求中特别地叙述的那些特征和方面所限定。此外,没有以详尽的细节描述公知的方法、组件和电路从而不会不必要地模糊的在这里描述的实施例的更相关的方面。
图1A是图示根据某些实施例的应用虚拟机100A的实现的框图。例如,应用虚拟机100A图示用于各个应用或者程序的虚拟机的代表实例。为了便于讨论,应用虚拟机100A被描述为Java虚拟机(“JVM”)。但是,本领域技术人员将理解描述的实施例和在这里公开的方法也可以怎样应用于以多个解译语言中的任何解译语言(例如,Smalltalk、Java、Lisp、Scala、Ruby等)写的多个类似的应用虚拟机实现中的任何应用虚拟机实现。
Java虚拟机的运行时间实例(instance)具有清楚的:为了运行一个Java应用或者程序。当Java应用开始时,创建运行时间实例,且当Java应用完成时,停止该实例。作为示例,如果用户在同一计算机上同时开始三个Java应用,则将创建三个Java虚拟机实例,其中三个Java应用在各个Java虚拟机实例内部运行。
在一些实施例中,Java虚拟机实例通过调用某些初始类的main()方法来开始运行其唯一的应用。具有这种main()方法的任何类可以用作Java应用的开始点。应用的初始类的main()方法用作该应用的初始线程的开始点。初始线程可以孵化其他线程。在一些实施例中,线程达成两个风格:守护进程(daemon)和非守护进程(non-daemon)。守护进程线程通常是由虚拟机本身使用以用于后台处理的线程,比如执行垃圾收集的线程。但是,应用的初始线程,即在main()开始的线程是非守护进程线程。只要任何非守护线程仍然运行,Java应用就持续执行(虚拟机实例持续存在)。当Java应用的所有非守护进程线程终止时,虚拟机实例终止。
图1A图示根据某些实施例的包括主要子***和存储区的Java虚拟机100A的框图。Java虚拟机100A包括类加载器子***102和执行引擎118。类加载器子***102是用于加载给定完全有资格的名称的类型(即,类和接口)的机制。执行引擎118是负责执行加载的类的方法中包括的指令的机制。
在一些实施例中,执行引擎118包括适时(just-in-time)(“JIT”)编译器120和垃圾收集器线程122。JIT编译器120配置为在运行时间将字节码编译为本地机器代码并执行本地机器代码。在一些实施例中,垃圾收集器线程122是配置为扫描对象存储区106中的对象并标记用于垃圾收集和回收的未引用对象(即,未引用或者指向其他对象的对象)的守护进程线程。
当Java虚拟机100A运行应用或者程序时,需要存储器存储字节码及Java虚拟机100A从加载的类文件、应用实例化的对象,对方法的参数、返回值、局部变量、计算的中间结果等提取的其他信息。Java虚拟机100A将执行应用所需要的存储器组织到多个运行时间数据区104中。在一些实施例中,某些运行时间数据区104在应用的所有线程之中共享,且其它的运行时间数据区104是对各个线程唯一的。Java虚拟机的每个实例具有方法区域108和对象存储区106(有时也称为“堆”)。方法区域108和对象存储区106由Java虚拟机100A内部运行的所有线程共享。当Java虚拟机100A加载类文件时,其从类文件中包括的二进制数据解析关于类型的信息。Java虚拟机100A将该类型信息置于方法区域108中,并在应用运行时,Java虚拟机100A将应用实例化的所有对象置于对象存储区106中。
在一些实施例中,当每个新线程成立时,向新线程分配它自己的各个PC寄存器112(例如,程序计数器)和Java堆栈110。如果线程正在执行Java方法(不是本地方法),则各个PC寄存器的值指示要执行的下一指令,且线程的各个Java堆栈存储用于该线程的Java(即,非本地的)方法调用的状态。Java方法调用的状态包括其局部变量、其被调用的参数、其返回值(如果有的话)和中间计算。比较起来,本地方法调用的状态以依赖于实现的方式存储在一个或多个本地方法堆栈114中,以及可能地存储在寄存器或者其他依赖于实现的存储区中。
在一些实施例中,一个或多个Java堆栈110由堆栈帧(或者帧)组成。堆栈帧包括一个Java方法调用的状态。当线程调用方法时,Java虚拟机将新帧推到线程的Java堆栈上。当方法完成时,Java虚拟机弹出并丢弃用于该方法的帧。在一些实施例中,Java虚拟机100A不具有保存中间数据值的寄存器。代替地,指令集使用一个或多个Java堆栈110以用于中间数据值的存储。在一些实施例中,本地方法接口116配置为允许Java程序调用C或者C++程序(即,本地方法)中的函数或者允许C或者C++程序调用Java程序中的函数。例如,可以使用本地方法接口116从本地方法库调用本地方法。
图1B图示根据某些实施例的操作地耦接到永久环境150的修改的应用虚拟机100B的框图。在一些实施例中,应用虚拟机100B是包括一个或多个迁移线程的应用虚拟机100A的修改的实现,该迁移线程包括代表性迁移线程124。应用虚拟机100B类似于如上在图1A中所述的应用虚拟机100A。因而,为了简洁的缘故将不再讨论相同的附图标记。
在一些实施例中,迁移线程124是修改的应用虚拟机100B中预加载或者嵌入的守护进程线程。迁移线程124配置为管理使得对象根据一组迁移和/或赶出(eviction)政策从对象存储区106迁移到永久环境150中的后台迁移/赶出处理。在一些实施例中,该组迁移和赶出政策是预定的,或者在某些其它实施例中,该组迁移和/或赶出政策由在应用虚拟机100B中运行的应用或者程序提供。在一些实施例中,迁移线程124也配置为当应用需要或者引用迁移的对象时从永久环境150检索对象。
在一些实施例中,永久环境150包括存储器管理器152和永久数据存储区154。存储器管理器152配置为经由一组CRUD(创建、读取、更新和删除)操作管理永久数据存储区154。永久数据存储区154包括非易失性存储器,比如一个或多个磁盘存储装置、光盘存储装置、闪存存储器装置或者其他非易失性固态存储装置。
图2A是图示根据某些实施例的存储器管理器152的实现的框图。存储器管理器152典型地包括用于执行存储器206中存储的模块、程序和/或指令且由此执行处理操作的一个或多个处理器(有时也称为CPU或者处理单元或者微处理器或者微控制器)202、存储器206、到其他计算装置(例如,存储器管理器150)的一个或多个通信接口264到存储装置(例如,永久数据存储区154)的一个或多个存储接口(storage interface)205、和用于互连这些组件的一个或多个通信总线208。通信总线208可选地包括互连和控制***组件之间的通信的电路(有时称作芯片组)。在一些实施例中,存储器管理器152通过通信总线208和一个或多个通信接口204与其他计算装置、比如电子装置260操作地耦合。在一些实施例中,存储器管理器152通过通信总线208和一个或多个存储接口205与存储装置、比如永久数据存储区154操作地耦合。存储器206包括一个或多个半导体存储器装置,比如高速随机存取存储器(例如,DRAM、SRAM、DDR、RAM或者其他随机存取固态存储器装置),且可以包括非易失性存储器(例如,一个或多个磁盘存储装置、一个或多个光盘存储装置、一个或多个闪存存储器装置、一个或多个三维(3D)存储器装置,或者其他非易失性固态存储装置)。存储器206可选地包括从一个或多个处理器202远程定位的一个或多个存储装置。存储器206、或者替代地存储器206内的一个或多个非易失性存储器装置包括非瞬时计算机可读存储介质。在一些实施例中,存储器206或者存储器206的计算机可读存储介质存储以下程序、模块和数据结构或者其子集:
·操作逻辑210包括用于处理各种基本***服务和用于执行依赖于硬件的任务的过程;
·用于经由一个或多个通信接口204与其他计算机***或者计算机组件(例如,电子装置260,图2B)通信的通信模块212;
·用于接收、响应和处理来自电子装置260的请求(例如,来自迁移线程124的JNI(Java本地接口)得到和安置调用)的请求模块214;
·用于执行CRUD(创建、读取、更新和删除)操作以在对象存储区106和永久数据存储区154之间迁移对象的迁移管理器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或者其他随机存取固态存储器装置),且可以包括非易失性存储器(例如,一个或多个磁盘存储装置、一个或多个光盘存储装置、一个或多个闪存存储器装置、一个或多个三维(3D)存储器装置或者其他非易失性固态存储装置)。存储器266可选地包括从一个或多个处理器202远程定位的一个或多个存储装置。存储器266,或者替代地存储器266内的一个或多个非易失性存储器装置包括非瞬时计算机可读存储介质。
在一些实施例中,当电子装置260是经由一个或多个网络(即,有线或者无线)与服务器***(例如,应用服务器)操作地耦合的客户端装置(例如,移动电话、膝上型计算机、台式计算机、平板计算机、可穿戴计算装置或者其他计算装置)时,存储器266或者存储器266的计算机可读存储介质存储以下程序、模块和数据结构或者其子集或者超集(superset):
·操作逻辑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;
°分开地存储堆栈帧的一个或多个Java堆栈110,分开的Java堆栈用于应用虚拟机100A/100B的每个线程;
°在用于应用虚拟机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;
°分开地存储堆栈帧的一个或多个Java堆栈110,分开的Java堆栈用于应用虚拟机100A/100B的每个线程;
°在用于应用虚拟机100A/100B的每个线程的分开的寄存器中存储程序计数器的一个或多个PC寄存器112;和
°存储本地方法调用的状态的一个或多个本地方法堆栈114。
在一些实施例中,电子装置260(例如,客户端装置或者服务器***)执行或者操纵应用虚拟机100A/100B,在应用虚拟机100A/100B内执行一个或多个应用/程序290的各个应用/程序。在一些实施例中,存储器266(例如,DRAM)的一部分分配用于应用虚拟机100A/100B以形成其运行时间数据区104。在一些实施例中,应用虚拟机100A/100B加载与各个应用/程序290相关联的类文件292或者库294。
在一个实例中,当电子装置260是客户端装置时,各个应用/程序是在应用虚拟机100A/100B内执行的applet,且应用虚拟机100A/100B是由客户端装置执行或者操纵的客户端应用。在该实例中,各个应用/程序典型地以与用于执行网络浏览器278的处理分开的处理执行。在另一实例中,当电子装置260是服务器***时,各个应用/程序是在应用虚拟机100A/100B内执行的servlet,且应用虚拟机100A/100B是由服务器***执行或者操纵的服务器应用。
上述的标识的元件中的每一个可以存储在一个或多个先前提到的存储器装置中,且对应于用于执行如上所述的功能的一组指令。上述标识的模块或者程序(即,指令集)不需要实现为单独的软件程序、过程或者模块,且因此这些模块的各种子集在各种实施例中可以组合或者以其他方式重新布置。在一些实施例中,存储器266可以存储上述标识的模块和数据结构的子集。此外,存储器266可以存储上面未描述的附加的模块和数据结构。在一些实施例中,存储器266或者存储器266的计算机可读存储介质中存储的程序、模块和数据结构提供用于实现以下引用图6A-6C和/或7A-7B描述的方法中的各个操作的指令。
图3是图示根据某些实施例的存储器分层300的实现的框图。在一些实施例中,包括一个或多个非易失性存储器装置322的永久数据存储区154扩展与应用虚拟机100B对应的对象存储区106。例如,对象在对象存储区106和永久数据存储区154之间移动。
在一些实施例中,电子装置260(例如,客户端装置或者服务器***)执行或者操纵应用虚拟机100B。与正在由应用虚拟机100B运行的应用或者程序相关联的对象又在对象存储区106中被实例化。在一些实施例中,应用虚拟机100B中的迁移引擎(例如,迁移线程124,图1B)基于迁移/赶出处理来选择对象存储区106中的用于迁移的对象。在一些实施例中,为了迁移所选的对象,迁移引擎发送请求(例如,JNI安置调用(put call))到存储器管理器152以将所选的对象从对象存储区106迁移到永久数据存储区154。
在一些实施例中,响应于接收迁移各个对象的请求,存储器管理器152在本地高速缓存250中存储各个对象或者其副本,且随后将各个对象或者其副本写到永久数据存储区154。例如,各个对象或者其副本被根据FIFO、LRU或者其他公知的高速缓存赶出政策从本地高速缓存250赶出并写入到永久数据存储区154。
在一些实施例中,为了检索对象,迁移引擎发送请求(例如,JNI得到调用(getcall))到存储器管理器152以从永久数据存储区154到对象存储区106检索对象。例如,当应用需要或者引用迁移的对象时。在一些实施例中,响应于接收到检索对象的请求,存储器管理器152从永久数据存储区154检索对象,并通过在本地高速缓存250中存储对象或者其副本而使得对象可用。随后,迁移线程124或者存储器管理器152将对象或者其副本写到对象存储区106。
在一些实施例中,永久数据存储区154包括一个或多个非易失性存储器控制器320和一个或多个非易失性存储器装置322。在一些实施例中,一个或多个非易失性存储器装置322包括一个或多个磁盘存储装置、一个或多个光盘存储装置、一个或多个闪存存储器装置或者一个或多个其他非易失性固态存储装置。例如,一个或多个非易失性存储器控制器320处理写入到和从非易失性存储器读取的请求,并监控一个或多个非易失性存储器装置322。在一些实施例中,一个或多个非易失性存储器装置322包括如在这里进一步限定的一个或多个三维(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引用的数据对象的多个条目(entry)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)配置为设置重定向表470中的对应于各个数据对象的迁移标记或者位474,以指示各个数据对象已经迁移到永久数据存储区154。
例如,用于与由数据对象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扫描对象存储区106中的对象以创建对应于各个对象的具有活动引用的已迁移对象的列表520中的条目。在一些实施例中,迁移线程124周期性地扫描对象存储区106中的对象以更新具有活动引用的已迁移对象的列表520中的条目。例如,如果对象存储区106的对象不再引用各个已迁移对象,迁移线程124更新与各个已迁移对象相关联的具有活动引用的已迁移对象的列表520中的条目以反映该改变。在另一实例中,如果各个已迁移对象不再由对象存储区106中的任意对象引用,则迁移线程124从具有活动引用的已迁移对象的列表520删除与各个已迁移对象相关联的条目。
替代地,在一些实施例中,在垃圾收集处理期间,垃圾收集器线程122(图1B)扫描对象存储区106中的对象以标识对象存储区106中的对象到永久数据存储区154中的已迁移对象的引用。在一些实施例中,垃圾收集器线程122基于标识的到永久数据存储区154中的已迁移对象的引用来确定具有活动引用的已迁移对象的列表520。
在一些实施例中,垃圾收集器线程122通过执行已迁移对象表510中的已迁移对象和具有活动引用的已迁移对象的列表520中的活动已迁移对象之间的差别操作来确定要垃圾收集的已迁移对象。在一些实施例中,已迁移对象表510中包括的而不是具有活动引用的已迁移对象的列表520中包括的已迁移对象被包括在用于垃圾收集的已迁移对象的列表530中,该列表530包括与这种对象对应的对象标识符532。在一些实施例中,垃圾收集器线程122发送请求到存储器管理器152以用于垃圾收集或者删除永久数据存储区154中的用于垃圾收集530的已迁移对象的列表上包括的对象。
图6A-6C图示根据某些实施例的管理与应用虚拟机相关联的对象的方法600的流程图表示。在一些实施例中,方法600由正在电子装置上执行的应用虚拟机执行,该电子装置是比如服务器***(例如,应用服务器)或者客户端装置(例如,移动电话、膝上型计算机、台式计算机、平板计算机、可穿戴计算装置或者其他计算装置)的具有一个或多个处理器和存储器的电子装置。在一些实施例中,方法600取决于非瞬时计算机可读存储介质中存储的指令,且由执行或者操纵应用虚拟机的电子装置的一个或多个处理器执行指令。
在一些实施例中,应用虚拟机100B(图1B)由包括一个或多个处理器和存储器的电子装置260(图2B)执行或者操纵。分配存储器266(例如,DRAM)的区域用于由应用虚拟机100B使用。在一些实施例中,分配用于应用虚拟机100B的存储器的区域包括运行时间数据区104(图1B),该运行时间数据区104包括对象存储区106。在一些实施例中,电子装置260与包括存储器管理器152和永久数据存储区154(例如,包括比如闪存存储器装置的一个或多个非易失性存储器(“NVM”)装置)的永久环境150操作地耦合。
应用虚拟机从与应用虚拟机相关联的多个对象之中标识(602)一个或多个可迁移对象的子集,其中多个对象被存储在包括分配用于应用虚拟机的存储器的区域的一部分的对象存储区中。在一些实施例中,由应用虚拟机100B(图1B)实例化的对象存储在对象存储区106中。在一些实施例中,迁移线程124(图1B)从对象存储区106中存储的多个对象之中标识可迁移对象的子集。
在一些实施例中,标识可迁移对象的子集包括(604)根据一个或多个预定义标准从对象存储区中的多个对象中标识对象。在一些实施例中,迁移线程124将可串行化的对象存储区106中的对象标识为可迁移对象。例如,当对象是允许对象存储在外部存储设备中的独立于机器的形式时,对象是可串行化的。在一些实施例中,迁移线程124将属于实现预定接口、比如可迁移接口的类的在对象存储区106中的对象标识为可迁移对象。例如,可迁移接口是用作标记符或者扩展的空接口(即,可迁移接口不包括额外的方法),该标记符或者扩展指示与实现可迁移接口的类相关联的对象是可迁移的。在该实例中,修改应用/程序的源代码以使得某些类实现可迁移接口。在一些实施例中,迁移线程124标识对象存储区106中的具有在启动时传递到应用虚拟机100B的环境变量中包括的一个或多个属性或者与这种环境变量中包括的一个或多个属性相关联的对象,从而对应用或者程序最大限度地透明。例如,属性之一是指定仅至少预定义大小的对象是可迁移的的大小属性。
在一些实施例中,标识可迁移对象的子集包括(606)从与一个或多个指定的类相关联(例如,是一个或多个指定的类中的对象的实例)的对象存储区中的多个对象中标识对象。在一些实施例中,在启动时将标识可迁移的类的环境变量传递到应用虚拟机100B,以对应用或者程序最大限度地透明。例如,比如HashMap类的预定义核心类在启动时被标识为可迁移的。
在一些实施例中,应用虚拟机确定(608)是否满足一个或多个预定条件。在一些实施例中,当对象存储区106包括预定量的未分配或者空闲空间时满足一个或多个条件之一。例如,当对象存储区106不包括空闲空间或者对象存储区106的总大小的25%、50%等是空闲或者未分配的时满足条件。
应用虚拟机从可迁移对象的子集选择(610)各个对象以从对象存储区迁移到永久数据存储区。在一些实施例中,迁移线程124是根据后台迁移/赶出处理来选择用于迁移的各个对象的守护进程线程。
在一些实施例中,应用虚拟机根据满足一个或多个预定条件的确定来选择各个对象。例如,当满足一个或多个预定标准(例如,对象存储区106已满、占据75%,占据50%等)时,迁移线程124选择用于迁移的对象。替代地,在一些实施例中,在一定量时间内没有触及的可迁移对象从对象存储区106迁移出到永久数据存储区154。在一些实施例中,确定为候选的某些对象类的一个或多个对象在空间变为担心之前自动地从对象存储区106迁移到永久数据存储区154。例如,具有很少引用和相对大的对象的特定类被自动地迁移到永久数据存储区154,以为了在对象存储区106中让出位置,用于更频繁地引用的对象。
在一些实施例中,应用虚拟机至少部分地基于预定替换算法选择(612)要迁移的各个对象。在一些实施例中,迁移线程124根据迁移/赶出处理或者替换算法选择用于迁移的各个对象。在一些实施例中,替换算法是多个公知的高速缓存算法或者高速缓存赶出政策、比如FIFO、LRU、时钟替换、随机替换等之一。在一些实施例中,仅当对象被确定为替换算法的牺牲者时将对象迁移到永久数据存储区154。
应用虚拟机使得(614)各个对象被从对象存储区迁移到永久数据存储区。在一些实施例中,迁移线程124通过发送请求(例如,JNI安置调用)到存储器管理器152而使得各个对象被迁移,以将所选的对象从对象存储区106迁移到永久数据存储区154(例如,包括一个或多个非易失性存储器(“NVM”)装置322,图3)。在一些实施例中,包括永久数据存储区154的一个或多个非易失性存储器装置322包括如在这里另外的一个或多个三维(3D)存储器装置。在一些实施例中,3D存储器装置耦接到控制器(例如,一个或多个非易失性存储器控制器320)。
在一些实施例中,作为迁移处理的一部分,应用虚拟机发送(616)请求到与永久数据存储区相关联的存储器管理器以迁移各个对象。在一些实施例中,请求是由存储器管理器152处理的JNI安置调用。在一些实施例中,存储器管理器152包括具有用于处理来自应用虚拟机100B的请求以及用于管理永久数据存储区154中存储的对象的CRUD操作的迁移接口224(图2A)。
在一些实施例中,作为迁移处理的一部分,应用虚拟机使得(618)在永久数据存储区中存储各个对象之前,各个对象被存储在与存储器管理器对应的存储器中,该存储器管理器与永久数据存储区相关联。在一些实施例中,响应于来自迁移线程124的迁移各个对象的请求,存储器管理器152在永久数据存储区154中存储各个对象的副本之前在本地高速缓存250中存储各个对象或者其副本。例如,存储器管理器152根据FIFO、LRU或者其他公知的高速缓存赶出政策,从本地高速缓存250赶出各个对象或者其副本并将其写到永久数据存储区154。
在一些实施例中,作为迁移处理的一部分,应用虚拟机生成(620)对应于各个对象的对象存储区中的存根(stub)。例如,迁移线程124以指示各个对象已经迁移到永久数据存储区154的对象存储区106中的存根来替换各个对象。
在一些实施例中,作为迁移处理的一部分,应用虚拟机设置(622)重定向表中的与各个对象相关联的条目中的迁移位。在一些实施例中,根据各个数据对象要从对象存储区106迁移到永久数据存储区154的确定或者在将各个对象迁移到永久数据存储区154之后,迁移线程124(图1B)配置为设置重定向表470中的对应于各个数据对象的迁移标记或者位474,以指示各个数据对象已经迁移到永久数据存储区154。在图4B中,例如,已经对于与对象标识符464-1对应的数据对象设置了迁移标记或者位474-6,以指示与对象标识符464-1对应的数据对象已经迁移到永久数据存储区154。
在一些实施例中,作为迁移处理的一部分,应用虚拟机以指示各个对象已经迁移的保留值来替换(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中对象的出站(outbound)引用,且已迁移对象可以由对象存储区106中的对象引用或者指向,或者可以引用永久数据存储区154中的其他对象。
在一些实施例中,作为垃圾收集处理的一部分,应用虚拟机(630):确定永久数据存储区中的由对象存储区中的活动对象中的活动引用所引用的一组已迁移对象;相对于已迁移对象的地图(map)比较确定的该组已迁移对象以标识不由对象存储区的活动对象的活动引用所引用的一组已迁移对象;和标记标识的该组已迁移对象用于垃圾收集。在一些实施例中,迁移线程124管理已迁移对象表510(图5)。例如,在使得各个对象迁移到永久数据存储区154之后,迁移线程124创建已迁移对象表510中的对应于各个对象的条目。在一些实施例中,在垃圾收集处理期间,垃圾收集器线程122扫描对象存储区106中的对象以标识对象存储区106中的对象到永久数据存储区154中的已迁移对象的引用。在一些实施例中,垃圾收集器线程122基于标识的到永久数据存储区154中的已迁移对象的引用来确定具有活动引用的已迁移对象的列表520。在一些实施例中,在垃圾收集处理期间,垃圾收集器线程122执行比较具有活动引用的已迁移对象的列表520与已迁移对象表510的差别操作,以标识未由对象存储区106中的活动对象的活动引用所引用的一组已迁移对象。标识的该组已迁移对象被标记用于垃圾收集,并被包括在用于垃圾收集的已迁移对象的列表530中。例如,标识的该组已迁移对象被标记用于在将来某时的垃圾收集。
替代地,在一些实施例中,垃圾收集器线程122延期(defer)永久数据存储区154中已迁移对象的垃圾收集。代替地,存储器管理器152或者其组件(例如,垃圾收集模块244,图2A)与由垃圾收集器线程122关于对象存储区106中的对象执行的垃圾收集处理并行地执行对永久数据存储区154中的已迁移对象的垃圾收集处理。
在一些实施例中,作为垃圾收集处理的一部分,应用虚拟机确定(632)永久数据存储区中的由活动对象的活动引用所引用的一组已迁移对象,该活动对象包括对象存储区中的活动对象和永久数据存储区中的活动对象。在一些实施例中,在垃圾收集处理期间,垃圾收集器线程122确定由对象存储区106和/或永久数据存储区154中的活动对象的活动引用(例如,对还未被垃圾收集的引用)所引用的一组已迁移对象。
在一些实施例中,确定该组已迁移对象包括(634)从永久数据存储区检索对象数据,该对象数据包括由其他活动对象中的活动引用所引用的对象的副本或活动对象的部分。在一些实施例中,垃圾收集器线程122发送请求(例如,JNI得到调用)到存储器管理器152以检索对象数据,该对象数据包括由活动对象引用的永久数据存储区154中的已迁移对象的副本或者永久数据存储区154中的已迁移对象的部分。
在一些实施例中,检索对象数据包括(636)在与对象存储区不同的各自的存储器或者存储器部分中存储对象数据。在一些实施例中,对象数据(例如,已迁移对象的副本或者永久数据存储区154中的已迁移对象的部分)存储在与存储活动的未迁移对象的对象存储区106的部分分开的对象存储区106的一部分中。因而,存在于对象存储区106中的频繁地使用或者“热”的对象不由检索的对象数据置换。
在一些实施例中,确定该组已迁移对象还包括(638)在检索的对象数据中标识对对象存储区中的和/或永久数据存储区中的活动对象的引用。在一些实施例中,在垃圾收集处理期间,垃圾收集器线程122标识检索的对象数据中对对象存储区106和/或永久数据存储区154中的活动对象的引用,并使用该信息来填充具有活动引用的已迁移对象的列表520(图5)。
在一些实施例中,作为垃圾收集处理的一部分,在确定该组已迁移对象(632)之后,应用虚拟机相对于已迁移对象的地图比较(640)确定的该组已迁移对象以标识未由对象存储区中的活动对象中的活动引用所引用的已迁移对象。在一些实施例中,在垃圾收集处理期间,垃圾收集器线程122执行比较具有活动引用的已迁移对象的列表520与已迁移对象表510的差别操作,以标识未由对象存储区106中的活动对象的活动引用所引用的已迁移对象。标识的该组已迁移对象被标记用于垃圾收集,并被包括在用于垃圾收集的已迁移对象的列表530中。例如,标识的该组已迁移对象被标记用于在将来某时的垃圾收集。
在一些实施例中,在应用虚拟机的终止之前,应用虚拟机使得(642)对象存储区中的当前未存储在永久数据存储区中的可迁移对象迁移到永久数据存储区,且在应用虚拟机的终止之后,应用虚拟机的后续实例使得至少已迁移对象的子集从永久数据存储区中检索并存储在应用虚拟机的后续实例的对象存储区中。在一些实施例中,在应用虚拟机100B的终止之前,迁移线程124使得未由迁移/赶出处理选择的可迁移对象迁移到永久数据存储区154。在一些实施例中,存储器管理器152或者其组件(例如,永久模块240,图2A)通过关联已迁移对象与应用或者程序来在应用虚拟机100B的实例之间存留(persist)对象。在一些实施例中,在应用虚拟机100B的后续实例中,迁移线程124发送请求(例如,JNI得到调用)以从应用虚拟机100B的前一实例检索存留的对象并在对象存储区106中存储来自应用虚拟机100B的前一实例的存留的对象。
图7A-7B图示根据某些实施例的管理与应用虚拟机相关联的对象的方法700的流程图表示。在一些实施例中,方法700由正在电子装置上执行的应用虚拟机执行,该电子装置是比如服务器***(例如,应用服务器)或者客户端装置(例如,移动电话、膝上型计算机、台式计算机、平板计算机、可穿戴计算装置或者其他计算装置)的具有一个或多个处理器和存储器的电子装置。在一些实施例中,方法700取决于非瞬时计算机可读存储介质中存储的指令,且由执行或者操纵应用虚拟机的电子装置的一个或多个处理器执行指令。
在一些实施例中,应用虚拟机100B(图1B)由包括一个或多个处理器和存储器的电子装置260(图2B)执行或者操纵。存储器266的区域被分配用于由应用虚拟机100B使用。在一些实施例中,分配用于应用虚拟机100B的存储器的区域包括运行时间数据区104(图1B),该运行时间数据区104包括对象存储区106。在一些实施例中,电子装置260与包括存储器管理器152和永久数据存储区154(例如,包括比如闪存存储器装置的一个或多个非易失性存储器(“NVM”)装置)的永久环境150操作地耦合。
应用虚拟机从与应用虚拟机相关联的多个对象之中标识(702)一个或多个可迁移对象的子集,其中多个对象被存储在包括分配用于应用虚拟机的存储器的区域的一部分的对象存储区中。在一些实施例中,由应用虚拟机100B实例化的对象存储在对象存储区106中。在一些实施例中,迁移线程124从对象存储区106中存储的多个对象之中标识可迁移对象的子集。
在一些实施例中,标识可迁移对象的子集包括(704)根据一个或多个预定义标准从对象存储区中的多个对象中标识对象。在一些实施例中,迁移线程124将可串行化的对象存储区106中的对象标识为可迁移对象。例如,当对象是允许对象存储在外部存储设备中的独立于机器的形式时对象是可串行化的。在一些实施例中,迁移线程124将属于实现预定接口、比如可迁移接口的类的对象存储区106中的对象标识为可迁移对象。例如,可迁移接口是用作标记符或者扩展的空接口(即,可迁移接口不包括额外的方法),该标记符或者扩展指示与实现可迁移接口的类相关联的对象是可迁移的。在该实例中,修改应用/程序的源代码,以使得类实现可迁移接口。在一些实施例中,迁移线程124标识对象存储区106中的与在启动时传递到应用虚拟机100B的环境变量中包括的一个或多个属性相关联的对象,从而对应用或者程序最大限度地透明。例如,属性之一是指定仅至少预定义大小的对象是可迁移的的大小属性。
在一些实施例中,标识可迁移对象的子集包括(706)从对象存储区中的与一个或多个指定的类相关联的多个对象中标识对象。在一些实施例中,在启动时将标识可迁移的类的环境变量传递到应用虚拟机100B,以对应用或者程序最大限度地透明。例如,比如HashMap类的预定义核心类在启动时标识为可迁移的。
应用虚拟机检测(708)对可迁移对象的子集中的第一对象的修改(或者创建)。在一些实施例中,根据写通(write-through)方法,迁移线程124检测对对象存储区106中的第一对象的修改(或者创建)。
响应于检测该修改,应用虚拟机使得(710)修改(或者创建)的第一对象迁移到永久数据存储区。在一些实施例中,根据写通方法,迁移线程124使得修改(或者创建)的第一对象或者其副本迁移或者写入到永久数据存储区154。但是,在一些实施例中,迁移线程不释放分配用于对象存储区106中的第一对象的空间,直到由替换算法选择第一对象为止。例如,迁移线程124发送请求(例如,JNI安置调用)到存储器管理器152以将修改的第一对象迁移到永久数据存储区154。
在一些实施例中,应用虚拟机确定(712)是否满足一个或多个预定条件。在一些实施例中,当对象存储区106包括预定量的未分配或者空闲空间时满足一个或多个条件之一。例如,当对象存储区106不包括空闲空间或者对象存储区106的总大小的25%、50%等是空闲或者未分配的时满足条件。
应用虚拟机从可迁移对象的子集选择(714)第二对象以从对象存储区迁移到永久数据存储区。在一些实施例中,迁移线程124是根据后台迁移/赶出处理选择用于迁移的各个对象的守护进程线程。
在一些实施例中,应用虚拟机根据满足一个或多个预定条件的确定选择第二对象。例如,当满足一个或多个预定标准(例如,对象存储区106已满、占据75%,占据50%等)时,迁移线程124选择用于迁移的第二对象。
在一些实施例中,应用虚拟机至少部分地基于预定替换算法选择(716)要迁移的第二对象。在一些实施例中,迁移线程124根据迁移/赶出处理或者替换算法选择用于迁移的各个对象。在一些实施例中,替换算法是多个公知的高速缓存算法或者高速缓存赶出政策、比如FIFO、LRU、时钟替换、随机替换等之一。在一些实施例中,仅当对象被确定为替换算法的牺牲者时将对象迁移到永久数据存储区154。
应用虚拟机确定(718)所选的第二对象是否是第一对象。在一些实施例中,迁移线程124确定所选的第二对象是否是在步骤710中已经迁移或者写入到永久数据存储区154的修改(或者创建)的第一对象。
根据所选的第二对象不是修改(或者创建)的第一对象的确定,应用虚拟机使得(720)第二对象从对象存储区迁移到永久数据存储区。在一些实施例中,迁移线程124通过发送请求(例如,JNI安置调用)到存储器管理器152以将所选的对象从对象存储区106迁移到永久数据存储区154,而使得各个对象被迁移。
根据所选的第二对象是修改(或者创建)的第一对象的确定,应用虚拟机放弃(722)第二对象的迁移。在一些实施例中,当所选的第二对象是修改(或者创建)的第一对象时,因为在步骤710中修改的第一对象已经迁移或者写入到永久数据存储区154,迁移线程124放弃所选的第二对象的迁移。此外,在一些实施例中,迁移线程125释放分配给对象存储区106中的第一对象的空间。例如,应用虚拟机100B当其发生时将每个修改写出到对象。因而,在该实例中,当这种修改的对象被选为牺牲者时,因为用于永久数据存储区154中修改的对象的值是当前的,因此修改的对象不需要被写入到永久数据存储区154。
在某些实现中,相对于上面描述的任何方法,永久数据存储区154包括单个非易失性存储器(“NVM”)装置(例如闪存存储器装置),同时在其他实现中,永久数据存储区154包括多个NVM装置(例如,闪存存储器装置)。在某些实现中,相对于上面描述的任何方法,永久数据存储区154包括存储控制器(例如,一个或多个NVM控制器320,图3)和存储介质(例如,一个或多个NVM装置322,图3)。
半导体存储器装置包括易失性存储器装置,比如动态随机存取存储器(“DRAM”)或者静态随机存取存储器(“SRAM”)装置,非易失性存储器装置,比如电阻性随机存取存储器(“ReRAM”,电可擦可编程只读存储器(“EEPROM”),闪存存储器(也可以考虑为EEPROM的子集),铁电随机存取存储器(“FRAM”)和磁阻随机存取存储器(“MRAM”),及能够存储信息的其他半导体元件。每个类型的存储器装置可以具有不同配置。例如,闪存存储器装置可以配置为NAND或者NOR配置。
存储器装置可以以任何组合由无源和/或有源元件形成。通过非限制实例的方式,无源半导体存储器元件包括ReRAM装置元件,其在一些实施例中包括电阻率开关存储元件,比如反熔丝,相变材料等,且可选地包括导流元件,比如二极管等。另外,通过非限制实例的方式,有源半导体存储器元件包括EEPROM和闪存存储器装置元件,其在一些实施例中包括包含电荷存储区域,比如浮置栅极,导电纳米颗粒或者电荷存储介电材料的元件。
多个存储器元件可以配置为使得它们串联连接或者使得每个元件可单独地存取。通过非限制实例的方式,NAND配置的闪存存储器装置(NAND存储器)典型地包括串联连接的存储器元件。NAND存储器阵列可以配置为使得阵列由多串存储器组成,其中存储器串由共享单个位线和作为整体存取的多个存储器元件组成。替代地,存储器元件可以配置为使得每个元件可单独地存取(例如,NOR存储器阵列)。NAND和NOR存储器配置是示例性的,且可以以别的方式配置存储器元件。
位于基底(substrate)内和/或基底上的半导体存储器元件可以以二维或者三维空间布置,比如二维存储器结构或者三维存储器结构。
在二维存储器结构中,在单个平面或者单个存储器装置级布置半导体存储器元件。典型地,在二维存储器结构中,存储器元件以实质上平行于支撑存储器元件的基底的主要表面延伸的平面(例如,以x-z方向平面)布置。该基底可以是其上或者其中形成存储器元件的层的晶片,或者其可以是在形成存储器元件之后附于存储器元件的载体基底。作为非限制实例,基底可以包括比如硅的半导体。
存储器元件可以以有序阵列中的单一存储器装置级布置,比如以多个行和/或列。但是,可以以不规则或者非正交的配置布置存储器元件。存储器元件每个可以具有两个或更多电极或者接触线,比如位线和字线。
布置三维存储器阵列以使得存储器元件占据多个平面或者多个存储器装置级,由此形成三维空间中(即,以x、y和z方向,其中y方向实质上垂直,且x和z方向实质上平行于基底的主表面)的结构。
作为非限制实例,三维存储器结构可以垂直地布置为多个二维存储器装置级的堆栈。作为另一非限制实例,三维存储器阵列可以布置为多个垂直列(例如,实质上垂直于基底的主要表面,即,以y方向延伸的列),其中每个列具有每个列中的多个存储器元件。列可以以双向配置布置(例如,在x-z平面中),导致具有在多个垂直地堆叠的存储器平面上的元件的存储器元件的三维布置。三维空间中的存储器元件的其他配置也可以构成三维存储器阵列。
通过非限制实例的方式,在三维NAND存储器阵列中,存储器元件可以耦接在一起以形成单个级(例如,x-z)存储器装置级内的NAND串。替代地,存储器元件可以耦接在一起以形成跨越多个水平存储器装置级两端的垂直NAND串。可以设想其他三维配置,其中,某些NAND串包括单个存储器级的存储器元件,而其他串包括跨过多个存储器级的存储器元件。三维存储器阵列也可以以NOR配置和以ReRAM配置设计。
典型地,在单片三维存储器阵列中,在单个基底之上形成一个或多个存储器装置级。可选地,单片三维存储器阵列也可以具有至少部分地在单个基底内的一个或多个存储器层。作为非限制实例,基底可以包括比如硅的半导体。在单片三维阵列中,构成阵列的每个存储器装置级的层典型地在阵列的下方存储器装置级的层上形成。但是,单片三维存储器阵列的相邻存储器装置级的层可以共享或者具有在存储器装置级之间的介于其间的层。
而且,可以分开地形成二维阵列且然后封装在一起以形成具有多层存储器的非单片存储器装置。例如,可以通过在分开的基底上形成存储器级且然后在彼此之上堆叠存储器级而构造非单片堆叠存储器。该基底在堆叠之前可以变薄或者从存储器装置级去除,但是当在分开的基底之上最初形成存储器装置级时,产生的存储器阵列不是单片三维存储器阵列。另外,多个二维存储器阵列或者三维存储器阵列(单片或者非单片)可以在分开的芯片上形成且然后封装在一起以形式堆叠芯片的存储器装置。
典型地对于存储器元件的操作和与存储器元件的通信需要关联的电路。作为非限定实例,存储器装置可以具有用于控制和驱动存储器元件以实现比如编程和读取的功能的电路。该关联的电路可以在与存储器元件相同的基底上和/或在分开的基底上。例如,用于存储器读-写操作的控制器可以位于分开的控制器芯片上和/或与存储器元件相同的基底上。
术语“三维存储器装置”(或者3D存储器装置)在这里定义为指具有多个存储器层或者存储器元件的多级(例如,有时称作多个存储器装置级)的存储器装置,包括以下的任意:具有单片或者非单片3D存储器阵列的存储器装置,其某些非限定实例在上面描述了;或者封装在一起以形成堆叠芯片的存储器装置的两个或更多2D和/或3D存储器装置,其某些非限定实例在上面描述了。
本领域技术人员将认识到本发明不限于描述的二维和三维示例性结构而是覆盖如在这里描述和本领域技术人员理解的本发明的精神和保护范围内的所有相关的存储器结构。
将理解,虽然术语“第一”、“第二”等在这里可以用于描述各种元件,这些元件不应该由这些术语限制。这些术语仅用于区分一个元件与另一元件。例如,第一对象可以被称为第二对象,且类似地,第二对象可以被称为第一对象,而不改变描述的含义,只要一致地重命名所有“第一对象”的出现和一致地重命名所有"第二对象"的出现。第一对象和第二对象都是对象,但是它们不是同一对象。
在这里使用的术语仅用于描述特定的实施例的目的而不意在限制权利要求。如在实施例和所附权利要求的描述中使用的,单数形式“一”、“一个”和“该”意在也包括复数形式,除非上下文清楚地指示例外。还将理解如在此使用的术语“和/或”是指和包括一个或多个关联的列出的项目的任何和全部可能的组合。另外将理解术语“包括”和/或“包含”当在该说明书中使用时指定所述的特征、整体、步骤、操作、元件和/或组件的存在,而不排除一个或多个其它特征、整体、步骤、操作、元件、组件和/或它们的组的存在或者附加。
如在此使用的,短语“A、B和C的至少一个”被解释为需要一个或多个列出的项目,且该短语关于单独A的单个实例,单独B的单个实例或者单独C的单个实例,同时也包括列出的项目的组合,比如“一个或多个A和一个或多个B而没有任意一个C”,等等。
如在此使用的,术语“如果”取决于上下文,可以解释为指“当...时”或者“在...时”或者“响应于确定”或者“根据确定”或者“响应于检测”,所述的条件先例是真的。类似地,短语“如果确定[所述的条件先例是真的]”或者“如果[所述的条件先例是真的]”或者“当[所述的条件先例是真的]时”取决于上下文,可以被解释为指“在确定...时”或者“响应于确定”或者“根据确定”或者“在检测...时”或者“响应于检测”所述的条件先例是真的。
为了说明的目的,已经引用特定实施例描述了前述描述。但是,以上的说明性的讨论不意在是详尽的或者限制权利要求到公开的精确形式。考虑上述教导许多修改和变化是可能的。选择和描述实施例以最好地解释操作的原理和实际应用,以由此使能本领域技术人员。
Claims (26)
1.一种管理与由具有一个或多个处理器和存储器的电子装置执行的应用虚拟机相关联的对象的方法,所述方法包括:
从与应用虚拟机相关联的多个对象中标识可迁移对象的子集,其中所述可迁移对象的子集包括一个或多个对象,且所述多个对象被存储在包括分配用于应用虚拟机的存储器的一部分的对象存储区中;
从可迁移对象的子集中选择要从对象存储区迁移到操作地耦接到电子装置的永久数据存储区的各个对象,其中,所述永久数据存储区不同于与所述电子装置相关联的存储器;和
使得各个对象从对象存储区迁移到永久数据存储区。
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中的任意一个所述的方法,其中,使得各个对象迁移包括用指示各个对象已经迁移的保留值替换对各个对象的引用。
11.如权利要求1-10中的任意一个所述的方法,其中,在迁移到永久数据存储区之后,各个对象不引用对象存储区中的任意对象。
12.如权利要求11所述的方法,进一步包括:
确定永久数据存储区中的由对象存储区中的活动对象中的活动引用所引用的一组已迁移对象;
比较所确定的该组已迁移对象与已迁移对象的地图以标识不由对象存储区中的活动对象中的活动引用所引用的一组已迁移对象;和
标记标识的该组已迁移对象用于垃圾收集。
13.如权利要求1-10中的任意一个所述的方法,进一步包括:
确定永久数据存储区中的由活动对象的活动引用所引用的一组已迁移对象,所述活动对象包括对象存储区中的活动对象和永久数据存储区中的活动对象;
比较所确定的该组已迁移对象与已迁移对象的地图以标识不由对象存储区中的活动对象中的活动引用所引用的已迁移对象;和
标记标识的该组已迁移对象用于垃圾收集;
其中,确定该组已迁移对象包括:
从永久数据存储区检索对象数据,所述对象数据包括由其他活动对象中的活动引用所引用的对象的副本或者活动对象的部分;和
在检索的对象数据中标识对对象存储区中的和/或永久数据存储区中的活动对象的引用。
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中的任意一个所述的方法。
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 |
---|---|
CN106104477A true CN106104477A (zh) | 2016-11-09 |
Family
ID=54142204
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580003482.9A Pending CN106104477A (zh) | 2014-03-24 | 2015-03-02 | 用于扩展应用虚拟机的对象存储区的方法和*** |
Country Status (4)
Country | Link |
---|---|
US (1) | US20150268989A1 (zh) |
KR (1) | KR20160135698A (zh) |
CN (1) | CN106104477A (zh) |
WO (1) | WO2015148058A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112068928A (zh) * | 2020-08-12 | 2020-12-11 | 福建升腾资讯有限公司 | 一种基于重定向的虚拟机数据存储方法及*** |
CN112534409A (zh) * | 2018-07-27 | 2021-03-19 | 三星电子株式会社 | 电子设备及其操作方法 |
Families Citing this family (8)
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 | 韩永刚 | 一种类神经节点信息处理方法及智能设备 |
US11240109B2 (en) * | 2019-10-31 | 2022-02-01 | Dell Products, L.P. | Systems and methods for workspace continuity and remediation |
US20230229658A1 (en) * | 2022-01-14 | 2023-07-20 | Sentinel Labs Israel Ltd. | Systems and methods for data management and query optimization |
Citations (4)
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 |
CN101577720A (zh) * | 2008-05-05 | 2009-11-11 | 索尼株式会社 | 用于有效执行数据恢复/迁移过程的***和方法 |
CN102037452A (zh) * | 2008-05-23 | 2011-04-27 | 威睿公司 | 用于虚拟计算机***的分布式虚拟交换机 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8386731B2 (en) * | 2009-09-14 | 2013-02-26 | Vmware, Inc. | Method and system for optimizing live migration of persistent data of virtual machine using disk I/O heuristics |
US8725695B2 (en) * | 2011-10-28 | 2014-05-13 | Hitachi, Ltd. | Storage system and object management method |
-
2014
- 2014-07-23 US US14/339,072 patent/US20150268989A1/en not_active Abandoned
-
2015
- 2015-03-02 WO PCT/US2015/018252 patent/WO2015148058A1/en active Application Filing
- 2015-03-02 CN CN201580003482.9A patent/CN106104477A/zh active Pending
- 2015-03-02 KR KR1020167017245A patent/KR20160135698A/ko unknown
Patent Citations (4)
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 |
CN101577720A (zh) * | 2008-05-05 | 2009-11-11 | 索尼株式会社 | 用于有效执行数据恢复/迁移过程的***和方法 |
CN102037452A (zh) * | 2008-05-23 | 2011-04-27 | 威睿公司 | 用于虚拟计算机***的分布式虚拟交换机 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112534409A (zh) * | 2018-07-27 | 2021-03-19 | 三星电子株式会社 | 电子设备及其操作方法 |
CN112068928A (zh) * | 2020-08-12 | 2020-12-11 | 福建升腾资讯有限公司 | 一种基于重定向的虚拟机数据存储方法及*** |
CN112068928B (zh) * | 2020-08-12 | 2023-10-20 | 福建升腾资讯有限公司 | 一种基于重定向的虚拟机数据存储方法及*** |
Also Published As
Publication number | Publication date |
---|---|
US20150268989A1 (en) | 2015-09-24 |
KR20160135698A (ko) | 2016-11-28 |
WO2015148058A1 (en) | 2015-10-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106104477A (zh) | 用于扩展应用虚拟机的对象存储区的方法和*** | |
KR102042904B1 (ko) | 비차단 제어 업데이트 동작을 수행하도록 구성되는 데이터 저장 디바이스 | |
US9594524B2 (en) | System and method for distributed computing in non-volatile memory | |
CN108475232A (zh) | 使用xcopy和多逻辑条带的优化的基于主机的垃圾收集策略的高效实现方式 | |
CN104487953B (zh) | 用于层次型存储器***的存储器管理 | |
CN109977111A (zh) | 采用基于散列和基于树的键-值数据结构的数据管理*** | |
CN108572796A (zh) | 具有异构nvm类型的ssd | |
CN103218312A (zh) | 文件访问方法及*** | |
CN106681842A (zh) | 一种多进程***中共享内存的管理方法及装置 | |
CN103914398B (zh) | 用以管理具有实体地址空间的存储器使用率的方法及装置 | |
CN103577345A (zh) | 提高由多个***共享的存储高速缓存灵活性的方法和结构 | |
CN102160039A (zh) | 闪存存储器件中的动态存储器分配引起的自我逐出的避免 | |
CN108470006A (zh) | 用于进行非阻塞控制同步操作的技术 | |
CN103455429A (zh) | 对存储器进行群组式耗损平均的方法及设备 | |
CN115421661A (zh) | 存储器***及其控制方法 | |
KR20200121372A (ko) | 하이브리드 메모리 시스템 | |
CN108959113A (zh) | 用于闪存感知堆存储器管理的方法和*** | |
CN102609305A (zh) | 一种服务器集群中内存共享方法 | |
KR101061483B1 (ko) | 메모리 회로 및 메모리 회로의 엑세스 방법, 메모리 관리 시스템 및 메모리 관리방법 | |
US11836087B2 (en) | Per-process re-configurable caches | |
CN104995611A (zh) | 用于存取存储器的***及方法 | |
CN112148226A (zh) | 一种数据存储方法及相关装置 | |
EP4064022A1 (en) | Cooperative storage architecture | |
US20140289739A1 (en) | Allocating and sharing a data object among program instances | |
KR20200117032A (ko) | 하이브리드 메모리 시스템 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20161109 |
|
WD01 | Invention patent application deemed withdrawn after publication |