CN100437515C - 垃圾收集*** - Google Patents
垃圾收集*** Download PDFInfo
- Publication number
- CN100437515C CN100437515C CNB2004800077351A CN200480007735A CN100437515C CN 100437515 C CN100437515 C CN 100437515C CN B2004800077351 A CNB2004800077351 A CN B2004800077351A CN 200480007735 A CN200480007735 A CN 200480007735A CN 100437515 C CN100437515 C CN 100437515C
- Authority
- CN
- China
- Prior art keywords
- thread
- mentioned
- pointer
- release
- storage
- 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
Images
Classifications
-
- 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
- G06F12/0269—Incremental or concurrent garbage collection, e.g. in real-time systems
-
- 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/448—Execution paradigms, e.g. implementations of programming paradigms
-
- 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/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99952—Coherency, e.g. same view to multiple users
- Y10S707/99953—Recoverability
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99956—File allocation
- Y10S707/99957—Garbage collection
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
- Refuse Collection And Transfer (AREA)
- Sink And Installation For Waste Water (AREA)
- Apparatus For Radiation Diagnosis (AREA)
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明目的在于不会加长AP的所有线程停止期间,并抑制垃圾收集所需时间的增加,在由多个线程构成的面向对象的程序的执行过程中,具备:按照顺序选择多个线程的选择单元;实施如下检查处理的检查单元,该检查处理为停止被选择线程的执行、从该线程检出可以访问的对象并作为非释放对象进行管理、重新开始该线程的执行;检测单元,在上述选择单元进行的上述选择开始之后,在通过执行中的线程检测到对象指针被作为处理对象的情况下,将该对象指针所指示的对象作为非释放对象进行管理;释放单元,对于所有的上述多个线程,在上述检查处理结束之后,释放除作为非释放对象进行管理的对象之外的对象所对应的存储区域。
Description
技术领域:
本发明涉及由应用程序(AP:Application Program)所使用的存储器中的垃圾收集(GC:Garbage Collection)。
背景技术
在现有的面向对象的程序语言中,有的采用使AP的创建者意识不到存储区域的分配和释放,在使用AP之后把没用的对象(也叫“对象实例”)所对应的存储区域的释放交给执行环境方的方法。例如Java语言。Java是美国太阳微***(Sun Microsystems)公司的商标。
使用这种语言所记述的AP,在具备垃圾收集(GC)机构的执行环境中工作,这种垃圾收集机构可以自动释放没用的对象所对应的存储区域。
GC机构,在执行AP之际动态检测出被分配的对象所对应的存储区没有从任何地方被参照的状态,并释放这个存储区域,使其置于可再利用状态。
多线程结构的AP中,各线程分别和堆栈区对应,在动作过程中,或者在堆栈区内存储数据,或者参照存储的数据,或者生成对象。生成对象的情况,通常,在堆栈区内存储其对象的指针,也就是说存储指示其对象在存储器内的所在位置的数据(下面叫作“对象指针”),由线程对对象的访问是参照其对象指针来进行的。而且,通常,在对象的区域内也存储面向其它对象的对象指针。
在某一个时刻,由AP所参照的所有对象,可以从对应AP各线程的各堆栈区内所包含的对象指针、直接或者通过1个以上的对象内的对象指针,进行追寻(辿る)。
相对应地,GC装置基本上把某一个时刻中从堆栈区内的对象指针不能追寻的对象所对应的存储区作为无用区设为释放对象。
作为现有的GC方式所熟知的标记和清除(Mark and Sweep)方式是,对从指定的对象指针追寻的所有对象进行标记赋予处理之后,扫描所有的对象,释放没有标记的对象所对应的存储区域的方式。
在执行多线程结构的AP时进行这种标记和清除方式的GC情况下,以GC的迅速性最为优先,简单地停止所有线程之后,进行向由对应各线程的堆栈区内的对象指针追寻的所有对象赋予标记的处理,之后解除所有线程的停止,释放不带标记的对象,这样就产生了如下问题。
也就是说,有可能拉长AP所有线程停止的时间,这种情况下,对用户的操作等不显示任何反应,例如,计算机显示器的显示内容是没有变化的状态,使用户感到困惑等问题。
作为解决这个问题的方式,在日本专利第3027845号公报上,提出了并不全部停止多线程结构的AP而执行使用这种标记和清除的GC的方式。
这个方式是,对从根节点对象所追寻的所有对象以及从每个线程的各堆栈区内的对象指针所追寻的所有对象,进行赋予标记的第1处理,在这个第1处理中,由于AP的线程(下面称作“AP线程”)的动作面向对象的对象指针移动时,把表示这个对象的数据存储在标记堆栈区内,在赋予这个标记的处理结束之后的阶段,还进行对从标记堆栈追寻的所有对象赋予标记的第2处理,最后释放没有标记的对象所对应的存储区域。
但是,在上述并不全部停止AP的标记赋予方式中,因AP线程的动作,堆栈区内的数据变化,因此,在第1处理中,对从堆栈区内的对象指针所追寻的对象赋予标记的处理中的一部分有可能无用。
例如,进行GC的线程,检测出AP的1个堆栈区内的对象指针(这里命名为“对象指针A”),在对从这个对象指针追寻的对象执行赋予标记处理(这里命名为“处理A”)的期间,对应这个堆栈区的AP线程复制对象指针A或者复制这些对象内的1个或多个对象指针,在堆栈区内进行新的存储的动作,此时,进行GC的线程在这个处理A结束之后,再次进行一部分和处理A重复的处理,或者不得不特意进行为防止这个重复的核对处理,这将是无用的。这个无用处理,无端增加从GC开始到结束为止所需要的CPU时间,降低了CPU的使用效率。
发明内容
于是,本发明正是鉴于上述问题而做出的,其目的在于提供一种使用GC方式的垃圾收集(GC)***,其中该GC方式不会拉长AP的所有线程停止的时间,并且可以在某种程度上抑制从GC开始到结束为止所需要的CPU时间的无端增加。
为了达到上述目的,有关本发明的GC***,在由多个线程组成的面向对象的程序的执行过程中,释放不再需要的对象所对应的存储区域,其特征在于,具备:按照顺序选择多个线程中的每一个的选择单元;实施由以下步骤组成的检查处理的检查单元,这些步骤为,对于被选择的线程,停止该线程的执行,从该线程通过参照对象指针检测出可以访问的对象,把该检测的对象作为非释放对象进行管理,并重新开始该线程的执行;检测单元,在上述选择单元进行的上述选择开始之后,当从执行中的线程检测到对象指针被作为处理对象时,把该对象指针所指示的对象作为非释放对象进行管理;释放单元,对于上述多个线程的全部,当上述检查处理结束之后,释放作为非释放对象管理的对象之外的对象所对应的存储区域。
这里,对象指针因线程而被作为处理对象,意味着在由CPU进行的线程处理过程中执行了将对象指针作为处理对象的指令。
而且,将对象作为非释放对象进行管理指的是,例如,通过把这个对象指针从来(from)表(from table)移动到去(to)表(to table)的后述方法等实现标记赋予。
由此,对于可以由AP线程通过堆栈内或者对象内的对象指针追寻的对象的作为非释放对象的指定过程、也就是说标记赋予的过程中,因为停止了这个AP线程,所以不会发生该AP线程动作而引起堆栈区内的数据变化这种情况,这个过程中没有了标记赋予变得无用的危险性,关于这一点,可以防止CPU的使用效率低下。
而且,由此,因为不是停止所有的AP线程而进行上述标记赋予,所以,可以防止AP的所有线程停止期间的拉长。而且,对于由未停止所有AP线程引起的对于对象的参照状态的变化,由于由执行中的线程监视对象指针被作为处理对象的情况来进行应对,所以,对于从任何一个线程可以访问的对象,势必作为非释放对象进行管理。
而且,上述检测单元,限于执行中的线程还没有进行检查处理的情况进行上述检测,上述检测单元,也可以具备如下单元,即:在进行了上述检测的情况下,把由于执行中的该线程而被作为处理对象的对象指针以及可以从该对象指针追寻的对象内的对象指针,保存在对应该线程的作业用存储区的检测部;和在由于上述检查单元而使线程的执行停止期间,把可以从对应该线程的作业用存储区内的对象指针追寻的对象,作为非释放对象进行管理的管理部。
由此,仅在线程被作为后述的参照处理对象之前的期间,也就是说,仅在线程被作为相当于向存储在对应该线程的堆栈内等的对象指针所指示的对象赋予标记的处理的对象之前的期间,才检测依据解释器执行这个线程时对象指针被作为依据线程的处理对象的情况,并进行存储在作业用存储区中、即、存储在对象参照信息的存储区中的处理,所以,一旦线程被作为参照处理的对象之后,该线程在依据解释器执行时,由于没有其检测,就可以更高速地工作。
另外,上述检查处理是内容为反复下述步骤的处理,该步骤为,把对应于被选择的该线程的堆栈内的对象指针所指示的对象、作为上述可以访问的对象而检出之际,只要检测到的该对象尚未作为非释放对象来管理、且该对象内还有对象指针,就将该对象指针所指示的对象作为进一步能访问的对象检测出来的步骤;上述选择单元在最初的选择之后,由上述检查单元进行上述检查处理之后,在上述多个线程中,只要还有没有实施上述检查处理的线程,就重新进行选择,上述选择单元参照有关各线程的信息,根据预定的线程选择条件,进行上述选择也可以。
由此,可以防止已经作为非管理对象而被管理的对象名下的对象,作为重复检测的处理对象。而且,通过不做这个重复检测的处理结构,作为参照处理的对象,比起早期选择的线程,稍后选择的线程在参照处理上所花费的时间缩短的可能性高,因此,鉴于被各线程请求的应答性能,可以事先确定线程的选择条件,做某种程度的控制,使得各线程发挥适当的应答性能地来执行。
而且,上述线程选择条件包括表示与线程状态为等待(Wait)状态以外的线程相比,先选择线程状态是等待状态的线程的条件;也可以使上述选择单元在进行上述选择的时刻,只要有等待状态的线程,就选择该等待状态的线程。
由此,就成了停止处于等待状态的线程,因此就可以抑制对于处于当前动作状态的AP线程的负面影响的产生。
另外,上述线程选择条件也可以包含表示与线程优先度高的线程相比,先选择线程优先度低的线程的条件。
由此,线程优先度高的线程参照处理以短时间完成的可能性增大,可以在某种程度上防止执行性能的低下。
另外,上述线程选择条件,还可以包含表示与对应线程的堆栈尺寸大的线程相比,先选择堆栈尺寸小的线程的条件。
由此,存储对象指针的堆栈的有效范围越小参照处理所需要的时间越短,其中的对象指针指向可以从线程访问的对象,鉴于具有的这个倾向,可以得到在某种程度上平均各线程停止时间的效果,可以在某种程度上回避特定的线程应答性和其他比起来明显变坏的情况。
另外,上述垃圾收集***具备使用存储管理单元(MMU)管理存储器的存储管理机构,每当有生成对象的需要时,由上述存储管理机构分配对应该对象的存储区,上述释放单元也可以通过上述存储管理机构进行存储区域的释放。
由此,对于由使用MMU的存储管理机构分配的C语言及其他语言的程序的数据区等给予同等定位,以此分配对应于对象的存储区域,因此,假设和进行单独管理特定的堆区(heap area)、把该堆区内的一部分作为对象的存储区域来分配的控制的情况比较,可以得到如下的有利效果,即没有必要在对象生成前开始分配没用的大的堆区,对于该堆区没有必要进行存储压缩处理。
附图说明
图1是有关本发明实施方式1的GC***的功能方框图;
图2是例示对象和对象指针之间关系的图;
图3是表示来(from)表及去(to)表的图;
图4A是表示参照处理前的来(from)表状态的图;
图4B是表示参照处理后的来(from)表及去(to)表的状态的图;
图5是表示线程信息、堆栈及对象参照信息的图;
图6是表示参照处理和AP线程的状态之间的关系的图;
图7是表示线程选择条件的内容的图;
图8是表示GC控制处理的流程图;
图9是表示对象线程确定处理的流程图;
图10是表示共享对象参照处理的流程图;
图11是表示对象线程参照处理的流程图;
图12是表示参照处理的流程图;
图13是表示指令执行处理的流程图;
图14是表示对象链追踪处理的流程图;
图15是有关本发明实施方式2的GC***的功能方框图;
图16是表示线程信息及堆栈的图;
图17是表示有关实施方式2的GC控制处理的流程图;
图18是表示有关实施方式2的指令执行处理的流程图;
图19是表示现有的由Java执行环境管理的Java对象、和与C语言程序中的数据的存储配置的图。
具体实施方式
实施方式1
下面使用图示说明有关本发明实施方式1的垃圾收集(GC)***。
【1-1结构】
图1是有关本发明实施方式1的GC***的功能方框图。
GC***10是在具备CPU、存储器等的计算机中,通过CPU执行存储在存储器中的控制程序来实现的***,其包括进行多线程控制的一般操作***(OS:Operating System)及所谓的虚拟机,并作为以Java语言等创建的应用程序的执行环境而被定位。
GC***10如图1所示,具备:解释器100、对象管理部200、线程管理部300及GC部400。
这里,解释器100基本上是作为编译器担当执行AP的功能,具有指令执行部110及对象参照检测部120。
对象管理部200,担当管理对象的功能,具有作为与来(from)表221、去(to)表222等对应的存储区域的对象管理信息存储部210、对象生成部230、表切换部240。
而且,来(from)表221是定位为存储针对应于GC开始前存在的所有对象的对象指针的表,去(to)表222是为了存储对应于标记和清除方式中的添加了标记的对象的对象指针而利用的表。关于这些表,后面详细说明。
线程管理部300实现多线程控制,并担当管理线程的功能,具有:线程控制部310,和按每个AP线程的与线程320、对象参照信息330及堆栈340相对应的存储区域。
而且,线程信息320包含GC标志,该GC标志为在GC处理全体的开始时刻置于ON、在对于AP线程的参照处理一结束就置于OFF状态。参照处理相当于面向对象的标记赋予处理,是为了参照对象,把与存储在堆栈内等的对象指针内容相同的对象指针从来(from)表移动到去(to)表为主要内容的处理。
GC部400基本上相当于所谓的垃圾收集器,具有GC控制部410、线程选择条件存储部420、参照处理部430及释放部440。以这个GC部400为中心进行的GC,基本上使用标记和清除方式,是顺序选择成为参照处理对象的AP线程、停止选择的AP线程、在进行参照处理之后再解除其停止的方式。
解释器100中的指令执行部110,逐次解释并执行构成AP线程的指令串,并具有在指令是对象的生成指令的情况下使对象生成部230生成对象的功能。
对象参照检测部120具有如下功能,即,仅限于GC标志是ON的情况,当由指令执行部110执行的线程内的指令是把对象的对象指针作为处理对象的指令时,把这个对象指针存储在对象参照信息330的存储区中。
对象管理部200中的对象生成部230,具有如下功能,即,参照所谓的类文件等对象的定义信息,对现有的OS的存储管理机构,通过请求为对象分配所需要量的存储区域,在存储器内生成对象。而且,GC***10还包括利用存储管理单元(MMU)把物理上的存储器和逻辑地址空间对应起来,并管理存储器的分配及释放的现有的OS存储管理机构,这个存储管理机构具有如下功能,即,如果被请求分配一定量的存储区,则在逻辑地址空间内的未使用空间中,把被请求量的存储区域作为分配的区域进行管理,并返回该分配的存储区域的开头地址。相应地,对象生成部230通过存储管理机构分配对应于对象的逻辑地址空间内的区域,由此在存储器内生成对象。
而且,在该逻辑地址空间中,除了由解释器100执行的、由Java语言等创建的AP中的对象之外,还配置了不通过解释器100而在现有的一般的OS直接控制下执行的程序数据、即、例如和由编译器等已经变为执行形式的程序有关的数据(下面称作“本机(Native)数据”)。没有通过解释器100的可执行形式的程序,为了配置本机(Native)数据通过现有的OS的存储管理机构分配存储区域,在这里以和配置本机(Native)数据一样的结构,分配关于由对象生成部230生成的对象的存储区域。
这样的本机(Native)数据和与此相关的程序,和作为GC***10特征的GC的动作没有直接关系,所以这里省去详细说明。
而且,上述的AP线程指的是,作为通过解释器100而执行的AP的执行单位的线程,也就是说指的是除了作为有关本机(Native)数据的程序的执行单位的线程以外的线程。而且,这里所说的对象不包括本机(Native)数据。
表切换部240具有产生如下效果的功能,即,通过交换用于指向来(from)表的指针和用于指向去(to)表的指针,产生等效于瞬间交换来(from)表的内容和去(to)表的内容的效果。
线程管理部300中的线程控制部310进行多线程控制,并行执行包括组成AP的各AP线程及GC处理的线程在内的各线程。也就是说,线程控制部310在每个微小时间内切换各线程并执行。而且,线程管理部300也并行执行有关本机(Native)数据的程序的线程,但这个多线程控制的功能基本上是现有的OS等具有的功能,和作为GC***10特征的GC的动作没有直接关系,所以,这里主要是只关注于AP线程及GC处理线程并进行说明。
GC部400中的线程选择条件存储部420是存储线程选择条件的存储区,该线程选择条件表示用于选择成为进行参照处理的对象的AP线程的条件。
参照处理部430具有进行参照处理的功能,释放部440具有如下功能,即:释放没有赋予标记的对象,也就是说,释放GC结束阶段中残存在来(from)表221中的对象指针所指示的对象所对应的存储区域。该存储区域的释放通过指定对象指针也就是说指定对象的逻辑地址,并对利用了MMU的现有OS存储管理机构提出释放请求来实现。而且,GC***10中包含的现有OS存储管理机构,针对指定了逻辑地址的释放请求,把和这个逻辑地址对应起来管理的分配区域,作为在需要重新分配存储空间时可以进行分配的未使用空间来管理。
而且,GC控制部410具有执行GC控制处理的功能。也就是说,GC控制部410通过参照线程选择条件,选择1个作为参照处理对象的AP线程,对于选择了的AP线程,线程控制部310停止AP线程之后,使参照处理部430根据对应这个AP线程的堆栈及对象参照信息进行参照处理,之后,使线程控制部310解除选择的AP线程的停止,然后进行下一个AP线程的选择,重复这些步骤一直到不存在未处理的AP线程,之后使释放部440对没有赋予标记的对象进行释放。
【1-2数据】
下面,说明关于GC***10中所处理的数据。
图2是例示对象和对象指针之间的关系的图。
该图中,对象指针用涂黑的小实心圆表示。
指示对象、也就是说指示配置在对应存储器500的逻辑地址空间上的对象所处位置的对象指针,可以存在于对象内、堆栈内、或者共享对象管理信息353内。这里,共享对象管理信息353是包含针对作为AP执行环境的虚拟机中为了需要而分配的对象群的对象指针群的数据。
图2的例子中,处在共享对象管理信息353内的对象指针所指示的是对象201c。
而且,处在对应AP线程351的堆栈内的对象指针所指示的是对象201a,也就是说以对象201a的存储地址为内容,而且,其他的对象指针指示的是201d。因此,AP线程351在执行中通过参照这些对象指针,处于可以访问对象201a、对象201d的状态。
而且,处在对应AP线程352的堆栈内的对象指针指示的是对象201b,作为对象201b内的数据,包含了指示对象201e的对象指针。因此,AP线程352通过追寻这些对象指针处于可以访问对象201e的状态。
另外,图2中,除了表示对应通过解释器100执行的以Java语言等创建的AP的对象201a~201e之外,还表示同样通过OS存储器管理机构分配了区域的本机(Native)数据501a~501d混合存在于存储器500之内的情况。也就是说,总结起来,对象201a~201e不是置于某种堆区(heap area)中,而是和各本机(Native)数据一样,通过OS存储管理机构分别单独分配区域。
而且,虽然图2中没有显示,但线程信息320、堆栈340及对象参照信息330也是分配在存储器500之内的,而且,对象管理信息存储部210相当于存储器500中的一部分。而且,通过解释器100执行的AP程序部分,和访问本机(Native)数据的程序部分,可以置于可读写的存储器(RAM)中,也可置于只读的存储器(ROM)中。
图3是表示来(from)表及去(to)表的图。
存储器500内的对象管理信息存储部210内,设有能存储充足数量的对象指针或者空(null)值的2个表,另外,存在来(from)表指针211及去(to)表指针212。来(from)表指针211是指示2个表当中的一方的指针,去(to)表指针212是指示另外一方的指针。这里,在当前时刻来(from)表指针211所指示的表称为来(from)表,去(to)表指针212所指示的表称为去(to)表。
来(from)表221在GC开始时刻,存储对应于这个时刻存在的所有对象的所有对象指针。
而且,去(to)表222是存储在参照处理的过程中,从来(from)表221内移动出来的对象指针的表。而且,来(from)表221中的对象指针移动到去(to)表222时,存有这个对象指针的来(from)表221内的位置相当的存储内容,置于空(null)值。
图4A及图4B是表示参照处理引起的来(from)表及去(to)表的内容变化的图,图4A表示参照处理开始之前的状态,图4B表示参照处理之后的状态。
图4A中,参照处理开始之前的来(from)表221x,包含分别指示对象objA202a、对象objB202b、对象objC202c的对象指针。而且,图4A及图4B中,也表示了各对象和本机(Native)数据混合存在于存储器500内的情况。
之后,以AP线程354为对象进行参照处理的情况下,和包含在AP线程354的堆栈内的对象指针相同值的数据,从来(from)表移动到去(to)表,其结果就是图4B表示的状态。来(from)表221y中,指示objA202a的对象指针所存在的位置和指示objC202c的对象指针所存在的位置,两方都更新为空值,去(to)表222y中,存有指示objA202a的对象指针和指示objC202c的对象指针。
图5是表示线程信息、堆栈及对象参照信息的图。
线程信息320按每个AP线程,在生成该线程时生成,其包括关于这个AP线程的信息,具体地说,包括:状态321、优先度322、对象指针323、GC开始时堆栈指针324、GC标志325、对象参照信息开头指针326及对象参照信息当前指针327。而且,AP线程生成时,不仅分配线程信息320的存储区域,也要分配堆栈340的存储区域。
线程信息320中的状态321,是表示用于多线程控制的线程状态的信息,分别表示等待(wait)状态、执行(run)状态、准备(ready)状态等。
优先度322是表示线程优先度的信息,优先度例如在线程生成时受来自AP的指定而确定。而且,在多线程控制中,如果优先度高的线程是准备(ready)状态,则要比优先度低于其的线程优先置于执行(run)状态。
堆栈指针323是表示关于该线程的堆栈内的当前有效数据范围的终端的数据。而且,在多线程控制中,线程由执行(run)状态切换为其它状态也就是停止状态时,到此时为止保存在指示对象指针的预定寄存器内的值,存储在这个堆栈指针323中,当线程切换为执行(run)状态时,这个堆栈指针323内的值设定在该预定寄存器上。
GC开始时堆栈指针324,表示GC开始时的堆栈内的有效数据范围的终端。
GC标志325在GC处理整体的开始时刻置于ON,在关于这个AP线程的参照处理结束之后置于OFF状态。
对象参照信息开头指针326表示对应该AP线程的对象参照信息的存储区的开头,在AP线程生成之际,在分配这个存储区域时设定。
另外,对象参照信息当前指针327是表示对应该AP线程的对象参照信息的存储区中,对象参照检测部120下面应存储对象指针的位置的信息,通过对象参照检测部120参照并更新。
图6是表示参照处理和AP线程状态之间关系的图。
GC线程356是执行GC控制部410的GC的线程,作为GC把各AP线程依次作为对象进行参照处理。这里例示的是按照AP线程355a、AP线程355b、AP线程355c的顺序进行参照处理的情况。
AP线程355a是进行参照处理之后的状态,处于执行中。这里所谓的执行中,指的是不是睡眠(sleep)状态也就是说不是停止状态,在每个瞬间可以变化为执行(run)状态和准备(ready)状态。
AP线程355b是参照处理正在进行当中的状态,处在停止状态。参照处理把AP线程强制置于停止状态,参照堆栈及对象参照信息进行。
AP线程355c是参照处理还没有进行的状态,处于执行中。
图7是表示线程选择条件内容的图。
线程选择条件421是优先哪个AP线程作为参照处理对象的一种判断基准的信息,由线程状态422、线程优先度423及堆栈尺寸424组成。
线程状态422是表示优先哪个状态的AP线程的信息,图7的例子表示的是等待(wait)状态的AP线程比执行(run)状态的AP线程要优先。
线程优先度423是表示是以AP线程中确定的优先度高的作为参照处理对象优先选择、还是优先选择优先度低的信息,图7的例子表示的是优先选择优先度低的情况。
而且,堆栈尺寸424是表示优先选择对应AP线程的堆栈区的有效范围尺寸大时的AP线程、还是优先选择尺寸小时的AP线程,图7的例子表示的是优先选择堆栈区的有效范围尺寸小的情况。
【1-3.动作】
下面说明GC***10的工作。
图8是表示GC控制处理的流程图。
GC控制处理根据定时器以一定周期进行。
GC控制部410首先通过交换来(from)表指针211和去(to)表指针212的内容,由此切换来(from)表和去(to)表之间的内容(步骤S11)。据此,成为指示所有当前没有被释放的对象的对象指针存储在来(from)表的状态。
接下来,GC控制部410使线程控制部310停止所有AP线程(步骤S12),把关于所有AP线程的线程信息中的GC标志325置于ON状态,把当前的堆栈指针设定为线程信息中的GC开始时堆栈指针324(步骤S13),使线程控制部310解除所有AP线程的停止(步骤S14)。步骤S13中,进一步,对每个AP线程,分配对象参照信息的存储区域,把指示这个存储区开头的指针设定为对象参照信息开头指针326及对象参照信息当前指针327。
而且,线程控制部310通过和现有OS多线程控制机构相同的方式进行线程的停止及停止解除。该线程的停止,是把线程置于停止状态也就是说置于睡眠(sleep)状态的控制,所谓线程的停止解除指的是解除睡眠(sleep)状态,返回准备(ready)状态的控制。
接着步骤S14,GC控制部410进行对于通过追寻共享对象管理信息353内的对象指针而到达的对象赋予标记的共享对象参照处理(步骤S15),并判断是否存在GC未处理线程也就是说判断是否还存在作为参照处理对象没有被选择的AP线程(步骤S16)。关于共享对象参照处理,在后面叙述。
在步骤S16中,如果是判断为存在GC未处理线程的情况,则GC控制部410进行用于确定成为参照处理对象的AP线程的对象线程确定处理(步骤S17),使线程控制部310停止其确定的AP线程(步骤S18),执行以与这个确定的AP线程有关的参照处理为内容的对象线程参照处理(步骤S19),把这个确定的AP线程的GC标志325置于OFF状态(步骤S20),使线程控制部310解除这个确定了的AP线程的停止状态(步骤S21),再次返回步骤S16的判断中。而且,关于对象线程确定处理及对象线程参照处理,后面叙述。另外,紧接着步骤S20之后,GC控制部410释放对应对象AP线程的对象参照信息的存储区域。
另外,在步骤S16中,如果是判断为不存在GC未处理线程的情况,则GC控制部410使释放部440释放没有赋予标记的对象(步骤S22),结束GC控制处理。步骤S22中,释放部440通过参照处理释放去(to)表上对象指针没有移动的对象所对应的存储区域,也就是说释放残存在来(from)表上的对象指针所指示的对象所对应的存储区域。这个释放意味着,对象生成部230通过基于利用了MMU的OS存储管理机构而进行的分配,来应对为了生成对象而分配给对象的存储区域,并释放这个被分配的存储区域。而且,这些释放的存储区域可以通过存储管理机构重新作为对象和本机(Native)数据的存储区进行分配。
图9是表示对象线程确定处理的流程图。
GC控制部410参照线程选择条件存储部420内的线程选择条件421,进行对象线程确定处理。
首先,GC控制部410参照对应各AP线程的线程信息,检索状态321处于等待(wait)状态的AP线程(步骤S31)。判断这个检索结果的线程数目(步骤S32),如果是1,则把这个检索结果的AP线程确定为参照处理的对象线程(步骤S37),结束对象线程确定处理。
另外,在步骤S32中,如果检索结果的线程数目是0,则GC控制部410检索线程优先度322最低的AP线程(步骤S33),判断检索结果线程数目是否是1(步骤S35)。另外,步骤S32中,如果检索结果线程数目是2以上,则为了从检索结果AP线程中进一步缩小检索结果,检索线程优先度322最低的AP线程(步骤S34),判断检索结果的线程数目是否是1(步骤S35)。
在步骤S35中,如果是线程数目判断为1的情况,则GC控制部410把这个检索结果的AP线程确定为参照处理的对象线程(步骤S37),结束对象线程确定处理。
而且,在步骤S35中,如果检索结果线程数目判断为不是1的情况,也就是说,存在多个优先度最低的AP线程的情况,则GC控制部410从检索结果的AP线程中检索堆栈尺寸最小的AP线程(步骤S36),把堆栈尺寸最小的AP线程确定为参照处理的对象线程(步骤S37),结束对象线程确定处理。
图10是表示共享对象参照处理的流程图。
GC控制部410关注包含对象指针群的共享对象管理信息353的开头对象指针(步骤S41),使参照处理部430进行参照处理(步骤S42),由此,在作为AP执行环境的虚拟机中,对因需要而分配的所有对象群进行标记赋予。
图11是表示对象线程参照处理的流程图。
GC控制部410关注对应于对象线程的线程信息中的GC开始时堆栈指针324所指示的位置(步骤S51),使参照处理部430进行参照处理(步骤S52),由此对可以由堆栈区内的对象指针追寻的所有对象进行标记赋予。而且,由于GC控制处理(参照图8)的开始时刻和开始这个对象线程参照处理的时刻不同,因此,GC开始时堆栈指针324所指示的位置和随后的各位置的内容,与GC开始时刻有所不同,依据后续的步骤S53及步骤S54,在GC开始以后,由于对可以由因对象线程的动作而变化的对象指针追寻的所有对象进行标记赋予,所以虽然会有标记赋予过度的情况,但不顾被参照的情况而漏掉标记赋予的事态是不会发生的。
接下来,GC控制部410关注(focus on)对象参照信息开头指针326的指示位置(步骤S53),使参照处理部430进行参照处理(步骤S54),结束对象线程参照处理。
图12是表示参照处理的流程图。
参照处理部430从所关注的存储位置,检索对象指针(步骤S61),判断是否检测出了对象指针(步骤S62),如果是检测到了的情况,则判断和这个检测出的对象指针相同值的对象指针是否在来(from)表中存在于(步骤S64),如果存在于来(from)表中,则从来(from)表向去(to)表复制这个对象指针,在来(from)表内的这个对象指针存在的位置上记录空(null)值(步骤S66),关注这个对象指针所指示的对象数据开头(步骤S67),再次返回步骤S61。
另外,在步骤S64中,如果是判断为来(from)表上不存在这个对象指针的情况,则由于已经从来(from)表移动到了去(to)表,所以参照处理部430关注正在关注的位置的下一个位置(步骤S65),再次返回步骤S61。通过步骤S65及步骤S61的组合,实现了相继检索共享对象管理信息353内的对象指针、相继检索堆栈内的对象指针、相继检索对象参照信息内的对象指针、和相继检索作为某对象内的数据成员(data member)的对象指针等。
而且,步骤S62中,如果是判断为不能检测到对象指针的情况,则参照处理部430判断关注位置是否是对象内(步骤S63)。而且,不能检测出对象指针指的是:如果关注位置处于共享对象管理信息353内则是在这个共享对象管理信息353内不能检测到对象指针;如果关注位置处于堆栈内则是在堆栈内不能检测到对象指针;如果关注位置处于对象参照信息内则是在这个对象参照信息内不能检测到对象指针;如果关注位置处于对象内则是在这个对象内不能检测到对象指针。
步骤S63中,如果是判断为关注位置处于对象内的情况,则参照处理部430着眼于关注这个对象内之前的关注位置的下一位置(步骤S68),再次返回步骤S61。通过这个步骤S68,参照处理部430将关注由步骤S67关注对象内之前所关注的对象指针的下一位置。
而且,在步骤S63中,如果是判断为关注位置不是处于对象内的情况,则参照处理部430结束参照处理。
图13是表示指令执行处理的流程图。
解释器100中的指令执行部110进行依次解释置于执行(run)状态的AP线程的程序中的指令记述并执行的指令执行处理。
首先,指令执行部110解释并执行AP线程当前执行位置中的指令(步骤S71),对象参照检测部120判断对应这个AP线程的线程信息中的GC标志325是否是ON(步骤S72),如果不是ON,则指令执行部110进行下一指令的解释执行(步骤S71)。
步骤S72中,如果是判断为GC标志325是ON的情况,则对象参照检测部120判断步骤S71中由指令执行部110执行的指令是否是把对象指针作为处理对象的指令(步骤S73),如果不是把对象指针作为处理对象的指令,则指令执行部110进行下一指令的解释执行(步骤71)。而且,把对象指针作为处理对象的指令,是把堆栈内的对象指针复制到对象内的运算作为指示内容的指令,或是把对象内的对象指针复制到其他对象内的运算作为指示内容的指令。
步骤S73中,如果判断为是把对象指针作为处理对象的指令的情况,则对象参照检测部120判断和这个对象指针相同值的数据是否已经在对象参照信息区里存储完毕(步骤S74),如果是存储完毕的情况,则指令执行部110进行下一指令的解释执行(步骤S71)。
步骤S74中,如果是和这个对象指针相同值的数据没有在对象参照信息存储区存储完毕的情况,则对象检测部120把这个对象指针存储在对象参照信息当前指针327所指示的对象参照信息中的位置上(步骤S75),关注这个对象指针所指示的对象,进行对象链追踪处理(步骤S76),之后,指令执行部110进行下一指令的解释执行(步骤S71)。
而且,步骤S71中的作为执行对象的指令如果是生成对象的指令的情况,则指令执行部110指示对象生成部230生成对象,接受该指示的对象生成部230生成对象,并且,把指示这个对象的对象指针返回给AP线程,把这个对象指针的拷贝设定在去(to)表内。
图14是表示对象链追踪处理的流程图。
对象参照检测部120判断正在关注的对象中是否存在未关注的对象指针(步骤S81),如果存在,则关注这个未关注的1个对象指针(步骤S82),把这个关注的对象指针存储在对象参照信息存储区上(步骤S83),着眼于这个关注的对象指针所指示的对象并进一步进行对象链处理(步骤S81~84)(步骤S84)。而且,在将对象指针存储在对象参照信息存储区内时,对象参照检测部120将对象参照信息当前指针恰好推进这个对象指针的尺寸的量。
另外,步骤S81中,如果判断为正在关注的对象中不存在未关注的对象指针时,则对象参照检测部120结束对象链追踪处理。
因此,由这个指令执行处理及对象链追踪处理,GC标志325是ON状态的情况下,对象指针被作为处理对象时,可以从这个对象指针追寻的对象指针的任何一个都将被存在对象参照信息的存储区上。
而且,根据以依据AP线程的对象指针作为处理对象的运算的执行,在成为不能从这个AP线程访问以这个对象指针所指示的对象的状态的情况下,也就是说,通过AP线程的动作,(a)对象指针被清除的情况下,(b)对象指针被更新为其它内容的情况下,或者(c)对象指针存在于堆栈区的有效范围内时、对象指针被变更而处于堆栈有效范围之外,基本上不能从AP线程进行访问的情况下,如果由这个AP线程,这个对象指针事先复制到从其它AP线程可以访问的地点,则需要向这个对象指针所指示的对象进行标记赋予,为此,进行上述的步骤S72~S76、步骤S81~S84的处理。
实施方式2
下面,使用图示,说明本发明实施方式2的GC***。
有关实施方式2的GC***,在依次停止AP线程而进行参照处理这一点上,基本上和实施方式1的GC***10相同。只是,有关实施方式2的GC***,主要在以下几点和GC***10不同,即:不是对于每个AP线程都具有对象参照信息和GC标志,而是以***整体综合起来具有对象参照信息和GC标志,以及把线程信息的内容缩小到多线程控制所需要的程度。
图15是本发明实施方式2的GC***的功能方框图。
图15所示的GC***20的组成要素中,对于和实施方式1中所示的GC***10相同的组成要素,标以和图1一样的标号,在这里以GC***20特有的特征为中心进行说明。而且,对于没有进行特别说明的点,GC***20和GC***10一样。
GC***20如图15所示,具备解释器1100、对象管理部200、线程管理部1300及GC部1400。
这里,解释器1100基本上是解释器,担当执行AP的功能,具备指令执行部110及对象参照检测部1120。
线程管理部1300进行多线程控制,并担当管理线程的功能,具备线程控制部310和按每个AP线程对应于线程信息1320及堆栈340的存储区域。而且,线程信息1320如图16所示,包括状态321、优先度322及对象指针323。
GC部1400基本上相当于所谓的垃圾收集器,具备GC控制部1410、线程选择条件存储部420、参照处理部1430、释放部440和对应对象参照信息1450及GC标志1460的存储区。
解释器1100中的对象参照检测部120,具有如下功能,即,限于GC标志1460是ON状态的情况,由指令执行部110执行的AP线程内的指令,如果是把对象的对象指针作为处理对象的指令时,则把这个对象指针存储在对象参照信息1450的存储区中。
以GC部1400为中心进行的GC是,基本上使用标记和清除方式,依次选择成为参照处理对象的AP线程,并停止所选择的AP线程,进行参照处理之后再解除该停止的方式。
GC部1400中的参照处理部1430,具有参照堆栈及对象参照信息1450来进行参照处理的功能。对象参照信息1450是和GC***10中的对象参照信息一样以对象指针为内容的信息,但是其并不是每一个AP线程都存在。这个对象参照信息1450的存储区上,在因为有关整个AP线程的对象参照信息检测部1120对象指针作为指令的处理对象时,存储这个对象指针。而且,线程信息1320、堆栈340、对象参照信息1450、GC标志1460,和对象以及本机(Native)数据一样,存储在包含对象管理信息存储部210的存储区上。
另外,GC控制部1410具有执行图17所示的GC控制处理的功能。
图17是表示实施方式2中的GC控制处理的流程图。而且,在这个流程中的处理步骤中,对于和实施方式1的GC控制处理相同的部分,标以和图8一样的标号来表示。
这个GC控制处理,根据定时器以一定周期进行。
GC控制部1410首先交换来(from)表指针211和去(to)表指针212的内容,由此切换来(from)表和去(to)表之间的内容(步骤S11),把GC标志1460置于ON状态(步骤S111)。
在步骤S111之后,GC控制部1410进行用于对通过追寻共享对象管理信息353内的对象指针而到达的对象赋予标记的共享对象参照处理(步骤S15),判断是否存在作为GC未处理线程、也就是说是否还存在作为参照处理对象没有被选择的AP线程(步骤S16)。
步骤S16中,如果是判断为存在GC未处理线程的情况,则GC控制部1410进行用于确定成为参照处理对象的AP线程的对象线程确定处理(步骤S17),使线程控制部310停止该确定的AP线程(步骤S18),关注对应这个确定的AP线程的堆栈指针的位置(步骤S112),使参照处理部1430执行参照处理(参照图12)(步骤S113),使线程控制部310解除这个确定的AP线程的停止(步骤S21),再次返回步骤S16的判断。
另外,步骤S16中,如果是判断为不存在GC未处理线程的情况,则GC控制部1410使线程控制部310停止所有AP线程(步骤S114),关注对象参照信息1450的存储区的开头位置(步骤S115),使参照处理部1430执行参照处理(步骤S116),把GC标志1460置于OFF状态(步骤S117),使线程控制部310解除所有AP线程的停止(步骤S118),使释放部440释放没有赋予标记的对象(步骤S22),结束GC控制处理。
这里,简单说明由解释器1100进行的指令执行处理。
图18是表示实施方式2的指令执行处理的流程图。
如该图所示,这个指令执行处理,基本上相当于从图13所示的指令执行处理去掉了步骤S76的处理。
首先,指令执行部110解释并执行AP线程当前执行位置中的指令(步骤S71),对象参照检测部1120判断GC标志1460是否是ON状态(步骤S72),如果不是ON状态,则指令执行部110进行下一指令的解释执行(步骤S71)。
步骤S72中,如果判断为GC标志325是ON状态的情况,则对象参照检测部1120判断步骤S71中由指令执行部110执行的指令是否是把对象指针作为处理对象的指令(步骤S73),如果不是把对象指针作为处理对象的指令,则指令执行部110进行下一指令的解释执行(步骤S71)。
步骤S73中,如果判断为是把对象指针作为处理对象的指令的情况,则对象参照检测部1120判断和这个对象指针相同的值的数据是否已经在对象参照信息区内存储完毕(步骤S74),如果是存储完毕的情况,则指令执行部110进行下一指令的解释执行(步骤S71)。
步骤S74中,如果是和这个对象指针相同值的数据还没有在对象参照信息的存储区内存储完毕的情况,则对象参照检测部1120把这个对象指针存储在对象参照信息中的位置处(步骤S75),之后指令执行部110进行下一指令的解释执行(步骤S71)。
这样,GC控制部1410通过参照线程选择条件,选择1个成为参照处理对象的AP线程,对于选择的AP线程,使线程控制部310停止这个AP线程,之后再使参照处理部1430根据对应这个AP线程的堆栈进行参照处理,之后使线程控制部310解除所选择的AP线程的停止,之后进行下一AP线程的选择,反复操作上述步骤直到不再存在未处理的AP线程,之后,使线程控制部310停止所有AP线程,使参照处理部1430根据对象参照信息进行参照处理,使线程控制部310解除所有AP线程的停止,使释放部440对没有赋予标记的对象进行释放。
【3.考察】
下面,对于上述本发明的GC***所管理的对象、和现有的Java执行环境中的垃圾收集器等处理的对象(下面特别称为“Java对象”)的存储区域的差异,简单进行对比说明。
有关上述实施方式1、2所示的本发明GC***中,执行意识不到分配给程序的存储空间的释放的以Java语言等面向对象的语言创建的AP之际生成对象时的存储空间的分配,和GC处理中对应这个对象的存储空间的释放,是通过使用了MMU的现有OS存储管理机构进行的。由此,针对对象所分配的存储区域,和本机(Native)数据、也就是说对由其它语言例如C语言等创建的程序的数据所分配的存储区域,在逻辑地址空间中是混合存在的。图3中表示了这种混合存在的样子。
与此相对,由现有的Java执行环境所管理的Java对象、和这里C语言程序中的数据(下面称作“C数据”)的在存储器中的存在状态,用图来表示的就是图19。
如图19所示,各C语言程序953、954通过OS存储管理机构将用于C数据921、922的存储区域分配在随机存储器(RAM)900之内。
而且,由各Java程序951、952生成的各Java对象911~913,被分配在1个堆区910内,其在堆区910内的配置管理,不是通过OS,而是通过包含垃圾收集器950的Java执行环境来进行的。为此,Java执行环境首先通过OS存储管理机制分配好堆区,并在生成对象之际,把这个堆区内的一区域分配给这个对象。这个堆区会减少其它语言程序可利用的存储空间量。
而且,Java执行环境释放对象时,把堆区内分配给这个对象的区域,作为重新分配给对象的未使用空间来管理,但是在堆区中,有必要随时进行使片断化的所有未使用空间连续起来的所谓存储压缩处理。
这一点,在实施方式1、2中所示的有关本发明的GC***中,并不是进行堆区的分配以及其内部的管理,而是,把针对对象的存储空间分配直接地通过利用了MMU的现有OS存储管理机构来进行,因此理所当然的不需要堆区内的存储压缩等。
【4.补充】
上面,关于本发明GC***,基于实施方式1、2进行了说明,但本发明当然并不限定于此。下面,说明实施方式的变形。
(1)线程选择条件按照线程状态、线程优先度、堆栈尺寸这3个条件的这个顺序优先适用,然而条件数和适用顺序等并不限于此,而且,例如把线程优先度高的作为条件或者堆栈尺寸大的作为条件也可以。
只是,如实施方式中所显示的,选择线程状态是等待(wait)状态的AP线程为参照处理对象,能达到对当前动作的AP的恶劣影响比较少的效果。而且,由参照处理(图12)的算法,对某AP线程的参照处理所花费的时间,与先进行参照处理的AP线程相比,后进行的AP线程所花费时间要短,因此,如实施方式中所示,把线程优先度低的先选择为参照处理对象,由此可以产生缩短需要即时响应性的线程优先度高的AP线程的停止时间的效果。而且,因为同样理由以及堆栈尺寸越大参照处理越需要花费时间的理由,从对应的堆栈尺寸小的AP线程起,按照顺序进行参照处理,由此产生如下效果,可以将AP线程的停止时间分散为与相同线程优先度的AP线程间的程度相等。
(2)在实施方式中,GC控制处理根据定时器以一定周期进行,但并不限定于此,在分配给AP的空的存储量比预定量少的情况下进行GC控制处理也是可以的。
(3)实施方式中所示的对象参照信息的存储区,也可以是以连续的物理地址表示的存储区,并且,也可以这样处理,即,每当在存储对象指针之际产生需要时,追加分配一定量的存储区域,这个分配的多个不连贯的存储区域在逻辑地址上连续。
(4)在实施方式1所示的GC***中,在依据解释器的指令执行处理中,如果GC标志是ON状态,则把对象指针作为处理对象时,进行在对象参照信息的存储区中保存这个对象指针的处理,在指令执行处理中,不进行内容为将和这个对象指针相同值的数据从来(from)表移动到去(to)表的参照处理,保持了依据解释器的指令执行的高速性,然而也可以在指令执行处理中进行这个参照处理。
(5)在实施方式中,从共享对象管理信息内的对象指针可以追寻的面向对象的指针,通过参照处理从来(from)表移动到去(to)表,但是即使不进行参照处理,只要由共享对象管理信息管理的对象,从释放部的释放对象中去掉即可。
(6)实施方式中所示的GC***,不仅仅是装载在计算机上,也可以装载在具备CPU的便携式终端、家电设备等中。
(7)实施方式中所示的线程控制部,在每一微小时间内切换各线程并执行,由此并行执行各线程,也就是说,是伪并行执行,但是也可以通过多线程控制中的多个处理器元件,实际地并行执行。
(8)在实施方式中,由对象生成部生成的各对象通过现有的OS存储管理机构,和各本机(Native)数据等同地,在逻辑地址空间中被分配以存储空间,然而,各对象在逻辑地址空间中的一块堆区内,进行特别管理以便分别分配存储空间也可以。该特别的管理通过利用现有的OS存储管理机制分配堆区,对应对象的生成把其内部的未分配区域分配给各对象,对应对象的释放把其内部的区域定为未分配区域来实现。在进行这个特别管理时,需要随时进行用于使这个堆区内中片断化的所有未分配区域俩许诺许的所谓存储压缩处理。而且,由此,利用堆区的方式如上述的【3.考察】所示,不一定是最合适的方式。
(9)实施方式中所示的GC***包含了现有的OS存储管理机构,但是在GC***外部,作为这个GC***的基本环境,假设存在使用MMU的管理存储器的现有OS存储管理机构,并且GC***通过这个外部的存储管理机构进行存储器的分配及释放也是可以的。
(10)使CPU执行用于实现实施方式中所示的GC***的各种功能的各种处理(参照图8~图14,图17、图18)的程序,也可以记录在记录媒体上或者通过各种通信通路等流通发布。这样的记录媒体有IC卡、光盘、软盘、ROM等。流通发布的程序,可以通过存储在具备CPU的装置中CPU可以读取的存储器上供使用,并由这个CPU执行这个程序来实现实施方式中所示的GC***的各种功能。
产业上的可利用性
有关本发明的GC***,可以作为应用程序(AP:ApplicationProgram)的创建者用意识不到存储区的分配和释放的、用于Java等面向对象的程序语言所创建的AP的计算机上的执行环境来利用。
Claims (11)
1.一种垃圾收集***,在由多个线程构成的面向对象的程序的执行过程中,释放对应于不再需要的对象的存储区域,其特征在于,具备:
选择单元,按照顺序选择多个线程中的每一个;
检查单元,实施由如下步骤组成的检查处理,这些步骤为:对于被选择的线程、停止该线程的执行,通过参照对象指针从该线程检出可以访问的对象、把该检出的对象作为非释放对象进行管理,重新开始该线程的执行;
检测单元,在通过上述选择单元进行的上述选择开始之后,在通过执行中的线程检测到对象指针被作为处理对象的情况下,将该对象指针所指示的对象作为非释放对象进行管理;以及
释放单元,在对于所有的上述多个线程的上述检查处理结束之后,释放除作为非释放对象进行管理的对象之外的对象所对应的存储区域,
上述检测单元只在对于执行中的线程尚未进行检查处理的情况下进行上述检测;
上述检测单元具备:
检测部,在进行了上述检测的情况下,将该执行中的线程中的作为处理对象的对象指针、和从该对象指针可以追寻的对象内的对象指针保存在对应于该线程的作业用存储区域中;以及
管理部,在通过上述检查单元使得线程的执行被停止期间,将从对应于该线程的作业用存储区域内的对象指针可以追寻的对象,作为非释放对象进行管理。
2.权利要求1所述的垃圾收集***,其特征在于,
在检出对应于被选择的该线程的堆栈内的对象指针所指示的对象是上述可以访问的对象时,重复执行内容为如下步骤的处理,该步骤为:检出的该对象尚未作为非释放对象进行管理,并且该对象内只要具有对象指针时,就将该对象指针所指示的对象进一步作为上述可以访问的对象检出;
上述选择单元在最初的选择之后,在由上述检查单元进行了上述检查处理之后,只要在上述多个线程之中还存在没有实施上述检查处理的线程,就进行进一步的选择;
上述选择单元参照有关各线程的信息,根据预定的线程选择条件,进行上述选择。
3.权利要求2所述的垃圾收集***,其特征在于,
上述线程选择条件,包含表示与线程状态是等待状态以外的状态的线程相比,先选择线程状态是等待状态的线程的条件;
上述选择单元只要在进行上述选择的时刻存在等待状态的线程,就选择该等待状态的线程。
4.权利要求3所述的垃圾收集***,其特征在于,
上述线程选择条件,包含表示与线程优先度高的线程相比,先选择线程优先度低的线程的条件。
5.权利要求4所述的垃圾收集***,其特征在于,
上述线程选择条件,包含表示与对应于线程的堆栈尺寸大的线程相比,先选择堆栈尺寸小的线程的条件。
6.权利要求5所述的垃圾收集***,其特征在于,
上述垃圾收集***具备利用存储管理单元来管理存储器的存储管理机构,每当需要生成对象时,通过上述存储管理机制分配对应于该对象的存储区域;
上述释放单元通过上述存储管理机构,进行存储区域的释放。
7.权利要求2的垃圾收集***,其特征在于,
上述线程选择条件,包含表示与对应于线程的堆栈尺寸大的线程相比,先选择堆栈尺寸小的线程的条件。
8.权利要求2的垃圾收集***,其特征在于,
上述线程选择条件,包含表示与线程优先度高的线程相比,先选择线程优先度低的线程的条件。
9.权利要求1所述的垃圾收集***,其特征在于,
上述垃圾收集***利用了使用存储管理单元来管理存储器的存储管理机构,每当需要生成对象时,由上述存储管理机制分配对应于该对象的存储区域,
上述释放单元通过上述存储管理机构,进行存储区域的释放。
10.一种垃圾收集方法,在计算机中,在由多个线程构成的面向对象的程序的执行过程中,释放对应于不再需要的对象的存储区域,其特征在于,具备:
选择步骤,按照顺序选择多个线程中的每一个;
检查步骤,实施由如下步骤组成的检查处理,这些步骤为:对于被选择的线程、停止该线程的执行,通过参照对象指针从该线程检出可以访问的对象、把该检出的对象作为非释放对象进行管理,重新开始该线程的执行;
检测步骤,在通过上述选择步骤进行的上述选择开始之后,在通过执行中的线程检测到对象指针被作为处理对象的情况下,将该对象指针所指示的对象作为非释放对象进行管理;
释放步骤,在对于所有的上述多个线程的上述检查处理结束之后,释放除作为非释放对象进行管理的对象之外的对象所对应的存储区域,
上述检测步骤中,只在对于执行中的线程尚未进行检查处理的情况下进行上述检测;
上述检测步骤具备以下步骤:
保存步骤,在进行了上述检测的情况下,将该执行中的线程中的作为处理对象的对象指针、和从该对象指针可以追寻的对象内的对象指针保存在对应于该线程的作业用存储区域中;以及
管理步骤,在通过上述检查步骤使得线程的执行被停止期间,将从对应于该线程的作业用存储区域内的对象指针可以追寻的对象,作为非释放对象进行管理。
11.权利要求10所述的垃圾收集方法,其特征在于,
上述计算机利用了使用存储管理单元来管理存储器的存储管理机构,在面向对象的程序的执行过程中,每当需要生成对象时,由上述存储管理机制分配对应于该对象的存储区域;
上述释放步骤中,通过上述存储管理机制进行存储区域的释放。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003187690 | 2003-06-30 | ||
JP187690/2003 | 2003-06-30 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1761949A CN1761949A (zh) | 2006-04-19 |
CN100437515C true CN100437515C (zh) | 2008-11-26 |
Family
ID=33549730
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004800077351A Expired - Fee Related CN100437515C (zh) | 2003-06-30 | 2004-06-21 | 垃圾收集*** |
Country Status (8)
Country | Link |
---|---|
US (1) | US7395285B2 (zh) |
EP (1) | EP1659496B1 (zh) |
JP (1) | JP4569926B2 (zh) |
KR (1) | KR101004483B1 (zh) |
CN (1) | CN100437515C (zh) |
AT (1) | ATE479942T1 (zh) |
DE (1) | DE602004028945D1 (zh) |
WO (1) | WO2005001695A1 (zh) |
Families Citing this family (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7174354B2 (en) * | 2002-07-31 | 2007-02-06 | Bea Systems, Inc. | System and method for garbage collection in a computer system, which uses reinforcement learning to adjust the allocation of memory space, calculate a reward, and use the reward to determine further actions to be taken on the memory space |
US7600223B2 (en) * | 2004-10-25 | 2009-10-06 | Microsoft Corporation | Abstracted managed code execution |
JP4769946B2 (ja) * | 2007-02-05 | 2011-09-07 | 国立大学法人京都大学 | メモリ管理方法、メモリ管理装置、及びメモリ管理プログラムが記録されている記録媒体 |
CN101599039B (zh) * | 2008-06-03 | 2011-11-02 | 华为技术有限公司 | 嵌入式c语言环境下异常处理方法及装置 |
US8316064B2 (en) | 2008-08-25 | 2012-11-20 | Emc Corporation | Method and apparatus for managing data objects of a data storage system |
US8291192B2 (en) * | 2008-10-30 | 2012-10-16 | Kyocera Document Solutions, Inc. | Memory management system |
US20100153675A1 (en) * | 2008-12-12 | 2010-06-17 | Microsoft Corporation | Management of Native Memory Usage |
CN101866298B (zh) * | 2009-04-14 | 2013-08-07 | 上海科泰世纪科技有限公司 | 线程托管对象的方法 |
CN102209016B (zh) * | 2010-03-29 | 2014-02-26 | 成都市华为赛门铁克科技有限公司 | 一种数据处理方法、装置和数据处理*** |
CN101894049A (zh) * | 2010-07-14 | 2010-11-24 | 中兴通讯股份有限公司 | 一种自适应回收垃圾对象的***及方法 |
CN102023891A (zh) * | 2010-12-20 | 2011-04-20 | 复旦大学 | 基于Java虚拟机的并发垃圾收集器框架 |
US8527560B2 (en) * | 2011-03-29 | 2013-09-03 | Microsoft Corporation | Conservative garbage collecting with concurrent marking and concurrent sweeping for memory management |
US9317218B1 (en) | 2013-02-08 | 2016-04-19 | Emc Corporation | Memory efficient sanitization of a deduplicated storage system using a perfect hash function |
US9430164B1 (en) | 2013-02-08 | 2016-08-30 | Emc Corporation | Memory efficient sanitization of a deduplicated storage system |
JP6078515B2 (ja) * | 2014-11-13 | 2017-02-08 | 京セラドキュメントソリューションズ株式会社 | 電子機器およびプログラム |
US9852046B1 (en) * | 2015-05-07 | 2017-12-26 | Cadence Design Systems, Inc. | Method and system for automated debugging memory allocation and memory release |
CN105739466B (zh) * | 2016-02-29 | 2018-09-04 | 广西升禾环保科技股份有限公司 | 具有垃圾监控功能的用于卫生的运营作业*** |
CN108459898B (zh) * | 2017-02-20 | 2022-01-14 | 阿里巴巴集团控股有限公司 | 一种资源回收方法及装置 |
US10459656B1 (en) | 2018-06-25 | 2019-10-29 | International Business Machines Corporation | Method and apparatus to represent activation frame for pause-less garbage collection |
WO2020237621A1 (en) * | 2019-05-31 | 2020-12-03 | Intel Corporation | Avoidance of garbage collection in high performance memory management systems |
CN113449316B (zh) * | 2020-03-27 | 2023-07-18 | 武汉瓯越网视有限公司 | 一种程序的加密解密方法、装置和可读存储介质 |
US11580017B2 (en) * | 2020-04-27 | 2023-02-14 | Silicon Motion, Inc. | Method and apparatus and computer program product for preparing logical-to-physical mapping information for host side |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6490599B2 (en) * | 1998-10-07 | 2002-12-03 | International Business Machines Corporation | On-the-fly garbage collector |
US6505275B1 (en) * | 2000-07-24 | 2003-01-07 | Sun Microsystems, Inc. | Method for scalable memory efficient thread-local object allocation |
US20030023655A1 (en) * | 2001-07-26 | 2003-01-30 | Stepan Sokolov | Method and apparatus to facilitate suspending threads in a platform-independent virtual machine |
CN1402847A (zh) * | 1999-10-28 | 2003-03-12 | 阿佩尔虚拟机公司 | 把无用方法收集到垃圾箱中的方法 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5930807A (en) | 1997-04-23 | 1999-07-27 | Sun Microsystems | Apparatus and method for fast filtering read and write barrier operations in garbage collection system |
JP3027845B2 (ja) * | 1997-11-21 | 2000-04-04 | オムロン株式会社 | プログラム制御装置および方法 |
US6317119B1 (en) * | 1998-11-13 | 2001-11-13 | Creative Technology Ltd | Speed-compensated joystick |
US6763370B1 (en) * | 1998-11-16 | 2004-07-13 | Softricity, Inc. | Method and apparatus for content protection in a secure content delivery system |
GB9825102D0 (en) * | 1998-11-16 | 1999-01-13 | Insignia Solutions Plc | Computer system |
US6957313B2 (en) * | 2000-12-01 | 2005-10-18 | Hsia James R | Memory matrix and method of operating the same |
KR100737345B1 (ko) * | 2006-03-28 | 2007-07-09 | 한국전자통신연구원 | 점진적인 가비지 콜렉션 수행 시에 순환적 가비지의 회수방법 및 장치 |
-
2004
- 2004-06-21 EP EP04746512A patent/EP1659496B1/en not_active Expired - Lifetime
- 2004-06-21 US US10/541,029 patent/US7395285B2/en not_active Expired - Fee Related
- 2004-06-21 CN CNB2004800077351A patent/CN100437515C/zh not_active Expired - Fee Related
- 2004-06-21 JP JP2005511067A patent/JP4569926B2/ja not_active Expired - Fee Related
- 2004-06-21 AT AT04746512T patent/ATE479942T1/de not_active IP Right Cessation
- 2004-06-21 DE DE602004028945T patent/DE602004028945D1/de not_active Expired - Lifetime
- 2004-06-21 WO PCT/JP2004/009043 patent/WO2005001695A1/ja active Application Filing
- 2004-06-21 KR KR1020057013843A patent/KR101004483B1/ko active IP Right Grant
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6490599B2 (en) * | 1998-10-07 | 2002-12-03 | International Business Machines Corporation | On-the-fly garbage collector |
CN1402847A (zh) * | 1999-10-28 | 2003-03-12 | 阿佩尔虚拟机公司 | 把无用方法收集到垃圾箱中的方法 |
US6505275B1 (en) * | 2000-07-24 | 2003-01-07 | Sun Microsystems, Inc. | Method for scalable memory efficient thread-local object allocation |
US20030023655A1 (en) * | 2001-07-26 | 2003-01-30 | Stepan Sokolov | Method and apparatus to facilitate suspending threads in a platform-independent virtual machine |
Non-Patent Citations (8)
Title |
---|
Java中的垃圾收集机制. 连凤春.电脑知识与技术,第14期. 2003 |
Java中的垃圾收集机制. 连凤春.电脑知识与技术,第14期. 2003 * |
Jitsujikan Gomi Atsume. YUASA T.INFORMATION PROCESSING SOCIETY OF JAPAN,Vol.35 No.11. 1994 |
Jitsujikan Gomi Atsume. YUASA T.INFORMATION PROCESSING SOCIETY OF JAPAN,Vol.35 No.11. 1994 * |
KVM中内存管理策略与技术. 黄广君,吴健,胡正国.计算机工程,第29卷第1期. 2003 |
KVM中内存管理策略与技术. 黄广君,吴健,胡正国.计算机工程,第29卷第1期. 2003 * |
Thread-local heaps for java. Domani T., Goldshtein G., Koloder E.K., Lewis E., PetrankE.,Sheinwald D.INTERNATIONAL SYMPOSIUM ON MEMORY MANAGEMENT. 2002 |
Thread-local heaps for java. Domani T., Goldshtein G., Koloder E.K., Lewis E., PetrankE.,Sheinwald D.INTERNATIONAL SYMPOSIUM ON MEMORY MANAGEMENT. 2002 * |
Also Published As
Publication number | Publication date |
---|---|
EP1659496B1 (en) | 2010-09-01 |
JPWO2005001695A1 (ja) | 2006-08-10 |
US20060074988A1 (en) | 2006-04-06 |
CN1761949A (zh) | 2006-04-19 |
DE602004028945D1 (de) | 2010-10-14 |
EP1659496A4 (en) | 2008-11-26 |
WO2005001695A1 (ja) | 2005-01-06 |
US7395285B2 (en) | 2008-07-01 |
JP4569926B2 (ja) | 2010-10-27 |
KR101004483B1 (ko) | 2010-12-31 |
EP1659496A1 (en) | 2006-05-24 |
ATE479942T1 (de) | 2010-09-15 |
KR20060023950A (ko) | 2006-03-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100437515C (zh) | 垃圾收集*** | |
US8995070B2 (en) | Garbage collection based on functional block size | |
CN1760875B (zh) | 基于文件存取特性在各种类型的存储卷之间透明迁移文件 | |
CN102999132B (zh) | 管理计算***的存储模块间的热分布的方法和*** | |
Rogers et al. | Supporting dynamic data structures on distributed-memory machines | |
CN102693188B (zh) | 用于在可控运行时环境中进行基于硬件的动态逸出检测的方法和装置 | |
US6996590B2 (en) | Method and system for the garbage collection of shared data | |
US6256704B1 (en) | Task management for data accesses to multiple logical partitions on physical disk drives in computer systems | |
US6304866B1 (en) | Aggregate job performance in a multiprocessing system by incremental and on-demand task allocation among multiple concurrently operating threads | |
US6842759B2 (en) | Single-instance class objects across multiple JVM processes in a real-time system | |
CN101320314A (zh) | 用于快速改变数据处理***的功率状态的方法和设备 | |
CN101154185A (zh) | 软件运行时执行恢复与重放方法 | |
CN100378657C (zh) | 用于改进java方法调用速度的方法和装置 | |
US8176286B2 (en) | Memory recycling in computer systems | |
CN102855137B (zh) | 用于自动化部件的编程的方法和程序设计*** | |
CN107003897A (zh) | 监控事务处理资源的利用率 | |
JP2004503869A (ja) | モジュール式ガーベッジコレクタを実現するための方法および装置 | |
CN1781127B (zh) | 便携式数据载体中的存储器管理方法 | |
CN115586972A (zh) | 命令生成方法、装置、ai芯片、电子设备及存储介质 | |
CN100410889C (zh) | 物理存储器的测试方法 | |
CN101122884A (zh) | 增量压缩堆时用于更新引用的***和方法 | |
Young | Persistent memory storage of cold regions in the OpenJ9 Java virtual machine | |
JP3670162B2 (ja) | 再配置可能なアドインソフト管理システム | |
JP3805093B2 (ja) | 計算機システムにおけるメモリ返却忘れ検出方法とその装置およびそのための記録媒体 | |
CN100453032C (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 | ||
C14 | Grant of patent or utility model | ||
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: 20081126 Termination date: 20200621 |