CN104412240B - 用于存储器管理的系统和方法 - Google Patents
用于存储器管理的系统和方法 Download PDFInfo
- Publication number
- CN104412240B CN104412240B CN201380017284.9A CN201380017284A CN104412240B CN 104412240 B CN104412240 B CN 104412240B CN 201380017284 A CN201380017284 A CN 201380017284A CN 104412240 B CN104412240 B CN 104412240B
- Authority
- CN
- China
- Prior art keywords
- thread
- area
- naivety
- heap
- private
- 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.)
- Expired - Fee Related
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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- 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
- 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
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5011—Pool
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
- Stored Programmes (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
用于在web应用的并行处理期间共享存储器的自动存储器管理的系统和方法。该系统包括计算系统,该计算系统被配置成允许在网页浏览器内执行的web应用的并行计算。该计算系统包括共享存储器,其具有被分发给web应用的处理功能的至少第一线程和至少一个衍生线程的块集合。存储器被划分为幼稚堆、成熟堆和具有多个私用幼稚区的数据库,其中第一线程可访问幼稚堆和成熟堆,并且至少一个衍生线程可访问多个私用幼稚区中关联的一个。在web应用的并行计算期间,共享存储器的管理包括多个私用幼稚区中的至少每一个的废物收集。
Description
技术领域
本公开涉及存储器管理,并且,更具体地,涉及用于在浏览器内web应用的并行处理期间共享存储器的自动存储器管理的系统和方法。
背景技术
并行处理(本文也称为“并行计算”)是一种计算形式,其中,多个计算同时执行,基于大问题常常能够被分为随后同时(“并行”)解决的更小问题这一原理进行操作。随着计算机的功率消耗(和因此,热量生成)已经成为近年来的关注,并行计算已经成为计算机架构中的主导范式,主要以现代处理器的形式,譬如多核处理器。如一般所理解的那样,多核处理器是具有读取和执行程序指令的两个或更多独立中央处理单元(CPU)核的单个计算部件。多个核可以每周期从多个指令流发出多个指令,提高了用于服从并行计算的程序的总体速度。据此,多核处理器上的并行处理一般可以包括同时使用多于一个核来执行程序和/或多个计算线程。
并行处理一般已经被应用于原生应用(例如,本地安装的应用,其被设计成在其正在被运行于其中的计算机环境(机器语言和OS)中运行)。对用户来说在网页浏览器内访问web应用和与web应用一起工作已经变得越来越普遍。web应用一般必须发挥所有可用的计算资源的优势,以提供可能达到的最佳用户体验。然而,由于缺乏合适的编程模型,web应用未必充分利用并行客户端硬件。ECMAScript,由Ecma Intemational标准化的脚本语言,是以若干种众所周知的语言的形式广泛用于web上客户端侧脚本设计的脚本语言,譬如和例如,是用于在网页浏览器中操控HTML文档且被采用在多种web应用中的流行脚本语言,由于缺乏合适的编程模型而一般受限于顺序执行。由此,数据并行性在web应用中一般尚未可实现。
附图说明
要求保护的主题的特征和优势将从与其一致的实施例的下列详细描述中变得显而易见,该描述应当参考附图加以考虑,在附图中:
图1是示出了与本公开的各种实施例一致的用于在浏览器内web应用的并行计算期间管理共享存储器的系统的一个实施例的方框图;
图2是更加详细地示出了图1的系统的客户端设备的一个实施例的方框图;
图3是示出了与本公开的各种实施例一致的存储器管理模块和共享存储器的一个实施例的方框图:以及
图4是依照本公开的至少一个实施例的示例操作的流程图。
尽管以下的具体实施方式将在对示出的实施例进行参考的情况下进行,但其很多替代物、修改和变形对所属领域技术人员来说将是显而易见的。
具体实施方式
作为概览,本公开总体涉及用于浏览器内web应用的并行计算的自动存储器管理的系统和方法。与本公开一致的系统和方法可以与确定性并行编程模型结合使用,该确定性并行编程模型被配置成实现用于浏览器内web应用的数据并行性。确定性并行编程模型可以被配置成通过在熟悉的JavaScript编程范式的界限内发挥多核处理器的向量指令和CPU核的优势来实现用于浏览器内web应用的数据并行性。更特别地,确定性并行编程模型可以被配置成采用在运行时被转换为低层级硬件抽象层的确定性数据并行构造来扩展JavaScript,以实现与顺序执行JavaScript相比速度的实质增加。据此,采用确定性并行编程模型扩展JavaScript可以允许更加计算密集的应用(譬如例如照片编辑和视频游戏)在网页浏览器中时被访问,这对于生产率程序员(尤其是以JavaScript工作的web应用程序员)来说可能是有用的。
在多核处理器上的应用的并行处理期间,两个或更多CPU核均协力地执行一个或多个进程(程序或指令集),其中进程可以执行一个或多个线程,每个线程代表经过应用的代码的单个执行路径。应用的线程中的两个或更多可能能够同时执行,其中每个CPU核运行特定线程。对应用的线程来说,在并发执行期间共享资源(譬如例如存储器)是常见的。并发执行可以指代应用的两个或更多线程的同时执行。共享存储器可以是传递数据的高效手段。
作为如前所描述的那样采用确定性并行编程模型扩展JavaScript的结果,JavaScript可以采用共享存储器并发构造。与共享存储器相关的一个挑战是:确保不同计算执行之间的交互或通信的正确定序以及协调对在执行之间共享的存储器的访问。在一些公共软件开发模型下,软件开发商花费大量时间在应用内以别和试图正确地同步并行线程。例如,开发商可以明确地使用锁、旗语、屏障或其它同步机制来控制对共享存储器的访问。一般地,当线程访问共享存储器时,同步机制通过挂起其它线程来防止那些其它线程访问共享存储器,直至资源变为可用。
如前所述,用于扩展JavaScript的一些确定性并行编程模型允许在确定性运行时执行环境中对浏览器内web应用的执行,由此采用共享存储器构造解决同步问题。术语“确定性”一般指代预测或指定程序或环境的行为的能力。浏览器内web应用的确定性多重处理和执行可以减轻web应用程序员上的必须同步对共享存储器的线程访问的负担。然而,为了确保确定性多重处理,由于一些确定性并行编程模型向JavaScript添加只读数据结构,因此无论何时线程正在并发运行,对共享存储器的访问都受限且局限于只读。
用于扩展JavaScript的当前确定性并行编程模型可能在共享存储器的管理上施加压力。例如,在计算系统中,数据可以以被分配有共享存储器一部分中的空间的“对象”的形式存储。在很多计算机环境中,在程序或应用的执行期间,动态地(即,在根据需要的基础上)创建或“分配”对象。此外,考虑到计算机中可用的存储器的量是有限的,还提供了用于移除或“解除分配”未使用的对象的某种机制,典型地通过使用特定程序指令或通过被称为废物收集的自动化处理。
然而,动态存储器管理的主要缺点是与分配和解除分配对象这两者相关的附加“开销”。分配和解除分配对象均需要计算机执行可处于在程序或应用的执行期间执行的实际高产操作之外的某些操作,由此延迟了高产操作的性能。此外,动态存储器管理还可能导致“不可变的”对象(例如,在其被创建之后不能修改的对象)。大量的冗余的“不可变的”对象的创建和随后的解除分配减小了可用的存储并引入了处理开销,这两者都降低了性能。由此,采用当前确定性并行编程模型,在通过具有在副本之间需要极少或不需要相干性的不可变的对象而使得可用的优化与由于不能变化和重用已经分配的对象而在存储器管理上施加的压力之间可能存在冲突。
与本公开一致的系统和方法被配置成提供共享存储器的管理,以在浏览器内web应用的并行处理期间在客户端设备的计算系统上使用。系统包括存储器管理模块,其被配置成监测浏览器内web应用线程执行,并管理被分配和存储在关于线程执行的共享存储器内的对象的生命周期。共享存储器堆可以被划分为包括幼稚堆和成熟堆(例如,全局区域)以及具有多个私用幼稚区(nursery)(例如,局部区域)的数据库。在web应用的一个或多个衍生线程的执行期间,每一个衍生线程均被提供了对在其中分配和操控对象的相应的空的私用幼稚区的访问。
在衍生线程用完相关私用幼稚区中的可用空间且需要附加存储器空间的情况下,衍生线程可以获得对具有一部分未使用的可用的存储器空间的单独私用幼稚区(例如,部分使用的私用幼稚区)的访问,以便完成分配需求。在部分使用的私用幼稚区不可用的情况下,衍生线程仍然休眠,至少直到另一个衍生线程完成执行并提供部分使用的私用幼稚区,或直到所有未完成衍生线程在分配时休眠。由于系统内的存储器空间可能是有限的,因此对部分使用的存储器的利用提供了更高效且更不浪费的线程执行手段。
存储器管理模块进一步包括废物收集器模块,其被配置成在一个或多个废物收集周期期间提供共享存储器的全局和局部区域的废物收集。一个或多个废物收集周期基于安全点方案,其中每个衍生线程可以到达由衍生线程的执行状态(例如,正在运行,休眠,完成)确定的安全点(例如,衍生线程执行中废物收集是安全的点)。根据安全点方案,如果衍生线程正在运行,那么系统正在进步,并且衍生线程没有到达安全点。如果衍生线程休眠或已经完成执行,那么衍生线程已经到达安全点。为了使废物收集周期发起,所有的衍生线程必须均到达安全点(例如,每个衍生线程必须是休眠的或完成的),并且如果衍生线程中的一个正在运行,那么废物收集不会发生。安全点方案允许安全点的最小集个以允许废物收集,并提供了废物收集总体上不会与系统的进步发生干扰。
转至图1,总体上示出了与本公开一致的系统10的一个实施例。系统10包括客户端设备10,其被配置成经由网络16与媒体源14通信。客户端设备12可以包括但不限于个人计算机(PC),上网本,平板,智能电话,便携式数字助理(PDA),便携式媒体播放器(PMP),和移动电话,和其它计算设备。
客户端没备12可以被配置成经由网络16访问由媒体源14提供的内容。网络16可以是承载数据的任意网络。可用作网络16的合适网络的非限制性示例包括互联网,专用网,虚拟专用网络(VPN),公共交换电话网络(PSTN),综合服务数字网络(ISDN),数字订户链路网络(DSL),无线数据网络(例如,蜂窝电话网络),能够承载数据的其它网络,和它们的组合。在一些实施例中,从互联网,至少一个无线网络,至少一个蜂窝电话网络,和安们的组合中选取网络16。非限制地,网络16优选地为互联网。媒体源14可以包括但不限于公共和专用网站,社交网络网站,音频和/或视频网站,它们的组合,和可提供在客户端设备12上可执行的内容(譬如例如web应用)的类似物。
现在转至图2,总体上更加详细地示出了图1的系统10的框图。如图所示,客户端设备12可以包括计算系统18。计算系统18可以包括多核处理器20,操作系统22,存储器24,存储器管理模块26,网络接口28,网页浏览器30,编程语言引擎(例如,JavaScript引擎32),和确定性并行编程模块34。
多核处理器20可以被配置成处理指令,执行计算和管理经过计算系统18的信息流。如一般所理解的那样,多核处理器20可以包括被配置成读取和执行程序指令的多个中央处理单元(CPU)核。操作系统22可以被配置成在多核处理器20上运行和使用存储器24存储数据。操作系统22可以被配置成管理资源(譬如,存储在存储器24中的数据),调度任务,和处理存储器管理模块28的操作,如在本文中更加详细地描述的那样。此外,操作系统22还可以被配置成以所属领域普通技术人员众所周知的方式管理计算系统18的其它任务。与本公开一致的系统可以包括任意已知的操作系统22。
如可以理解的那样,操作系统22可以包括被配置成执行调度的任意已知的硬件和/或软件。例如,在一个实施例中,操作系统22可以包括调度器(未示出)。如一般所理解的那样,调度是借以向线程、进程或数据流给予对系统资源(例如,处理器时间,通信带宽)的访问的方法。操作系统22中的进程(例如,应用)可以包括一个或多个线程,每一个线程均代表经过应用的代码的单个执行路径。调度器可以包括下述指令和/或逻辑,其给多核处理器20的相应CPU核指派线程并调度线程以在相应的CPU核上执行。
在应用的一个或多个线程的执行期间,存储器24可以由存储器管理模块26管理。更特别地,存储器管理模块26可以被配置成监测线程执行和管理被分配和存储在存储器24内的对象的生命周期,从而通过移除未使用的对象来释放至关重要的存储器空间,如在本文中更加详细地描述的那样。
网络接口26可以被配置成允许客户端设备12经由网络16与媒体源14通信和交换信息。例如,在一个实施例中,用户可以从媒体源14访问web应用,以在客户端设备12上执行。web应用一般可以指代以与浏览器呈现的标记语言(譬如HTML)结合的浏览器支持的语言(譬如,例如,JavaScript)编码的计算机软件应用。web应用可以是基于浏览器的,使得web应用可以依赖于网页浏览器来使应用可执行。应当注意,与本公开一致的系统和方法并不限于与JavaScript编程语言一起使用,并且与本公开一致的其它实施例可以用其它已知的计算机编程语言实现。
网页浏览器30被配置成使客户端设备12的用户能够访问、检索和查看互联网上的文档和其它资源。如一般所理解的那样,网页浏览器30可以包括用于从媒体源14(特别是万维网)检索、呈现和遍历信息资源的软件应用。在示出的实施例中,网页浏览器30被配置成执行来自媒体源14的web应用和允许用户访问关于web应用的内容(例如,文本,图像,和其它信息)并与关于web应用的内容交互。在一个实施例中,网页浏览器可以包括由MozillaCorporation提供的应当注意,网页浏览器可以包括任意其它的已知网页浏览器,其包括但不限于Internet和
JavaScript引擎32被配置成在网页浏览器30的运行时系统内解释和执行web应用代码(例如,web应用以JavaScript编码)。如一般所理解的那样,JavaScript引擎32可以包括被配置成解释和执行JavaScript的计算机软件。web应用代码的执行可以发生在网页浏览器30或某种其它客户端侧程序内。JavaScript引擎32可以包括与网页浏览器30兼容的任意已知JavaScript引擎。例如,在一个实施例中,JavaScript引擎32可以与Firefox网页浏览器30的一些或全部版本兼容。
确定性并行编程模块34可以被配置成实现用于浏览器内web应用的数据并行性。更特别地,确定性并行编程模块34可以被配置成采用在运行时被转换为低层级硬件抽象层的确定性数据并行构造扩展JavaScript。确定性并行编程模块34被配置成连同JavaScript引擎32一起操作,以便通过发挥多核处理器20的至少多个CPU核和/或向量指令的优势来允许浏览器内web应用的并行处理。由此,确定性并行编程模块34可以被配置成修改JavaScript引擎32,其中,在运行时,经修改的JavaScript引擎32被配置成自动地发现和适配于可用的任何并行处理资源。例如,经修改的JavaScript引擎32可以被配置成使用CPU的向量算术指令,多个CPU核,每核多个线程和/或系统的多个处理器。
转至图3,总体上示出了与本公开的各种实施例一致的存储器管理模块26和存储器24的一个实施例的框图。如本文先前所描述的那样,操作系统22可以包括调度器,其被配置成给多核处理器20的相应CPU核指派线程并调度线程以在相应的CPU核上执行。据此,与本公开的一个实施例一致,浏览器内web应用的一个或多个处理功能可以被分成多个线程,其中每个线程可以由调度器调度以在多核处理器20的相应CPU核上执行。
web应用一般可以以单个线程(例如,主线程36)开始,该单个线程可以运行web应用的主功能。web应用可以衍生附加线程(例如,衍生线程38(1)-38(n)),每一个附加线程均执行特定功能的代码。衍生线程38(1)-38(n)中的每一个变为web应用的进程空间内部的独立实体。如所属领域技术人员一般所理解的那样,每个线程可以包括执行堆栈(未示出),并可以针对运行时由内核(未示出)单独调度。如先前所描述的那样,采用确定性并行编程模块34修改JavaScript引擎32实现了web应用的数据并行性。据此,web应用的一些线程均可能能够在单独的相关CPU核上并发地执行。
在示出的实施例中,线程(主线程36和衍生线程38(1)-38(n))共享存储器24。更特别地,存储器的块集合或邻接区域可以被分发给线程以用于执行。如图所示,存储器24的堆空间可以被划分为至少幼稚堆40和成熟堆42。幼稚堆40可以包括存储器的小区域,其中,新对象被创建(例如,分配)且被存储达相对短的时间段(例如,数秒)。通常,存储在幼稚堆40中的对象一般具有低寿命预期。成熟堆42可以包括相对大的存储器区域,其中,对象可以生存直到不再有用。存储器24可以进一步包括衍生线程幼稚区数据库44,其具有存储在其内的私用幼稚区46(1)-46(n)。通常,在执行期间,有区别的主线程36可以在幼稚堆40中分配一个或多个对象,并写入对存储在幼稚堆40以及成熟堆42中的一个或多个对象的参考。衍生线程38(1)-38(n)中的每一个均具有对衍生线程幼稚区数据库44的相关私用幼稚区46(1)-46(n)的访问。更特别地,当线程被衍生时,衍生线程被提供有对在其中分配和操控对象的相应的空的私用幼稚区的访问。衍生线程38(1)-38(n)被允许读取幼稚堆40和成熟堆42,但不被允许写入到幼稚堆40或成熟堆42中。
如前面描述的那样,存储器管理模块26被配置成监测线程执行和管理被分配和存储在存储器24内的对象的生命周期。存储器管理模块26可以包括例如被配置成执行废物收集的废物收集器模块48。废物收集可以指代被配置成回收主体应用程序不会再次访问或操控的数据对象所使用的资源(譬如,例如,存储器)的自动形式的存储器管理。据此,废物收集模块48可以被配置成解除分配存储器24中的未使用对象,以便针对新的对象分配释放至关重要的存储器空间。
废物收集模块48可以被配置成确定web应用中的哪些数据对象未来不会被访问,并回收由这些对象使用的资源。更特别地,废物收集器模块48可以被配置成确定是否在web应用的执行过程中需要对象。废物收集器模块48可以进一步被配置成通过在废物收集周期期间解除分配来自例如衍生线程幼稚区数据库44的幼稚堆40,成熟堆44和/或一个或多个私用幼稚区46(1)-46(n)的对象来释放对应于对象的存储器24内的空间。一般地,废物收集周期指代在其期间废物收集模块48执行废物收集的时段。如在本文中更加详细地描述的那样,废物收集周期可以是基于web应用的线程中的每一个的执行状态来确定的。更特别地,由废物收集器模块48对废物收集周期的发起取决于每一个线程的所识别的执行状态,在本文中更加详细地描述。
在一个或多个衍生线程38(1)-38(n)的执行期间,有区别的主线程36可以保持休眠。在一个或多个衍生线程38(1)-38(n)的执行期间,衍生线程38(1)-38(n)中的每一个均可以对相关的空的私用幼稚区46(1)-46(n)访问和分配一个或多个对象。当被创建时,这种对象被视为线程本地。如先前描述的那样,存储器24被配置为共享存储器。由此,衍生线程38不能通过在对其它衍生线程38来说可见的存储器24的区域中安装指针(例如,对象在存储器24中的指示位置的参考)来从相关的私用幼稚区46公布一个或多个对象。这维持了下述不变量:衍生线程不能访问由衍生同级物操控的值。一旦执行完成,衍生线程38可以将新分配的对象返回至主线程36或潜在地返回至另一个衍生线程。在这两种情况中的任一种情况下,这种对象将存储在相关的私用幼稚区46中。在一些实例中,一旦完成,相关的私用幼稚区46可以具有附加空间可用,并可以被称作部分使用的私用幼稚区。
如果在执行期间衍生线程38用完相关私用幼稚区46中的可用空间,并需要附加的存储器空间,则衍生线程38可以被配置成请求附加的存储器块以扩充相关的私用幼稚区46。衍生线程38还可以被配置成从衍生线程幼稚区数据库44请求对部分使用的私用幼稚区的访问。例如,在与衍生线程38(1)相关的私用幼稚区46(1)用完可用空间的情况下,衍生线程38(1)可以请求并获得对部分使用的私用幼稚区(譬如,例如,私用幼稚区46(2))的访问,以便继续线程执行。如果请求成功,则衍生线程38(1)可以获得对部分使用的私用幼稚区46(2)的剩余可用存储器空间的访问并继续分配部分使用的私用幼稚区46(2)的剩余可用存储器空间中的一个或多个对象。在部分使用的私用幼稚区不可用的情况下,衍生线程38可以保持休眠,至少直到另一个衍生线程完成执行并提供部分使用的私用幼稚区,或直到所有未完成的衍生线程在分配时休眠。
一般地,衍生线程38(1)-38(n)中的每一个可以具有至少一个执行状态。执行状态可以包括运行状态、休眠状态和完成状态。取决于一个或多个衍生线程38(1)-38(n)的当前执行状态,废物收集器模块48可以被配置成发起废物收集周期。例如,在一个实施例中,为了发起废物收集周期,所有的衍生线程38(1)-38(n)必须到达安全点。针对线程的安全点是线程的执行中的下述点:其中,能够针对指针精确地扫描线程的堆栈,并且废物收集是安全的。衍生线程的当前执行状态指示线程是否已经到达安全点。例如,如果衍生线程休眠或已经完成执行,那么衍生线程已经到达安全点。如果衍生线程正在运行(即,没有完成,也没有休眠,并且正在进步),那么系统正在进步并且衍生线程没有到达安全点。据此,如果所有的衍生线程38(1)-38(n)休眠或完成,那么所有的衍生线程38(1)-38(n)已经到达安全点,并且废物收集器模块48能够发起废物收集。如果一个或多个衍生线程38(1)-38(n)正在运行,那么正在运行的衍生线程没有到达安全点,并且废物收集器模块48不发起废物收集。
最终,所有的衍生线程38(1)-38(n)将不可避免地到达安全点。一旦所有的衍生线程完成并且在休眠主线程被恢复之前,来自衍生线程幼稚区数据库44的私用幼稚区46(1)-46(n)被置于幼稚堆40上,其中,在下一个废物收集周期期间,主线程的幼稚区和衍生线程的私用幼稚区可以被简单地视为用于废物收集的目的的幼稚区。
由于衍生线程不能看到同级物衍生线程的工作,因此衍生线程不能取决于另一个衍生线程,且在同级物线程变为休眠的情况下不会被阻塞。如果不存在衍生线程,那么主线程自由进步。由此,至少一个线程在所有的时间处自由地执行,由此确保系统将始终向前进。
废物收集器模块48可以被配置成通过所属领域技术人员一般所理解的一个或多个废物收集方法在私用幼稚区46(1)-46(n)以及幼稚堆40上执行废物收集。废物收集器模块48可以被配置成检测对应于相关分配对象的一个或多个存储器块,并确定相关分配对象未来是否将被访问。如果确定在web应用的执行过程中不需要对象,则废物收集器模块48可以被配置成从存储器解除分配(例如,移除)对象,并从而释放更多的可用存储器以用于未来分配。应当注意到,废物收集器模块48可以被配置成执行仅幼稚区废物收集和全局废物收集。在仅幼稚区废物收集中,废物收集器模块48被配置成在至少私用幼稚区46(1)-46(n)上执行废物收集。在全局废物收集中,废物收集器模块48被配置成在幼稚堆40和私用幼稚区46(1)-46(n)以及成熟堆42中执行废物收集。在示出的实施例中,由于当衍生线程正在运行时挂起向全局区域(例如,幼稚堆40,成熟空间42)中的分配,因此当任意局部区域(例如,私用幼稚区46(1)-46(n))保持对象时不存在收集全局区域的需要。
图4是依照与本公开一致的至少一个实施例的示例操作的流程图。在操作402中,可以发起应用(例如,浏览器内web应用)的线程(例如,衍生线程)的执行。线程的执行的发起可以后跟操作404中的存储器块的获取。存储器块可以包括来自幼稚区数据库(例如,衍生线程幼稚区数据库44)的私用幼稚区(例如,私用幼稚区46(1)-46(n)),其中衍生线程可以在线程执行期间访问。在操作406中,线程执行的计算进行。
然后,在操作408中可以做出线程的执行是否完成的确定。如果在操作408中确定执行完成,那么在操作410中可以做出存储器块是否部分为空的确定。如果在操作410中确定存储器块部分为空,那么在操作412中返回部分为空的存储器块,并且线程可以在操作414中进入废物收集(GC)安全状态。否则,线程可以在操作414中进入GC安全状态。GC安全状态是线程的执行中存储器块的废物收集安全进行的点。
如果在操作408中确定线程的执行未完成,那么在操作416中可以做出是否需要存储器块中的分配的确定。如果在操作416中确定需要分配,那么在操作418中在存储器块的一部分中创建对象。否则,如果在操作416中确定不需要分配,那么操作406-408可以重复。
一旦在操作418中在存储器块的一部分中创建对象,那么在操作420中可以做出由线程进行的分配是否成功的确定。如果在操作420中确定分配成功,那么操作406-408可以重复。否则,如果在操作420中确定分配不成功,则在操作422中可以做出空的存储器块是否可用的确定。初始的存储器块可能用尽可用的存储器空间,并且线程可能需要附加的存储器空间,以便完成分配。如果在操作422中确定附加的空的存储器块可用,那么获取附加的空的存储器块,并且附加的空的存储器块中的分配进行,其中在操作424中在附加的空的存储器块中创建对象,并且操作420可以重复。
如果在操作422中确定附加的空的存储器块不可用,那么在操作426中可以做出部分为空的存储器块是否可用的确定。例如,线程可以被配置成请求对部分使用的存储器块(例如,来自衍生线程幼稚区数据库44的部分使用的私用幼稚区)的访问。如果在操作426中确定部分为空的存储器块可用,那么获取该部分为空的存储器块,并且部分为空的存储器块中的分配进行,其中在操作428中在部分使用的存储器块中的剩余可用空间中创建对象,并且操作420可以重复。否则,如果确定部分为空的存储器块不可用,那么在操作430中线程可以进入GC安全状态,并且操作422可以重复。
尽管图4示出了根据实施例的各种操作,但是应当理解,并非图4中描绘的所有操作都是其它实施例所必需的。的确,本文完全可以预期,在本公开的其它实施例中,图4中描绘的操作和/或本文描述的其它操作可以以未在任何附图中具体示出但仍与本公开完全一致的方式组合。因此,涉及未在一幅图中精确示出的特征和/或操作的权利要求被视为落入本公开的范围和内容之内。
此外,实施例的操作已经参照上面的附图和伴随的示例进一步加以描述。一些附图可以包括逻辑流程。尽管本文呈现的这种附图可以包括特定的逻辑流程,但是可以理解,该逻辑流程仅提供本文描述的一般功能可以被如何实现的示例。进一步地,给出的逻辑流程没有必要必须以呈现的顺序执行,除非另作指示。此外,给定的逻辑流程可以由硬件元件、处理器所执行的软件元件或它们的任意组合实现。实施例并不限于该上下文。
各种特征、方面和实施例已经在本文中加以描述。特征、方面和实施例容易彼此组合,以及容易变形和修改,如所属领域技术人员将理解的那样。因此,本公开应当被视为包含这种组合、变形和修改。因此,本发明的广度和范围不应受上述的示例性实施例中的任一个限制,而是应当仅依照以下的权利要求和它们的等价物加以限定。
如在本文任意实施例中所使用的那样,术语“模块”可以指代被配置成执行任意上述操作的软件、固件和/或电路。软件可以被体现为被记录在非暂时性计算机可读存储介质上的软件包、代码、指令、指令集和/或数据。固件可以被体现为被硬编码(例如,非易失性)在存储器设备中的代码、指令或指令集和/或数据。“电路”,如在本文任意实施例中所使用的那样,可以例如单个地或以任意组合包括硬连线电路、可编程电路(譬如包括一个或多个个体指令处理核的计算机处理器)、状态机电路、和/或存储由可编程电路执行的指令的固件。模块可以共同地或个体地被体现为形成更大系统(例如,集成电路(IC),片上系统(SoC),台式计算机,膝上型计算机,平板计算机,服务器,智能手机,等等)的一部分的电路。
本文描述的任意操作可以在包括一个或多个存储介质的系统中实现,该存储介质在其上个体地或组合地存储有在由一个或多个处理器执行时执行该方法的指令。此处,处理器可以包括例如服务器CPU、移动设备CPU和/或其它可编程电路。此外,意图在于,本文描述的操作可以跨多个物理设备分布,譬如,处于多于一个不同物理位置的处理结构。存储介质可以包括任意类型的有形介质,例如,任意类型的盘,包括硬盘、软盘、光盘、压缩盘只读存储器(CD-ROM)、压缩盘可重写盘(CD-RW)和磁光盘、半导体器件(譬如只读存储器(ROM),随机存取存储器(RAM),譬如动态和静态RAM,可擦除可编程只读存储器(EPROM),电可擦除可编程只读存储器(EEPROM),闪存,固态盘(SSD),磁或光卡)、或适合存储电子指令的任意类型的介质。其它实施例可以被实现为由可编程控制设备执行的软件模块。存储介质可以为非暂时性的。
本文中已经采用的术语和表述被用作描述而非限制的术语,并且在这种术语和表述的使用中不旨在排除所示出和描述的特征(或其部分)的任何等同物,并且应当认识到,各种修改在权利要求书的范围内是可能的。据此,权利要求书旨在涵盖所有这种等同物。各种特征、方面和实施例已在本文中加以描述。这些特征、方面和实施例容易相互组合以及容易变形和修改,如本领域技术人员将理解的那样。因此,本公开应当被视为涵盖这种组合、变形和修改。
如本文所描述的那样,各种实施例可以使用硬件元件、软件元件或它们的任意组合实现。硬件元件的示例可以包括处理器、微处理器、电路、电路元件(例如,晶体管,电阻器,电容器,电感器,等等)、集成电路、专用集成电路(ASIC)、可编程逻辑器件(PLD)、数字信号处理器(DSP)、现场可编程门阵列(FPGA)、逻辑门、寄存器、半导体器件、芯片、微芯片、芯片组等等。
贯穿本说明书对“一个实施例”或“一实施例”的引用意味着结合该实施例描述的特定特征、结构或特性被包括在至少一个实施例中。因此,贯穿本说明书各处出现短语“在一个实施例中”或“在一实施例中”不一定均指代同一实施例。此外,特定特征、结构或特性可按照任何合适的方式在一个或多个实施例中组合。
根据一个方面,提供了一种用于web应用的并行计算的自动存储器管理的装置。该装置包括:处理器,具有至少两个计算机处理单元(CPU)核;和操作系统,被配置成给处理器的相应CPU核指派web应用的处理功能的一个或多个线程,以在相应的CPU核上并发执行。一个或多个线程包括第一线程和至少一个衍生线程。
计算系统进一步包括存储器,其具有块集合,该块集合被分发给第一线程和至少一个衍生线程。存储器被划分为幼稚堆、成熟堆和具有多个私用幼稚区的数据库。第一线程具有对幼稚堆和成熟堆的访问。第一线程被配置成在幼稚堆中分配和操控一个或多个对象,并写入对存储在幼稚堆和成熟堆中的一个或多个对象的参考。该至少一个衍生线程具有对多个私用幼稚区中的相关的一个的访问。该至少一个衍生线程被配置成在相关的私用幼稚区内分配和操控一个或多个对象。
另一个示例装置包括前述部件,并且进一步包括网页浏览器,其被配置成执行web应用。web应用以网页浏览器支持的脚本语言编码。
另一个示例装置包括前述部件,并且脚本语言是
另一个示例装置包括前述部件,并且进一步包括编程语言引擎,其被配置成在网页浏览器的运行时系统内解释和执行web应用代码。
另一个示例装置包括前述部件,并且进一步包括确定性并行编程模块,其被配置成修改编程语言引擎,并采用在运行时被转换为低层级硬件抽象层的确定性数据并行构造扩展编程语言,以实现web应用的数据并行性。
另一个示例装置包括前述部件,并且进一步包括存储器管理模块,其被配置成监测至少第一线程和至少一个衍生线程的执行,并管理被分配和存储在存储器的块集合内的一个或多个对象的生命周期。
别一个示例装置包括前述部件,并且存储器管理模块包括废物收集器模块,其被配置成在废物收集周期期间在多个私用幼稚区中的至少每一个上执行废物收集。
另一个示例装置包括前述部件,并且废物收集器模块被配置成至少部分地基于至少一个衍生线程的执行状态发起废物收集周期,所述执行状态确定至少一个衍生线程是否到达安全点。
另一个示例装置包括前述部件,并且执行状态是从由正在运行、休眠和完成构成的组中选择的。
另一个示例装置包括前述部件,并且当执行状态是休眠或完成时,至少一个衍生线程到达安全点,并且当执行状态是正在运行时,至少一个衍生线程未能到达安全点。
另一个示例装置包括前述部件,并且如果多个私用幼稚区中的相关的一个具有不足以供至少一个衍生线程完成一个或多个对象的分配的存储器空间,则至少一个衍生线程被配置成请求对来自多个私用幼稚区的先前使用的私用幼稚区的访问。先前使用的私用幼稚区具有一部分存储器空间可用于使至少一个衍生线程分配一个或多个对象。
根据一个方面,提供了一种用于web应用的并行计算的自动存储器管理的系统。所述系统包括媒体源和客户端设备,该客户端设备被配置成在网络上与媒体源进行通信,并访问和执行由媒体源提供的web应用。客户端设备包括计算系统,其被配置成允许web应用的并行计算。
该计算系统包括:处理器,具有至少两个计算机处理单元(CPU)核;和操作系统,被配置成给处理器的相应CPU核指派web应用的处理功能的一个或多个线程,以在相应的CPU核上并发执行。一个或多个线程包括第一线程和至少一个衍生线程。
计算系统进一步包括存储器,其具有块集合,该块集合被分发给第一线程和至少一个衍生线程。存储器被划分为幼稚堆、成熟堆和具有多个私用幼稚区的数据库。第一线程具有对幼稚堆和成熟堆的访问。第一线程被配置成在幼稚堆中分配和操控一个或多个对象,并写入对存储在幼稚堆和成熟堆中的一个或多个对象的参考。该至少一个衍生线程具有对多个私用幼稚区中的相关的一个的访问。该至少一个衍生线程被配置成在相关的私用幼稚区内分配和操控一个或多个对象。
另一个示例系统包括前述部件,并且进一步包括网页浏览器,其被配置成执行web应用。web应用以网页浏览器支持的脚本语言编码。
另一个示例系统包括前述部件,并且进一步包括:编程语言引擎,被配置成在网页浏览器的运行时系统内解释和执行web应用代码;和确定性并行编程模块,被配置成修改编程语言引擎,并采用在运行时被转换为低层级硬件抽象层的确定性数据并行构造扩展编程语言,以便实现web应用的数据并行性。
另一个示例系统包括前述部件,并且进一步包括:存储器管理模块,被配置成监测至少第一线程和至少一个衍生线程的执行,并管理被分配和存储在存储器块集合内的一个或多个对象的生命周期;和废物收集器模块,被配置成在废物收集周期期间在多个私用幼稚区中的至少每一个上执行废物收集。
另一个示例系统包括前述部件,并且废物收集器模块被配置成至少部分地从于至少一个衍生线程的执行状态发起废物收集周期。该执行状态确定至少一个衍生线程是否到达安全点。执行状态是从由正在运行、休眠和完成构成的组中选择的。
另一个示例系统包括前述部件,并且如果多个私用幼稚区中的相关的一个具有不足以供至少一个衍生线程完成一个或多个对象的分配的存储器空间,则至少一个衍生线程被配置成请求对来自多个私用幼稚区的先前使用的私用幼稚区的访问。先前使用的私用幼稚区具有一部分存储器空间可用于使至少一个衍生线程分配一个或多个对象。
根据另一方面,提供了包括指令存储于其上的至少一种计算机可访问介质。当由一个或多个处理器执行时,指令可以使计算机系统执行用于web应用的并行计算的自动存储器管理的操作。该操作包括:在处理器的相应CPU核上发起web应用的处理功能的一个或多个线程的并发执行。一个或多个线程包括第一线程和至少一个衍生线程。该操作进一步包括:在被分发给第一线程和至少一个衍生线程的共享存储器中获取相关的块,该块包括幼稚堆、成熟堆和具有多个私用幼稚区的数据库。第一线程具有对幼稚堆和成熟堆的访问并被配置成在幼稚堆和成熟堆内分配和操控一个或多个对象。至少一个衍生线程具有对多个私用幼稚区中相关的一个的访问并被配置成在多个私用幼稚区中相关的一个内分配和操控一个或多个对象。该操作进一步包括:监测至少第一线程和至少一个衍生线程的执行;以及管理被分配和存储在幼稚堆、成熟堆和存储器的多个幼稚区中的每一个内的一个或多个对象的生命周期。
另一个示例计算机可访问介质包括前述操作,并且进一步包括在废物收集周期的发起期间在至少多个私用幼稚区上执行废物收集。
另一个示例计算机可访问介质包括前述操作,并且废物收集周期至少部分地基于至少一个衍生线程的执行状态,所述执行状态确定至少一个衍生线程是否到达安全点,其中所述执行状态是从由正在运行、休眠和完成构成的组中选择的。
另一个示例计算机可访问介质包括前述操作,并且进一步包括:确定多个私用幼稚区中相关的一个具有不足以供至少一个衍生线程完成一个或多个对象的分配的存储器空间;识别来自多个私用幼稚区的先前使用的私用幼稚区,其具有一部分存储器空间可用于使至少一个衍生线程分配一个或多个对象;以及访问先前使用的私用幼稚区,并且在该部分可用的存储器空间内分配一个或多个对象。
根据另一个方面,提供了一种用于web应用的并行计算的自动存储器管理的方法。该方法包括:在处理器的相应CPU核上发起web应用的处理功能的一个或多个线程的并发执行。一个或多个线程包括第一线程和至少一个衍生线程。该方法进一步包括:在被分发给第一线程和至少一个衍生线程的共享存储器中获取相关的块,该块包括幼稚堆、成熟堆和具有多个私用幼稚区的数据库。第一线程具有对幼稚堆和成熟堆的访问并被配置成在幼稚堆和成熟堆内分配和操控一个或多个对象。至少一个衍生线程具有对多个私用幼稚区中相关的一个的访问并被配置成在多个私用幼稚区中相关的一个内分配和操控一个或多个对象。该方法进一步包括:监测至少第一线程和至少一个衍生线程的执行;以及管理被分配和存储在幼稚堆、成熟堆和存储器的多个幼稚区中的每一个内的一个或多个对象的生命周期。
另一个示例方法包括前述操作,并且进一步包括在废物收集周期的发起期间在至少多个私用幼稚区上执行废物收集。
另一个示例方法包括前述操作,并且废物收集周期至少部分地基于至少一个衍生线程的执行状态,所述执行状态确定至少一个衍生线程是否到达安全点,其中所述执行状态是从由正在运行、休眠和完成构成的组中选择的。
另一个示例方法包括前述操作,并且进一步包括:确定多个私用幼稚区中相关的一个具有不足以供至少一个衍生线程完成一个或多个对象的分配的存储器空间;识别来自多个私用幼稚区的先前使用的私用幼稚区,其具有一部分存储器空间可用于使至少一个衍生线程分配一个或多个对象;以及访问先前使用的私用幼稚区,并且在该部分可用的存储器空间内分配一个或多个对象。
本文已经采用的术语和表达被用作描述非限制的术语,并且在这种术语和表述的使用中不旨在排除所示出和描述的特征(或其部分)的任何等同物,并且应当认识到,各种修改在权利要求书的范围内是可能的。据此,权利要求书旨在涵盖所有这种等同物。
Claims (22)
1.一种用于web应用的并行计算的自动存储器管理的装置,所述装置包括:
处理器,具有至少两个计算机处理单元(CPU)核;
操作系统,被配置成给所述处理器的相应CPU核指派web应用的处理功能的一个或多个线程,以在所述相应CPU核上并发执行,所述一个或多个线程包括第一线程和至少一个衍生线程;
存储器,其具有块集合,该块集合被分发给所述第一线程和所述至少一个衍生线程,所述存储器被划分为幼稚堆、成熟堆和具有多个私用幼稚区的数据库;
其中所述第一线程具有对所述幼稚堆和成熟堆的访问,所述第一线程被配置成在所述幼稚堆中分配和操控一个或多个对象,并写入对存储在所述幼稚堆和成熟堆中的一个或多个对象的参考;
其中所述至少一个衍生线程具有对所述多个私用幼稚区中的相关的一个的访问,所述至少一个衍生线程被配置成在所述相关的私用幼稚区内分配和操控一个或多个对象,以及
其中如果所述多个私用幼稚区中的所述相关的一个具有不足以供所述至少一个衍生线程完成一个或多个对象的分配的存储器空间,则所述至少一个衍生线程被配置成:
如果可用的话,请求从所述多个私用幼稚区中访问空的私用幼稚区;以及
当所述空的私用幼稚区不可用时,请求从所述多个私用幼稚区中仅访问先前使用的私用幼稚区的存储器空间的未使用部分以分配一个或多个对象。
2.如权利要求1所述的装置,进一步包括网页浏览器,其被配置成执行所述web应用,其中所述web应用以所述网页浏览器支持的脚本语言编码。
3.如权利要求2所述的装置,其中所述脚本语言是JavaScript。
4.如权利要求2所述的装置,进一步包括编程语言引擎,其被配置成在所述网页浏览器的运行时系统内解释和执行所述web应用代码。
5.如权利要求4所述的装置,进一步包括确定性并行编程模块,其被配置成修改所述编程语言引擎,并采用在运行时被转换为低层级硬件抽象层的确定性数据并行构造扩展编程语言,以实现所述web应用的数据并行性。
6.如权利要求1所述的装置,进一步包括存储器管理模块,其被配置成监测至少所述第一线程和所述至少一个衍生线程的执行,并管理被分配和存储在所述存储器的所述块集合内的一个或多个对象的生命周期。
7.如权利要求6所述的装置,其中所述存储器管理模块包括废物收集器模块,其被配置成在废物收集周期期间在至少所述多个私用幼稚区上执行废物收集。
8.如权利要求7所述的装置,其中所述废物收集器模块被配置成至少部分地基于所述至少一个衍生线程的执行状态发起所述废物收集周期,所述执行状态确定所述至少一个衍生线程是否到达安全点。
9.如权利要求8所述的装置,其中所述执行状态是从由正在运行、休眠和完成构成的组中选择的。
10.如权利要求9所述的装置,其中当所述执行状态是休眠或完成时,所述至少一个衍生线程到达安全点,并且当所述执行状态是正在运行时,所述至少一个衍生线程未能到达安全点。
11.一种用于web应用的并行计算的自动存储器管理的系统,所述系统包括:
媒体源;和
客户端设备,被配置成在网络上与所述媒体源进行通信,并访问和执行由所述媒体源提供的web应用,所述客户端设备具有计算系统,其被配置成允许所述web应用的并行计算,所述计算系统包括:
处理器,具有至少两个计算机处理单元(CPU)核;
操作系统,被配置成给所述处理器的相应CPU核指派所述web应用的处理功能的一个或多个线程,以在所述相应CPU核上并发执行,所述一个或多个线程包括第一线程和至少一个衍生线程;
存储器,其具有块集合,该块集合被分发给所述第一线程和所述至少一个衍生线程,所述存储器被划分为幼稚堆、成熟堆和具有多个私用幼稚区的数据库;
其中所述第一线程具有对所述幼稚堆和成熟堆的访问,所述第一线程被配置成在所述幼稚堆中分配和操控一个或多个对象,并写入对存储在所述幼稚堆和成熟堆中的一个或多个对象的参考;
其中所述至少一个衍生线程具有对所述多个私用幼稚区中的相关的一个的访问,所述至少一个衍生线程被配置成在所述相关的私用幼稚区内分配和操控一个或多个对象,以及
其中,如果所述多个私用幼稚区中的所述相关的一个具有不足以供所述至少一个衍生线程完成一个或多个对象的分配的存储器空间,则所述至少一个衍生线程被配置成:
如果可用的话,请求从所述多个私用幼稚区中访问空的私用幼稚区;以及
当所述空的私用幼稚区不可用时,请求从所述多个私用幼稚区中仅访问先前使用的私用幼稚区的存储器空间的未使用部分以分配一个或多个对象。
12.如权利要求11所述的系统,进一步包括网页浏览器,其被配置成执行所述web应用,其中所述web应用以所述网页浏览器支持的脚本语言编码。
13.如权利要求12所述的系统,进一步包括:
编程语言引擎,被配置成在所述网页浏览器的运行时系统内解释和执行所述web应用代码;和
确定性并行编程模块,被配置成修改所述编程语言引擎,并采用在运行时被转换为低层级硬件抽象层的确定性数据并行构造扩展编程语言,以便实现所述web应用的数据并行性。
14.如权利要求11所述的系统,进一步包括:
存储器管理模块,被配置成监测至少所述第一线程和所述至少一个衍生线程的执行,并管理被分配和存储在所述存储器的所述块集合内的一个或多个对象的生命周期;和
废物收集器模块,被配置成在废物收集周期期间在至少所述多个私用幼稚区上执行废物收集。
15.如权利要求14所述的系统,其中所述废物收集器模块被配置成至少部分地基于所述至少一个衍生线程的执行状态发起所述废物收集周期,所述执行状态确定所述至少一个衍生线程是否到达安全点,其中所述执行状态是从由正在运行、休眠和完成构成的组中选择的。
16.一种用于web应用的并行计算的自动存储器管理的方法,所述方法包括:
在处理器的相应CPU核上发起web应用的处理功能的一个或多个线程的并发执行,所述一个或多个线程包括第一线程和至少一个衍生线程;
在被分发给所述第一线程和所述至少一个衍生线程的共享存储器中获取相关的块,所述块包括幼稚堆、成熟堆和具有多个私用幼稚区的数据库,其中所述第一线程具有对所述幼稚堆和成熟堆的访问并被配置成在所述幼稚堆和成熟堆内分配和操控一个或多个对象,并且所述至少一个衍生线程具有对所述多个私用幼稚区中相关的一个的访问并被配置成在所述多个私用幼稚区中相关的一个内分配和操控一个或多个对象;
监测至少所述第一线程和所述至少一个衍生线程的执行,以及管理被分配和存储在所述幼稚堆、成熟堆和所述存储器的所述多个幼稚区中的每一个内的一个或多个对象的生命周期;
确定所述多个私用幼稚区中所述相关的一个具有不足以供所述至少一个衍生线程完成一个或多个对象的分配的存储器空间;
如果可用的话,从所述多个私用幼稚区中访问空的私用幼稚区;
当所述空的私用幼稚区不可用时,识别来自所述多个私用幼稚区的先前使用的私用幼稚区,其具有一部分存储器空间可用于使所述至少一个衍生线程分配一个或多个对象;以及
仅访问所述先前使用的私用幼稚区的可用的存储器空间的未使用部分,并且在所述可用的存储器空间的未使用部分内分配一个或多个对象。
17.如权利要求16所述的方法,进一步包括:
在废物收集周期的发起期间在至少所述多个私用幼稚区上执行废物收集。
18.如权利要求17所述的方法,其中所述废物收集周期至少部分地基于所述至少一个衍生线程的执行状态,所述执行状态确定所述至少一个衍生线程是否到达安全点,其中所述执行状态是从由正在运行、休眠和完成构成的组中选择的。
19.一种用于web应用的并行计算的自动存储器管理的系统,所述系统包括:
用于在处理器的相应CPU核上发起web应用的处理功能的一个或多个线程的并发执行的装置,所述一个或多个线程包括第一线程和至少一个衍生线程;
用于在被分发给所述第一线程和所述至少一个衍生线程的共享存储器中获取相关的块的装置,所述块包括幼稚堆、成熟堆和具有多个私用幼稚区的数据库,其中所述第一线程具有对所述幼稚堆和成熟堆的访问并被配置成在所述幼稚堆和成熟堆内分配和操控一个或多个对象,并且所述至少一个衍生线程具有对所述多个私用幼稚区中相关的一个的访问并被配置成在所述多个私用幼稚区中相关的一个内分配和操控一个或多个对象;以及
用于监测至少所述第一线程和所述至少一个衍生线程的执行,以及管理被分配和存储在所述幼稚堆、成熟堆和所述存储器的所述多个幼稚区中的每一个内的一个或多个对象的生命周期的装置;
用于确定所述多个私用幼稚区中所述相关的一个具有不足以供所述至少一个衍生线程完成一个或多个对象的分配的存储器空间的装置;
用于如果可用的话,从所述多个私用幼稚区中访问空的私用幼稚区;当所述空的私用幼稚区不可用时,识别来自所述多个私用幼稚区的先前使用的私用幼稚区的装置,所述先前使用的私用幼稚区具有一部分存储器空间可用于使所述至少一个衍生线程分配一个或多个对象;以及
用于仅访问所述先前使用的私用幼稚区的可用的存储器空间的未使用部分,并且在所述可用的存储器空间的未使用部分内分配一个或多个对象的装置。
20.如权利要求19所述的系统,进一步包括:
用于在废物收集周期的发起期间在至少所述多个私用幼稚区上执行废物收集的装置。
21.如权利要求20所述的系统,其中所述废物收集周期至少部分地基于所述至少一个衍生线程的执行状态,所述执行状态确定所述至少一个衍生线程是否到达安全点,其中所述执行状态是从由正在运行、休眠和完成构成的组中选择的。
22.一种存储指令的计算机可访问介质,所述指令当由机器执行时使机器执行根据权利要求16-18中任一项所述的方法的操作。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/560,054 US9292359B2 (en) | 2012-07-27 | 2012-07-27 | System and method for memory management |
US13/560054 | 2012-07-27 | ||
PCT/US2013/051823 WO2014018631A1 (en) | 2012-07-27 | 2013-07-24 | System and method for memory management |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104412240A CN104412240A (zh) | 2015-03-11 |
CN104412240B true CN104412240B (zh) | 2018-09-07 |
Family
ID=49996307
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380017284.9A Expired - Fee Related CN104412240B (zh) | 2012-07-27 | 2013-07-24 | 用于存储器管理的系统和方法 |
Country Status (7)
Country | Link |
---|---|
US (1) | US9292359B2 (zh) |
EP (1) | EP2834744B1 (zh) |
JP (1) | JP5911997B2 (zh) |
KR (1) | KR101713070B1 (zh) |
CN (1) | CN104412240B (zh) |
AU (1) | AU2013295854B2 (zh) |
WO (1) | WO2014018631A1 (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5889270B2 (ja) * | 2013-12-13 | 2016-03-22 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | スタック・スキャンのコストを削減するための方法、プログラム及びシステム |
JP6281442B2 (ja) * | 2014-08-14 | 2018-02-21 | 富士通株式会社 | 割り当て制御プログラム、割り当て制御方法及び割り当て制御装置 |
US9870266B2 (en) * | 2015-07-30 | 2018-01-16 | Nasdaq, Inc. | Background job processing framework |
US9880931B2 (en) * | 2015-10-15 | 2018-01-30 | Oracle International Corporation | Safepoints for guest languages on a virtual machine |
US10223436B2 (en) * | 2016-04-27 | 2019-03-05 | Qualcomm Incorporated | Inter-subgroup data sharing |
US10754772B2 (en) * | 2016-06-14 | 2020-08-25 | Sap Se | Reclamation of in-memory database memory resources |
CN107168887B (zh) * | 2017-05-09 | 2020-09-04 | 深圳市茁壮网络股份有限公司 | 一种JavaScript对象存储、回收方法及装置 |
CN107145451B (zh) * | 2017-05-09 | 2020-09-25 | 深圳市茁壮网络股份有限公司 | 一种JavaScript对象存储、回收方法及装置 |
CN110022341B (zh) * | 2018-01-10 | 2022-01-25 | 腾讯科技(深圳)有限公司 | 一种数据传输方法及相关设备 |
CN109117274B (zh) * | 2018-08-28 | 2021-03-09 | Oppo广东移动通信有限公司 | 应用于浏览器的内存管理方法、装置、终端及存储介质 |
US11593169B2 (en) * | 2019-07-03 | 2023-02-28 | Microsoft Technology Licensing, Llc | Memory deallocation across a trust boundary |
US11263130B2 (en) * | 2019-07-11 | 2022-03-01 | International Business Machines Corporation | Data processing for allocating memory to application containers |
KR102453983B1 (ko) * | 2021-12-14 | 2022-10-31 | 인터와이즈 주식회사 | 생존 경로 정보 기반 가비지 컬렉션 방법 |
CN117707991B (zh) * | 2024-02-05 | 2024-04-26 | 苏州元脑智能科技有限公司 | 一种数据读写方法、系统、设备及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6058460A (en) * | 1996-06-28 | 2000-05-02 | Sun Microsystems, Inc. | Memory allocation in a multithreaded environment |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6836782B1 (en) * | 2000-06-12 | 2004-12-28 | Sun Microsystems, Inc. | Method and apparatus for implementing modular garbage collectors |
US6507903B1 (en) * | 2000-06-20 | 2003-01-14 | International Business Machines Corporation | High performance non-blocking parallel storage manager for parallel software executing on coordinates |
US6505275B1 (en) | 2000-07-24 | 2003-01-07 | Sun Microsystems, Inc. | Method for scalable memory efficient thread-local object allocation |
US7111294B2 (en) * | 2001-01-16 | 2006-09-19 | Microsoft Corporation | Thread-specific heaps |
JP2003108389A (ja) * | 2001-09-27 | 2003-04-11 | Fujitsu Ltd | スレッドスケジューリング方式 |
JP2004246753A (ja) * | 2003-02-17 | 2004-09-02 | Nippon Telegr & Teleph Corp <Ntt> | メモリ管理装置およびプログラム |
US7552153B2 (en) | 2004-12-28 | 2009-06-23 | Sap Ag | Virtual machine monitoring using shared memory |
US7516291B2 (en) * | 2005-11-21 | 2009-04-07 | Red Hat, Inc. | Cooperative mechanism for efficient application memory allocation |
US8024505B2 (en) | 2006-05-11 | 2011-09-20 | Oracle International Corporation | System and method for optimistic creation of thread local objects in a virtual machine environment |
US8336056B1 (en) * | 2009-12-22 | 2012-12-18 | Gadir Omar M A | Multi-threaded system for data management |
US20110252216A1 (en) | 2010-04-12 | 2011-10-13 | Tatu Ylonen Oy Ltd | Thread-local hash table based write barrier buffers |
-
2012
- 2012-07-27 US US13/560,054 patent/US9292359B2/en active Active
-
2013
- 2013-07-24 AU AU2013295854A patent/AU2013295854B2/en not_active Ceased
- 2013-07-24 JP JP2015503691A patent/JP5911997B2/ja not_active Expired - Fee Related
- 2013-07-24 KR KR1020147027132A patent/KR101713070B1/ko active IP Right Grant
- 2013-07-24 EP EP13822081.9A patent/EP2834744B1/en active Active
- 2013-07-24 CN CN201380017284.9A patent/CN104412240B/zh not_active Expired - Fee Related
- 2013-07-24 WO PCT/US2013/051823 patent/WO2014018631A1/en active Application Filing
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6058460A (en) * | 1996-06-28 | 2000-05-02 | Sun Microsystems, Inc. | Memory allocation in a multithreaded environment |
Also Published As
Publication number | Publication date |
---|---|
US20140033213A1 (en) | 2014-01-30 |
AU2013295854B2 (en) | 2016-01-28 |
KR101713070B1 (ko) | 2017-03-09 |
EP2834744A4 (en) | 2016-07-06 |
JP5911997B2 (ja) | 2016-04-27 |
WO2014018631A1 (en) | 2014-01-30 |
JP2015516633A (ja) | 2015-06-11 |
US9292359B2 (en) | 2016-03-22 |
AU2013295854A1 (en) | 2014-10-09 |
EP2834744B1 (en) | 2019-02-06 |
EP2834744A1 (en) | 2015-02-11 |
KR20140131978A (ko) | 2014-11-14 |
CN104412240A (zh) | 2015-03-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104412240B (zh) | 用于存储器管理的系统和方法 | |
US9430388B2 (en) | Scheduler, multi-core processor system, and scheduling method | |
US20130007536A1 (en) | Method and system for analyzing parallelism of program code | |
CN104412233B (zh) | 流水线调度中混叠寄存器的分配 | |
JP5707265B2 (ja) | 演算制御装置及び演算制御方法並びにプログラム、並列プロセッサ | |
CN1983196A (zh) | 用于将执行线程分组的系统和方法 | |
Wijs et al. | GPUexplore 2.0: unleashing GPU explicit-state model checking | |
CN102693188A (zh) | 用于在可控运行时环境中进行基于硬件的动态逸出检测的方法和装置 | |
CN105074657B (zh) | 并行管道中的发散分支的硬件和软件解决方案 | |
CN106445398A (zh) | 一种基于新型存储器的嵌入式文件系统及其实现方法 | |
CN109992307B (zh) | 指令列表调度方法、装置、计算机设备及存储介质 | |
US8966212B2 (en) | Memory management method, computer system and computer readable medium | |
US20210374319A1 (en) | Dynamic allocation of computing resources for electronic design automation operations | |
CN109656868A (zh) | 一种cpu与gpu之间的内存数据转移方法 | |
US20230185991A1 (en) | Multi-processor simulation on a multi-core machine | |
Góes et al. | Automatic skeleton-driven memory affinity for transactional worklist applications | |
CN115586972A (zh) | 命令生成方法、装置、ai芯片、电子设备及存储介质 | |
US20170364809A1 (en) | Parallelization techniques for variable selection and predictive models generation and its applications | |
JP5093242B2 (ja) | 自己診断処理を行う情報処理装置、自己診断処理方法及び自己診断処理プログラム | |
CN106598687A (zh) | 一种脚本预热方法和装置 | |
Maccarone et al. | Fuzzy mathematical morphology to analyse astronomical images | |
CN117270988A (zh) | 一种基于快照的深度模型快速加载方法及装置 | |
CN113626167A (zh) | 线程控制方法、装置、设备及计算机存储介质 | |
CN115934728A (zh) | 文件导入方法、装置及电子设备 | |
CN115328560A (zh) | 芯片启动方法、系统、计算机设备、存储介质及芯片 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20180907 |