一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

避免高性能内存管理系统中的垃圾收集的制作方法

2021-12-08 02:31:00 来源:中国专利 TAG:


1.实施例通常涉及计算架构的内存管理。更具体地,实施例涉及避免高性能内存管理系统中的垃圾收集。


背景技术:

2.在操作中,计算机程序可向各个对象分配内存以执行在执行程序时涉及的操作。当计算机程序未能从不再使用的对象释放内存时,可用内存不必要地减少,这可对性能具有负面影响且可导致系统故障(例如,当额外内存不可用时)。尽管诸如管理的运行时应用程序之类的程序可使用“垃圾收集器”以自动地回收不再使用的内存,但仍存在相当大的改进空间。例如,传统的垃圾收集器可能在处理器使用、用户接口的未预测的暂停、额外的功率消耗(例如减少的电池寿命)等方面对性能具有负面影响。
附图说明
3.通过阅读以下说明书和所附权利要求书且通过参考附图,实施例的各种优势对于所属领域的技术人员而言将是显而易见的,其中:
4.图1是根据实施例的在创建线程之后的分配空间的示例的图示;
5.图2是根据实施例的将内存区域专用于与线程相关联的对象的示例的流程图;
6.图3是根据实施例的在内存回收之后的分配空间的示例的图示;
7.图4是根据实施例的内存回收的示例的流程图;
8.图5和图6是根据实施例的管理内存的方法的示例的流程图;
9.图7是根据实施例的性能增强的计算系统的示例的框图;
10.图8是根据实施例的半导体封装装置的示例的图示;
11.图9是根据实施例的处理器的示例的框图;并且
12.图10是根据实施例的基于多处理器的计算系统的示例的框图。
具体实施方式
13.现在转到图1,在创建线程之后示出分配空间20(20a

20e)。在实施例中,分配空间20为堆内存的部分,该堆内存用于在创建和终止(例如破坏)线程的计算机程序的运行时操作期间进行动态内存分配。堆内存还可包括其他内存空间(未示出),例如大对象空间(例如存储相对较大的原始阵列和/或字串阵列)、图像空间(例如存储可执行文件、资源文件等)、共享空间(例如存储由多个过程共享的对象)、非移动空间(例如存储长期对象)等等。在一个示例中,分配空间20存储可能在垃圾收集过程期间被作为目标的相对较短期的对象。此外,线程可对应于用户接口活动,用户接口活动提供丰富的特殊效应并导致短期对象消耗相对较大量的内存。
14.在图示的示例中,分配空间20包括第一区域20a(“区域1”)、第二区域20b(“区域2”)、第三区域20c(“区域3”)、第四区域20d(“区域4”)和第五区域20e(“区域5”)。示出的区
域的数目仅出于论述目的且可视情况而变化。图示的分配空间20的区域单独地专用于特定线程和/或活动。例如,第二区域20b和第三区域20c可专用于第一线程(“线程1”),第四区域20d可能专用于第二线程(“线程2”),等等。在实施例中,第二区域20b和第三区域20c中的对象可在与第一线程相关联的函数之间共享,而无需进行额外复制操作。类似地,第四区域20d中的对象可在与第二线程相关联的函数之间共享,而无需进行额外复制操作。如将更详细地论述的,图示的方案使得能够增强性能。
15.图2示出其中内存分配器(例如框架层运行时管理器)检测将创建新线程的函数24(回调方法“oncreate()”)的流程图22。在图示的示例中,内存分配器通过发出第一命令26(“startmemoryregion()”)来触发将内存区域专用于线程。当应用程序调用函数24时,与新线程相关联的所有对象(例如,“对象a”、“对象b”)将被分配到专用内存区域。除调用函数24之外,内存分配器可在调用线程对象中设置标志以激活基于线程的分配。在实施例中,内存分配器还将线程映射到专用内存区域。下面的表i示出了此类映射的示例。
16.ui线程id区域3区域2,区域34区域4
17.表i
18.当函数24完成分配对象时,图示的内存分配器发出第二命令28(“stopmemoryregion()”)以中止将对象专用于讨论中的内存区域。内存分配器还可清除调用线程对象中的标志,以响应于线程的终止而去激活基于线程的分配。在实施例中,内存分配器还清除适当的线程到区域表映射条目。下面示出了用于实施第一命令26和第二命令28的伪码的示例。
[0019][0020]
如果所选择区域的大小不够,那么额外的未使用区域可专用于与线程相关联的对象。在实施例中,内存分配器检查线程是否在线程分配模式下。如果否,那么内存分配器可切换为正常分配模式。否则,内存分配器查找表以找出特定区域标识符并试图将对象分配在指定区域中。如果区域已满,那么内存分配器可为线程分配另一区域并相应地更新表。下面示出了用于实施对额外区域的选择的伪码的示例。
[0021][0022]
继续参考图1和图3,线程的终止可触发专用于线程的所有区域的回收。例如,线程1的终止导致第二区域20b和第三区域20c中的所有对象被回收。在实施例中,基于来自应用程序的高级(例如上层)信息检测线程的终止。特别说明的是,可避开垃圾收集器(gc)操作,诸如其中暂停所有其他线程(例如,以允许gc收集根对象集并确定要回收哪些区域)的暂停阶段。在图示的方案中还可避开其他gc操作,诸如其中gc扫描从根集开始的所有活对象并将那些对象复制到未使用区域(例如目的地区域)的复制阶段。实际上,如果线程仅产生短期对象,那么执行gc操作的频率可能接近零。因此,在处理器使用、用户接口的未预测暂停、额外功率消耗(例如减少的电池寿命)等方面,性能增强。
[0023]
图4示出了其中内存分配器检测将终止现有线程的函数32(回调方法“ondestroy()”)的流程图33。在实施例中,函数32由以下项引起:太多应用程序在后台运行、应用程序关闭且从活跃应用程序列表中去除等。在图示的示例中,内存分配器通过发出命令34(“reclaimmemoryregion()”)来触发专用于线程的一个或多个内存区域的回收。当应用程序调用函数32时,将回收专用于线程的所有内存区域。在实施例中,内存分配器通过在表(例如表i)中查找适当线程标识符来定位针对线程的所选择区域。区域可一次回收一个。下面示出了用于实施命令34的伪码的示例。
[0024][0025]
图5示出了管理内存的方法40。方法40通常可以在诸如前面提及的内存分配器(图
1)之类的内存分配器中实施。更具体地,方法40可以以存储在以下项中的一组逻辑指令被实施为一个或多个模块:机器或计算机可读存储介质(例如随机存取存储器(ram)、只读存储器(rom)、可编程rom(prom)、固件、闪速存储器等)、可配置逻辑(例如可编程逻辑阵列(pla)、现场可编程门阵列(fpga)、复杂可编程逻辑器件(cpld))、使用电路技术(例如专用集成电路(asic)、互补金属氧化物半导体(cmos)或晶体管

晶体管逻辑(ttl)技术)的固定功能硬件逻辑、或其任何组合。
[0026]
例如,用于执行方法40中所示的操作的计算机程序代码可以按一种或多种编程语言的任何组合编写,编程语言包括面向对象的编程语言,诸如java、smalltalk、c 等,以及常规过程编程语言,诸如“c”编程语言或类似编程语言。另外,逻辑指令可能包括汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、状态设置数据、用于集成电路系统的配置数据、对电子电路系统和/或硬件原生的其他结构组件(例如,主机处理器、中央处理单元/cpu、微控制器等)个性化设置的状态信息。
[0027]
图示的处理块42检测线程的发起,其中在块44处,将第一内存区域专用于与线程相关联的对象。在实施例中,块44包括激活基于线程的分配以及将线程映射到第一内存区域。在块46处,可确定是否已发起线程的终止。如果否,那么在块46处重复图示的方法40。特别说明的是,与相同线程相关联的对象预期具有类似生命周期。因此,在检测到线程终止时,块48响应于线程的终止而进行第一内存区域的第一回收。在实施例中,方法40还包括响应于线程的终止而去激活基于线程的分配,以及将线程从第一内存区域解除映射。在一个示例中,第一内存区域为堆区域,并且第一回收避开关于堆区域的垃圾收集过程的暂停阶段和复制阶段。另外,线程可对应于用户接口(ui)活动。因此,方法40可在处理器使用、用户接口的未预测暂停、额外功率消耗(例如减少的电池寿命)等方面增强性能。
[0028]
图示的方法40可用于原生应用程序,例如c或c 应用程序,以及用于具有垃圾收集器(其自动地回收不再使用的内存)的管理的运行时应用程序。管理的运行时应用程序可包括但不限于例如html5(超文本标记语言5,例如html 5.2,w3c推荐,2017年12月14日)、javascript、c#(例如,c#7.3,微软公司,2018年5月7日)、ruby(例如,ruby 2.6.3,y.matsumoto,2019年4月17日)、perl(例如,perl 5.28.2,perl.org,2019年4月19日)、python(例如,python 3.7.3,软件基金会,2019年3月25日)、java(例如,java 10,甲骨文公司,2018年3月20日)等。
[0029]
图6示出了管理内存的另一方法50。方法50通常可以在诸如前面提及的内存分配器(图1)之类的内存分配器中实施。更具体地,方法50可以以存储在以下项中的一组逻辑指令被实施为一个或多个模块:机器或计算机可读存储介质(例如ram、rom、prom、固件、闪速存储器等)、可配置逻辑(例如pla、fpga、cpld)、使用电路技术(例如asic、cmos或ttl技术)的固定功能硬件逻辑、或其任何组合。
[0030]
图示的处理块52确定第一内存区域是否已满。如果是,那么在块54处,可将第二内存区域专用于与线程相关联的对象。另外,在块56处,可确定是否已发起线程的终止。如果否,那么在块56处重复图示的方法50。在检测到线程终止时,块58响应于线程的终止而进行第二内存区域的第二回收。因此,方法50进一步通过支持分配相对较大量的对象(例如,比堆叠大得多,并且因此消除关于堆叠溢位的担忧)的线程来增强性能。
[0031]
现在转到图7,示出了性能增强的计算系统150。系统150通常可以是电子设备/平
台的部分,该电子设备/平台具有计算功能(例如,个人数字助理/pda、笔记本计算机、平板计算机、可翻转式平板、服务器)、通信功能(例如智能手机)、成像功能(例如,相机、摄像机)、媒体播放功能(例如智能电视/tv)、可穿戴功能(例如,手表、眼镜、头饰、鞋类、珠宝)、车辆功能(例如,汽车、卡车、摩托车)、机器人功能(例如自主机器人)等,或其任何组合。在图示的示例中,系统150包括主机处理器152(例如中央处理单元/cpu),主机处理器152具有耦合到系统存储器156的集成内存控制器(imc)154。
[0032]
图示的系统150还包括输入输出(io)模块158,输入输出(io)模块158与主机处理器152和图形处理器160一起实施在作为片上系统(soc)的半导体管芯162上。图示的io模块158与例如显示器164(例如,触摸屏、液晶显示器/lcd、发光二极管/led显示器)、网络控制器166(例如,有线和/或无线nic)和大容量存储设备168(例如,硬盘驱动器/hdd、光盘、固态驱动器/ssd、闪速存储器)通信。
[0033]
在实施例中,主机处理器152和/或io模块158执行从系统存储器156和/或大容量存储设备168取回的程序指令170,以执行已论述的方法40(图5)和/或方法50(图6)的一个或多个方面。因此,图示的指令170的执行可使得计算系统150检测线程的创建,将系统存储器156中的第一内存区域专用于与线程相关联的对象,并且响应于线程的终止而进行第一内存区域的第一回收。在实施例中,第一内存区域为堆区域,并且第一回收避开关于堆区域的垃圾收集过程的至少暂停阶段和复制阶段。另外,线程可对应于(例如高性能游戏应用程序的)ui活动,该ui活动使得对象为短期的且消耗相对较大量的系统存储器156。在此情况下,图示的显示器164视觉地呈现与ui活动相关联的信息。
[0034]
如已说明的,可避开gc操作,诸如其中暂停所有其他线程(例如,以允许gc收集根对象集并确定要回收哪些区域)的暂停阶段。在图示的方案中还可避开其他gc操作,诸如其中gc扫描从根集开始的所有活对象并将那些对象复制到未使用区域(例如目的地区域)的复制阶段。因此,在处理器使用、用户接口的未预测暂停、额外功率消耗(例如减少的电池寿命)等方面,计算系统150的性能增强。
[0035]
图8示出了半导体装置172(例如,芯片、管芯、封装)。图示的装置172包括一个或多个衬底174(例如,硅、蓝宝石、砷化镓)和耦合到(一个或多个)衬底174的逻辑176(例如,晶体管阵列和其他集成电路/ic组件)。在实施例中,逻辑176实施已论述的方法40(图5)和/或方法50(图6)的一个或多个方面。因此,逻辑176可检测线程的创建,将第一内存区域专用于与线程相关联的对象,并且响应于线程的终止而进行第一内存区域的第一回收。在实施例中,第一内存区域为堆区域,并且第一回收避开(例如避免)关于堆区域的垃圾收集过程的至少暂停阶段和复制阶段。因此,在处理器使用、用户接口的未预测暂停、额外功率消耗(例如减少的电池寿命)等方面,装置172的性能增强。
[0036]
逻辑176可至少部分地实施于可配置逻辑或固定功能硬件逻辑中。在一个示例中,逻辑176包括定位(例如嵌入)于(一个或多个)衬底174内的晶体管沟道区域。因此,逻辑176与(一个或多个)衬底174之间的接口可不为突变结。逻辑176还可被视为包括在(一个或多个)衬底174的初始晶片上生长的外延层。
[0037]
图9图示了根据一个实施例的处理器核心200。处理器核心200可以是任何类型的处理器(诸如微处理器、嵌入式处理器、数字信号处理器(dsp)、网络处理器)或用于执行代码的其他设备的核心。尽管在图9中仅图示了一个处理器核心200,但处理元件可替代地包
括不止一个图9中图示的处理器核心200。处理器核心200可以是单线程核心,或针对至少一个实施例,处理器核心200可以是多线程的,这在于其对于每个核心可包括不止一个硬件线程上下文(或“逻辑处理器”)。
[0038]
图9还示出了耦合到处理器核心200的存储器270。如所属领域的技术人员所了解或另外可获得的,存储器270可以是各种存储器(包括内存层次结构的各个层)中的任一个。存储器270可包括待由处理器核心200执行的一个或多个代码213指令,其中代码213可实施已论述的方法40(图5)和/或方法50(图6)。处理器核心200遵循由代码213指示的指令的程序序列。每个指令可以进入前端部分210且由一个或多个解码器220处理。解码器220可以生成微操作(例如预定格式的固定宽度微操作)作为其输出,或可以生成其他指令、微指令或反映原始代码指令的控制信号。图示的前端部分210还包括寄存器重命名逻辑225和调度逻辑230,其通常分配资源并对与用于执行的转换指令相对应的操作进行排队。
[0039]
处理器核心200被示出为包括具有一组执行单元255

1至255

n的执行逻辑250。一些实施例可包括专用于特定函数或函数集的许多执行单元。其他实施例可包括仅一个执行单元或可执行特定函数的一个执行单元。图示的执行逻辑250执行由代码指令指定的操作。
[0040]
在完成由代码指令指定的操作的执行之后,后端逻辑260引退代码213的指令。在一个实施例中,处理器核心200允许指令的乱序执行但要求有序引退。引退逻辑265可采取如所属领域的技术人员所知的各种形式(例如重排序缓冲器等)。以此方式,处理器核心200在代码213的执行期间至少在由解码器生成的输出、由寄存器重命名逻辑225利用的硬件寄存器和表以及由执行逻辑250修改的任何寄存器(未示出)方面转变。
[0041]
尽管图9中未图示,但处理元件可包括芯片上的其他元件以及处理器核心200。例如,处理元件可包括内存控制逻辑连同处理器核心200。处理元件可包括i/o控制逻辑和/或可包括集成有内存控制逻辑的i/o控制逻辑。处理元件还可包括一个或多个缓存。
[0042]
现参考图10,示出了根据实施例的计算系统1000实施例的框图。图10中示出了包括第一处理元件1070和第二处理元件1080的多处理器系统1000。尽管示出了两个处理元件1070和1080,但应理解,系统1000的实施例也可包括仅一个此类处理元件。
[0043]
系统1000被图示为点对点互连系统,其中第一处理元件1070和第二处理元件1080经由点对点互连1050耦合。应理解,图10中图示的任何或所有互连可实施为多点分支总线而非点对点互连。
[0044]
如图10中所示,处理元件1070和1080中的每一个可以是多核心处理器,包括第一处理器核心和第二处理器核心(即处理器核心1074a和1074b以及处理器核心1084a和1084b)。此类核心1074a、1074b、1084a、1084b可配置成以与上文结合图9所论述的方式类似的方式执行指令代码。
[0045]
每个处理元件1070、1080可包括至少一个共享缓存1896a、1896b。共享缓存1896a、1896b可分别存储由处理器的一个或多个组件(例如核心1074a、1074b和1084a、1084b)利用的数据(例如指令)。例如,共享缓存1896a、1896b可以本地缓存存储器1032、1034中存储的数据以用于由处理器的组件更快速存取。在一个或多个实施例中,共享缓存1896a、1896b可包括一个或多个中级缓存(例如2级(l2)、3级(l3)、4级(l4)、或其他级的缓存),末级缓存(llc),和/或其组合。
[0046]
尽管示出了仅具有两个处理元件1070、1080,但应理解,实施例的范围不限于此。
在其他实施例中,一个或多个额外处理元件可存在于给定处理器中。替代地,处理元件1070、1080中的一个或多个可以是除处理器外的元件,诸如加速器或现场可编程门阵列。例如,(一个或多个)额外处理元件可包括与第一处理器1070相同的(一个或多个)额外处理器,与第一处理器1070异质或不对称的(一个或多个)额外处理器、加速器(例如图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列或任何其他处理元件。在包括架构特性、微架构特性、热特性、功率消耗特性等优点的度量光谱方面,在处理元件1070、1080之间可存在各种差异。这些差异可有效地使其显现为处理元件1070、1080当中的不对称和异质性。针对至少一个实施例,各种处理元件1070、1080可驻留于同一管芯封装中。
[0047]
第一处理元件1070还可包括内存控制器逻辑(mc)1072和点对点(p

p)接口1076和1078。类似地,第二处理元件1080可包括mc 1082和p

p接口1086和1088。如图10中所示,mc 1072和1082将处理器耦合到相应存储器(即存储器1032和存储器1034),这些存储器可以是本地附接到相应处理器的主存储器的一些部分。尽管mc 1072和1082被图示为集成到处理元件1070、1080中,但针对替代实施例,mc逻辑可以是处理元件1070、1080外部而非集成到其中的分立逻辑。
[0048]
第一处理元件1070和第二处理元件1080可分别经由p

p互连1076、1086耦合到i/o子系统1090。如图10中所示,i/o子系统1090包括p

p接口1094和1098。此外,i/o子系统1090包括接口1092以使i/o子系统1090与高性能图形引擎1038耦合。在一个实施例中,总线1049可用于将图形引擎1038耦合到i/o子系统1090。替代地,点对点互连可耦合这些组件。
[0049]
进而,i/o子系统1090可经由接口1096耦合到第一总线1016。在一个实施例中,第一总线1016可以是外围组件互连(pci)总线,或诸如pci高速总线或另一第三代i/o互连总线之类的总线,但实施例的范围不限于此。
[0050]
如图10中所示,各种i/o设备1014(例如,生物扫描器、扬声器、相机、传感器)可连同总线桥1018耦合到第一总线1016,该总线桥1018可将第一总线1016耦合到第二总线1020。在一个实施例中,第二总线1020可以是低引脚数(lpc)总线。在一个实施例中,各种设备可耦合到第二总线1020,包括例如键盘/鼠标1012、(一个或多个)通信设备1026和数据存储单元1019,诸如磁盘驱动器或可包括代码1030的其他大容量存储设备。图示的代码1030可实施已论述的方法40(图5)和/或方法50(图6),并且可类似于已论述的代码213(图9)。此外,音频i/o 1024可耦合到第二总线1020,并且电池1010可以向计算系统1000供电。
[0051]
注意,其他实施例是预期的。例如,代替图10的点对点架构,系统可实施多点分支总线或另一此类通信拓扑。此外,图10的元件可替代地使用比图10中所示更多或更少的集成芯片来划分。
[0052]
额外说明和示例
[0053]
示例1包括一种性能增强的计算系统,包括:显示器;处理器,耦合到显示器;以及存储器,耦合到处理器,存储器包括一组可执行程序指令,指令在由处理器执行时使得计算系统:检测线程的创建,将第一内存区域专用于与线程相关联的对象,并且响应于线程的终止而进行第一内存区域的第一回收。
[0054]
示例2包括示例1所述的计算系统,其中第一内存区域为堆区域,并且第一回收将避开关于堆区域的垃圾收集过程的暂停阶段和复制阶段。
[0055]
示例3包括示例1所述的计算系统,其中,为了将第一内存区域专用于与线程相关
联的对象,可执行程序指令在被执行时使得计算系统:激活基于线程的分配;并且将线程映射到第一内存区域。
[0056]
示例4包括示例3所述的计算系统,其中可执行程序指令在被执行时使得计算系统:响应于线程的终止而去激活基于线程的分配;并且将线程从第一内存区域解除映射。
[0057]
示例5包括示例1所述的计算系统,其中可执行程序指令在被执行时使得计算系统:响应于确定第一内存区域已满而将第二内存区域专用于与线程相关联的对象;并且响应于线程的终止而进行第二内存区域的第二回收。
[0058]
示例6包括示例1至5中任一项所述的计算系统,其中线程用于对应于用户接口活动,并且其中显示器用于视觉地呈现与用户接口活动相关联的信息。
[0059]
示例7包括一种半导体装置,包括:一个或多个衬底;以及逻辑,耦合到一个或多个衬底,其中逻辑至少部分地实施于可配置逻辑或固定功能硬件逻辑中的一个或多个中,耦合到一个或多个衬底的逻辑用于:检测线程的创建;将第一内存区域专用于与线程相关联的对象;并且响应于线程的终止而进行第一内存区域的第一回收。
[0060]
示例8包括示例7所述的装置,其中第一内存区域为堆区域,并且第一回收将避开关于堆区域的垃圾收集过程的暂停阶段和复制阶段。
[0061]
示例9包括示例7所述的装置,其中,为了将第一内存区域专用于与线程相关联的对象,耦合到一个或多个衬底的逻辑用于:激活基于线程的分配;并且将线程映射到第一内存区域。
[0062]
示例10包括示例9所述的装置,其中耦合到一个或多个衬底的逻辑用于:响应于线程的终止而去激活基于线程的分配;并且将线程从第一内存区域解除映射。
[0063]
示例11包括示例7所述的装置,其中耦合到一个或多个衬底的逻辑用于:响应于确定第一内存区域已满而将第二内存区域专用于与线程相关联的对象;并且响应于线程的终止而进行第二内存区域的第二回收。
[0064]
示例12包括示例7至11中任一项所述的装置,其中线程用于对应于用户接口活动。
[0065]
示例13包括至少一个计算机可读存储介质,包括一组可执行程序指令,指令在由计算系统执行时使得计算系统:检测线程的创建;将第一内存区域专用于与线程相关联的对象;并且响应于线程的终止而进行第一内存区域的第一回收。
[0066]
示例14包括示例13所述的至少一个计算机可读存储介质,其中第一内存区域为堆区域,并且第一回收将避开关于堆区域的垃圾收集过程的暂停阶段和复制阶段。
[0067]
示例15包括示例13所述的至少一个计算机可读存储介质,其中,为了将第一内存区域专用于与线程相关联的对象,可执行程序指令在被执行时使得计算系统:激活基于线程的分配;并且将线程映射到第一内存区域。
[0068]
示例16包括示例15所述的至少一个计算机可读存储介质,其中可执行程序指令在被执行时使得计算系统:响应于线程的终止而去激活基于线程的分配;并且将线程从第一内存区域解除映射。
[0069]
示例17包括示例13所述的至少一个计算机可读存储介质,其中可执行程序指令在被执行时使得计算系统:响应于确定第一内存区域已满而将第二内存区域专用于与线程相关联的对象;并且响应于线程的终止而进行第二内存区域的第二回收。
[0070]
示例18包括示例13至17中任一项所述的至少一个计算机可读存储介质,其中线程
用于对应于用户接口活动。
[0071]
示例19包括一种方法,包括:检测线程的创建;将第一内存区域专用于与线程相关联的对象;以及响应于线程的终止而进行第一内存区域的第一回收。
[0072]
示例20包括示例19所述的方法,其中第一内存区域为堆区域,并且第一回收避开关于堆区域的垃圾收集过程的暂停阶段和复制阶段。
[0073]
示例21包括示例19所述的方法,其中将第一内存区域专用于与线程相关联的对象包括:激活基于线程的分配;以及将线程映射到第一内存区域。
[0074]
示例22包括示例21所述的方法,还包括:响应于线程的终止而去激活基于线程的分配;以及将线程从第一内存区域解除映射。
[0075]
示例23包括示例19所述的方法,还包括:响应于确定第一内存区域已满而将第二内存区域专用于与线程相关联的对象;以及响应于线程的终止而进行第二内存区域的第二回收。
[0076]
示例24包括示例19至23中任一项所述的方法,其中线程对应于用户接口活动。
[0077]
因此,本文中所描述的技术将活动和由活动创建的对象装进单个对象包中,并且一次性回收由对象消耗的内存(例如,而不调用gc线程)。技术可应用于任何语言且可集中于共享类似生命期的所有对象的回收。此外,技术可不对应用程序开发员施加任何额外负担(例如,可在管理的运行时框架层中进行所有修改)。技术对于用户也是透明的(例如,对用户体验没有负面影响)并支持对象在函数之间的共享而无额外的复制操作(例如,如在线程内存分配器中和/或资源分配是初始/raii方案)。
[0078]
实施例可适用于与所有类型的半导体集成电路(“ic”)芯片一起使用。这些ic芯片的示例包括但不限于处理器、控制器、芯片组组件、可编程逻辑阵列(pla)、内存芯片、网络芯片、片上系统(soc)、ssd/nand控制器asic等。另外,在一些附图中,信号导线用线表示。一些可以是不同的以指示更多构成信号路径,具有数字标记以指示构成信号路径的数量,和/或在一个或多个端具有箭头以指示主要信息流方向。然而,这不应以限制方式解释。而是,此类增加的细节可结合一个或多个示例性实施例来使用以促进更容易理解电路。任何表示的信号线(不论是否具有额外信息)可实际上包括可在多个方向上行进的一个或多个信号,并且可用任何合适类型的信号方案(例如用差分对实施的数字或模拟线、光纤线和/或单端线)来实施。
[0079]
示例大小/模型/值/范围可能已给出,然而实施例不限于此。由于制造技术(例如光刻)日益成熟,预期可制造尺寸更小的设备。另外,出于说明和论述的简化目的,且为了不混淆实施例的某些方面,熟知的到ic芯片和其他组件的电/接地连接可以在图中示出或可以不在图中示出。此外,可以框图形式示出布置,以避免混淆实施例,并且还鉴于以下事实:关于此类框图布置的实施的细节高度取决于在其内实施实施例的平台,即,此类细节应很好地在所属领域的技术人员的视野内。在阐述具体细节(例如电路)以描述示例实施例的情况下,对所属领域的技术人员而言应显而易见的是,实施例可在没有这些具体细节的情况下或利用这些具体细节的变化来实践。因此将描述视为说明性的而非限制性的。
[0080]
术语“耦合”可用于本文中以指代讨论中的组件之间的任何类型的直接或间接关系,并且可适用于电连接、机械连接、流体连接、光连接、电磁连接、机电连接或其他连接。另外,术语“第一”、“第二”等可用于本文中以仅便于论述,并且不具有特定时间或时间顺序意
义,除非另有说明。
[0081]
如本技术中和权利要求书中使用的,由术语“...中的一个或多个”连接的一系列项目可意指所列术语的任何组合。例如,短语“a、b或c中的一个或多个”可意指a、b、c;a和b;a和c;b和c;或a、b和c。
[0082]
所属领域的技术人员将根据前述描述了解,可以各种形式实施实施例的广泛技术。因此,尽管已结合实施例的特定示例来描述实施例,但实施例的真实范围不应受限于此,这是因为在学习附图、说明书和所附权利要求书后,其他修改将变得对技术人员显而易见。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献