CN1139032C - 减少存储器需求的程序代码执行装置和方法 - Google Patents
减少存储器需求的程序代码执行装置和方法 Download PDFInfo
- Publication number
- CN1139032C CN1139032C CNB998035068A CN99803506A CN1139032C CN 1139032 C CN1139032 C CN 1139032C CN B998035068 A CNB998035068 A CN B998035068A CN 99803506 A CN99803506 A CN 99803506A CN 1139032 C CN1139032 C CN 1139032C
- Authority
- CN
- China
- Prior art keywords
- definition
- entity
- definition entity
- class
- storer
- 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
- 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/445—Program loading or initiating
- G06F9/44594—Unloading
-
- 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/5022—Mechanisms to release resources
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
- Debugging And Monitoring (AREA)
Abstract
Java虚拟机(2),包括用于执行Java字节码的执行机和存储器管理系统(14)。存储器管理系统(14)执行无用单元收集程序,以从Java程序的当前状态中删除不可达到的对象。在现有技术的存储器管理系统中,只有已装入类对象的类装载程序对象是不能达到的,才能从存储器中删除代表类特征的对象。根据本发明将存储器管理系统(14)设置成用于删除类,该类没有可以在程序当前状态中达到的例示对象,即使类装载程序仍然是可达到的。这导到了实质的存储器节省。最好是,代表类特征的对象具有一种方法,该方法可以发信号表示,如果它不再有例示对象,可以从存储器中删除该特征。
Description
技术领域
本发明涉及一种用于执行程序代码的装置,所说装置包括定义装入装置,用于将至少两个定义实体装入到存储器中,所说定义实体与所说定义装入装置相关联,该装置还包括对象创建装置,用于根据所说定义实体创建对象。
本发明还涉及一种执行程序代码的方法和一种传送计算机程序的有形媒体,用于执行所述程序代码执行方法。
背景技术
可以从Tim Lindholm和Frank Yellin的出版物“The JavaTM Virtual MachineSpecification(JavaTM虚拟机说明书)”中知道如序言所述的装置,可以从Sun的网站中获取并且是从1996年9月第一次印刷的图书中转换而来的。
近年来充分提高了Java平台的普及。Java是包括Java语言的平台,其将Java语言编译为在Java虚拟机上运行的字节码。
使用在虚拟机上运行的字节码的优点在于,如果虚拟机存在这种组合,就可以在硬盘和操作系统的每个组合上运行编译过的字节码。
Java语言是面向对象的,意味着在执行程序的过程中根据定义实体创建对象,定义实体可能是Java语言中的类或接口。在创建对象前,首先必须将所需要的定义实体(类或接口)装入到存储器中。通过在Java语言中称为类装载程序的定义装入装置进行该装入操作。可能存在用于不同定义实体装入方式的不同定义装入装置。例如在Java中可能存在用于从磁盘、从基于网络的TCP/IP或从MPEG-2 Transport流中装入它们的不同类装载程序。
Java虚拟机具有存储器管理系统,该管理系统执行无用单元收集程序,以便自动删除不再需要的对象和类。
当在例如TV和顶置盒等消费品器材中使用Java时,只能获得有限数量的存储器源。由于只能获得有限数量的存储器,目前将Java用于消费品器材是非常困难的。
发明内容
本发明的目的在于提供一种如前序所述的减少所需存储器量的装置。
为实现所说目的,根据本发明的装置的用于执行程序代码的装置,所说装置包括定义装入装置,用于将至少两个定义实体装入存储器中,所说定义实体与所说定义装入装置相关,该装置还包括对象创建装置,用于根据所说定义实体创建对象,其特征在于该装置包括存储器管理装置,用于从存储器中删除不具有相关对象的定义实体,所说定义装入装置与仍然具有相关对象的定义实体相关联;
所说装置包括用于将定义实体指定为可移去的指定装置;当定义实体指定为可移去时,将存储器管理装置设置成用于从存储器中删除掉不再具有相关对象的定义实体;并且将存储器管理装置设置成用于从存储器中删除定义实体,该定义实体相应于仅与不具有相关对象的定义实体关联的定义装入装置。
通过从存储器中删除掉不具有相关对象的定义实体,可以释放相当数量的存储器,结果是该装置比现有技术的装置需要较少的存储器。
本发明建立在这样一个认识基础上,在本说明书中的Java虚拟机中,规定只有在其定义装入装置不再可达到时,才可以删除该定义实体。这意味着不再存在通过所说定义装入装置已经装入的定义实体的对象。
可以通过下面的例子更清楚的理解。如果类装载程序(定义装入装置)已装入两类(定义实体),可以不从存储器中删除不再具有相关对象的第一个装入类,只要另一类仍然具有关联的对象。其结果是在存储器中类保持不必要的长度。
通过利用根据本发明的创造性构思,只要一些类不再需要就可以卸载它们。
可能存在一些情况,不希望经常从存储器中删除不具有相关对象的定义实体。当通过执行类方法来改变类变量时,可能是这种情况。如果从存储器中删除这种类并且当再次需要时进行再装入,可能改变类变量的值。
当将它们指定为可移去的时,通过仅删除不具有相关对象的定义实体,应用程序可以通过将定义实体指定为可移去或不可移去来控制该移去。
本发明另一个实施例的其特征在于,所说装置包括存储装置,用于存储被指定为可移去的定义实体的标志。
根据本发明的用于执行程序代码的方法,所说方法包括利用定义装入实体将至少两个定义实体装入存储器中,所说定义实体与特征装入实体关联,该方法还包括根据所说定义实体创建对象,其特征在于该方法包括从存储器中删除不具有相关对象的定义实体,所说定义装入实体与仍然具有相关对象的定义实体相关联;
所说方法包括将定义实体指定为可移去;当定义实体指定为可移去时,从存储器中删除掉不具有相关对象的定义实体;并且该方法包括从存储器中删除定义实体,该定义实体仅与不具有相关对象的定义实体相关联。一种与存储器管理装置通信的简单方法是,一个类无论是否可以卸载,如果它没有要存储在表的相关对象,在该表中连同指示输入所有装入的类,该指示指明该类是否可移去。此外,能够将该标志存储在与每个类对象相关的对象标头中。
附图说明
将参照附图对本发明进行描述。
图1表示可以用于本发明的Java虚拟机的体系结构;
图2表示具有相关类和例示对象的类装载程序;
图3表示两个类装载程序,一个具有例示对象的类;
图4表示的是根据本发明程序的流程图,用于根据图1的存储器管理系统14中。
具体实施方式
在根据图1的Java虚拟机中,将类管理子系统6设置成从本机硬盘驱动器或者从网络装入存储器中没有的类。
首先通过代码校验器4对由类管理子系统6所装入的类进行检验。通常只对来自网络的类进行校验,因为它们可能来自未知的、不可靠的来源。在装入类时,执行语法检验。同样对所装入类的“语义”一致性进行检验。例如这包括检验类中所定义的常量和它们的类型是否是一致的。例如检验定义为字符串的常量是否是真的字符串。
在运行时间期间,执行字节码校验。这包括检验堆栈的一致性,也就是校验没有堆栈上溢和堆栈下溢的发生。还包括检验输入给变量的数据的类型是否与所说变量的声明有关。
将执行机8设置成用于执行校验后的字节码。为实现该执行,执行机具有三个可用的子系统,也就是系统呼叫子系统10,用于调用操作系统执行某些任务,例如从磁盘或从网络装入真实文件,或者在显示装置上显示图形单元。此外,虚拟机(Virtual Machine)包括用于创建分隔线程(thread)的线程子系统12。也将线程子系统12设置成用于使分隔线程同步。
Java VM还包括存储器管理子系统14,其包括用于从存储器中自动删除废弃条目的无用单元收集程序。在Sun公司执行Java VM中使用一种所谓的“做标记和删除”的无用单元收集程序算法。本领域的技术人员对于这种类型的无用单元收集程序算法是熟知的。在这种算法中,堆阵中存在的每个对象具有所谓的标记位。以复位堆阵中存在的全部对象的标记位开始无用单元收集程序的处理。随后参照堆阵中的对象检查所有的字段和变量。对于在堆阵中由字段或变量引用的的每个对象设定一个标记位。最后,无用单元收集程序删除该堆阵并且回收由没有设置标记位的对象所使用的存储区域。
最后,Java VM包括本地方法接口(Native Method Interface)子系统16,使其能够使用由C、C++或汇编语言所编写的函数。这对于为再利用现有的程序库或为能够利用最优化汇编程序以改进性能是方便的。
在根据图2的图表中,给出根据图1的Java VM堆阵中存在的对象。图2表示通过类装载程序18装入的第一类22和第二类20。对来自类22的一个对象24进行例示,并且类20没有例示对象。
当使用根据现有技术的无用单元收集程序算法时,对象18、20、22和24中一个也没有作为无用存储单元被收集,因为类装载程序18仍然是可达到的(具有来自所说类装载程序18装入的类中的例示对象24)。在根据本发明的装置中,可以从存储器中删除类20,因为它没有例示对象。最好是,将一种方法加到类CLASS中以指示是否可以卸载类,当其不再有例示对象时。这种方法的语法可以是“EnableClassUnloading(类)”。该方法可以在相关类的类标头设定一个位,以指示该类是可以删除的。另外,能够在VM中构造一个表,所有可以删除的类寄存在其中。
在图3中所表示的是根据图1Java VM堆阵中存在的另一组对象。图3表示已装入第一类32和第二类34的第一类装载程序36。类32和34都是不可达到的。不考虑是否调用方法EnableClassUnloading,可以将类32和34以及它们的类装载程序36从存储器中删除,因为类装载程序36是不可达到的。
图3还表示已装入类28的第二类装载程序26,来自类28的对象30已经例示。类28具有一个可达到的对象30。通常,不卸载(从存储器中删除)类装载程序26、类28和对象30。
可以看出,在Java 1.2SDK中引入参考对象的概念,导致可以较强或较弱地达到对象。现有技术的无用单元收集程序删除所有不能较强达到的对象。可以看出,当使用参考对象时,如在参照图2的以上描述中所使用的可达到概念就意味较强的可达到。
在根据图4的下表中,附图标记具有下述的含意:编号 标题 含意40 BEGIN 开始执行无用单元收集程序42 FIND REACHABLE OBJECT 发现可达到的对象44 MARK REACHABLE OBJECT 将对象标记为可达到46 ALL OBJECT DONE? 检验是否已对所有对象进行校验48 TAKE OBJECT 将新对象认做是无用单元收集49 IS OBJECT MARKED? 检验是否已对对象做标记50 IS OBJECT A CLASS? 检验对象是否是类52 IS OBJECT DELETABLE? 检验对象是否是可删除的54 FIND CLASS LOADER 对相应于当前对象的类装载程序定位56 IS CLASS LOADER MARKED? 检验是否已对类装载程序做标记58 DELETE OBJECT 从存储器中删除对象60 ALL OBJECT DONE? 检验是否对所有对象进行处理62 END 停止执行无用单元收集程序
在根据图4的程序指令40中,开始执行程序并需要进行初始化。在指令42中,从相应于程序当前状态的字段和变量开始搜索可达到的对象。如果发现可达到的对象,就在指令44中对对象做标记。在指令46中,检验是否已发现所有可达到的对象。这是一种为相应的对象已对VM当前状态中所有字段和变量进行追踪的情况。如果仍然没有完全找到所有可达到的对象,程序跳到指令42以发现下一个可达到的对象。
如果已经发现所有可达到的对象,完成无用单元收集程序算法“做标记和删除”的“做标记阶段”,并且开始“删除阶段”。
在指令48中,选择来自堆栈的对象用于校验。在指令49中,检验是否对对象做标记。如果对象已做标记,不能从存储器中删除它,并且程序继续进行到指令60。如果对象没有做标记,在指令50中检验对象是否是类。例如,这可以从与对象关联的对象堆栈中的字段来确定。如果对象不是类,程序继续运行到指令58,在指令58中从存储器中删除对象。随后。程序继续运行到指令60。
如果对象是类,在指令52中检验是否将类指定为可删除。例如,这可以通过检验是否已调用EnableClassUnloading方法对对象标头中的“可删除位”进行过设置来完成。此外,对包括所有可删除类的表进行查询也是可能的。如果对象是可删除的,就在指令58中删除指令58中的类对象。
如果该类没有标记为可删除,在指令54中搜索已装入类的类装载程序。这可以通过读取VM中的包括已装入的类以及与它们关联的类装载程序的表来完成。在发现类装载程序之后,在指令56中检验该类装载程序对象是否做了标记。如果该类装载程序没有做标记,在指令58中删除该类对象。如果该类装载程序已做了标记,不用从存储器中删除类,并且程序继续运行到指令60。
在指令60中,检验是否已对堆阵中的所有对象进行过处理。如果是这种情况,在指令62中结束该程序。否则程序继续运行到指令48处理堆阵中的下一个对象。
Claims (4)
1.用于执行程序代码的装置,所说装置包括定义装入装置,用于将至少两个定义实体装入存储器中,所说定义实体与所说定义装入装置相关,该装置还包括对象创建装置,用于根据所说定义实体创建对象,其特征在于该装置包括存储器管理装置,用于从存储器中删除不具有相关对象的定义实体,所说定义装入装置与仍然具有相关对象的定义实体相关联;
所说装置包括用于将定义实体指定为可移去的指定装置;当定义实体指定为可移去时,将存储器管理装置设置成用于从存储器中删除掉不再具有相关对象的定义实体;并且将存储器管理装置设置成用于从存储器中删除定义实体,该定义实体相应于仅与不具有相关对象的定义实体关联的定义装入装置。
2.根据权利要求1所述的装置,其特征在于所说装置包括存储装置,用于存储指定为可移去的定义实体的标志。
3.用于执行程序代码的方法,所说方法包括利用定义装入实体将至少两个定义实体装入存储器中,所说定义实体与特征装入实体关联,该方法还包括根据所说定义实体创建对象,其特征在于该方法包括从存储器中删除不具有相关对象的定义实体,所说定义装入实体与仍然具有相关对象的定义实体相关联;
所说方法包括将定义实体指定为可移去;当定义实体指定为可移去时,从存储器中删除掉不具有相关对象的定义实体;并且该方法包括从存储器中删除定义实体,该定义实体仅与不具有相关对象的定义实体相关联。
4.根据权利要求3所述的方法,其特征在于所说方法包括存储指定为可移去的定义实体的标志。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP99200015 | 1999-01-06 | ||
EP99200015.8 | 1999-01-06 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1292119A CN1292119A (zh) | 2001-04-18 |
CN1139032C true CN1139032C (zh) | 2004-02-18 |
Family
ID=8239783
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB998035068A Expired - Fee Related CN1139032C (zh) | 1999-01-06 | 1999-12-20 | 减少存储器需求的程序代码执行装置和方法 |
Country Status (8)
Country | Link |
---|---|
US (1) | US6681381B1 (zh) |
EP (1) | EP1068572A2 (zh) |
JP (1) | JP2002534737A (zh) |
KR (1) | KR20010083781A (zh) |
CN (1) | CN1139032C (zh) |
BR (1) | BR9908574A (zh) |
CA (1) | CA2322950A1 (zh) |
WO (1) | WO2000041079A2 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101395580B (zh) * | 2006-03-01 | 2012-06-20 | 诺基亚公司 | 通过在库中描绘特定函数减小代码大小 |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001090885A2 (en) * | 2000-05-25 | 2001-11-29 | Sun Microsystems, Inc. | Method and apparatus for creating efficient native methods that extend a bytecode interpreter |
US7082597B2 (en) | 2001-06-20 | 2006-07-25 | Sun Microsystems, Inc. | Representation of objects in a Java programming environment |
US7036120B2 (en) * | 2001-07-31 | 2006-04-25 | Sun Microsystems, Inc. | Two tier clusters for representation of objects in Java programming environments |
US7114152B2 (en) * | 2002-01-08 | 2006-09-26 | International Business Machines Corporation | Method, apparatus, and program to determine the mutability of an object at loading time |
JP2005018425A (ja) * | 2003-06-26 | 2005-01-20 | Matsushita Electric Ind Co Ltd | プログラム変換方法、プログラムおよび記憶媒体 |
KR100626368B1 (ko) * | 2003-08-25 | 2006-09-20 | 삼성전자주식회사 | 가비지 콜렉션 벤치마킹 방법 |
US7263532B2 (en) * | 2003-09-23 | 2007-08-28 | Microsoft Corporation | Region-based memory management for object-oriented programs |
DE10351622A1 (de) | 2003-11-05 | 2005-06-23 | Giesecke & Devrient Gmbh | Beschleunigtes Referenzfinden für eine automatische Speicherbereinigung (Garbage Collection) |
US7823137B2 (en) * | 2004-10-21 | 2010-10-26 | International Business Machines Corporation | Process and implementation for using byte code insertion to modify a class definition to define and use probes for application components |
US9009688B2 (en) * | 2005-12-30 | 2015-04-14 | Intel Corporation | Type checking for object-oriented programming languages |
US8375373B2 (en) * | 2010-04-19 | 2013-02-12 | Microsoft Corporation | Intermediate language support for change resilience |
JP6010961B2 (ja) * | 2012-03-27 | 2016-10-19 | 日本電気株式会社 | データ参照元特定システム及びその特定方法、並びにそのコンピュータ・プログラム |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3294326B2 (ja) * | 1992-07-09 | 2002-06-24 | 株式会社日立製作所 | データ処理方法および装置 |
US5729710A (en) * | 1994-06-22 | 1998-03-17 | International Business Machines Corporation | Method and apparatus for management of mapped and unmapped regions of memory in a microkernel data processing system |
US5925100A (en) * | 1996-03-21 | 1999-07-20 | Sybase, Inc. | Client/server system with methods for prefetching and managing semantic objects based on object-based prefetch primitive present in client's executing application |
US6134602A (en) * | 1997-09-24 | 2000-10-17 | Microsoft Corporation | Application programming interface enabling application programs to group code and data to control allocation of physical memory in a virtual memory system |
-
1999
- 1999-12-20 WO PCT/EP1999/010301 patent/WO2000041079A2/en not_active Application Discontinuation
- 1999-12-20 JP JP2000592737A patent/JP2002534737A/ja active Pending
- 1999-12-20 BR BR9908574-7A patent/BR9908574A/pt not_active IP Right Cessation
- 1999-12-20 CN CNB998035068A patent/CN1139032C/zh not_active Expired - Fee Related
- 1999-12-20 KR KR1020007009841A patent/KR20010083781A/ko active IP Right Grant
- 1999-12-20 CA CA002322950A patent/CA2322950A1/en not_active Abandoned
- 1999-12-20 EP EP99966997A patent/EP1068572A2/en not_active Withdrawn
-
2000
- 2000-01-05 US US09/475,568 patent/US6681381B1/en not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101395580B (zh) * | 2006-03-01 | 2012-06-20 | 诺基亚公司 | 通过在库中描绘特定函数减小代码大小 |
Also Published As
Publication number | Publication date |
---|---|
US6681381B1 (en) | 2004-01-20 |
BR9908574A (pt) | 2000-11-21 |
WO2000041079A3 (en) | 2000-11-02 |
CA2322950A1 (en) | 2000-07-13 |
CN1292119A (zh) | 2001-04-18 |
EP1068572A2 (en) | 2001-01-17 |
JP2002534737A (ja) | 2002-10-15 |
KR20010083781A (ko) | 2001-09-01 |
WO2000041079A2 (en) | 2000-07-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1139032C (zh) | 减少存储器需求的程序代码执行装置和方法 | |
US7480782B2 (en) | Reference-updating using per-chunk referenced-address ranges in a compacting garbage collector | |
US6272674B1 (en) | Method and apparatus for loading a Java application program | |
CN1218248C (zh) | 堆栈使用的方法 | |
US7533228B1 (en) | Two-pass sliding compaction | |
KR100541174B1 (ko) | 로컬화된 메모리 재이용을 가진 데이터 처리기 | |
US6446254B1 (en) | Packaging memory image files | |
CN88100793A (zh) | 快速开启由路径名识别的磁盘文件的方法 | |
KR102264119B1 (ko) | CaseDB: 엣지컴퓨팅을 위한 저비용 Put-Intensive 키-벨류 저장장치 | |
CN102200915B (zh) | 一种软件包版本迁移的方法及装置 | |
Atkinson et al. | Algorithms for a persistent heap | |
EP3198452B1 (en) | On-demand loading of dynamic scripting language code for reduced memory usage | |
CN1661703A (zh) | 闪存及其在光驱中动态加载固件操作模块的方法 | |
US7020874B2 (en) | Techniques for loading class files into virtual machines | |
US6799185B2 (en) | Frameworks for accessing Java class files | |
US6658658B1 (en) | Implicit forwarding and resolving of a reference made by an importing module to an exporting module for a specified export | |
CN1295601C (zh) | 进行软件应用的时间优化的替换 | |
CN1300681C (zh) | 用于缩短java程序中的类加载处理的系统和方法 | |
CN100549958C (zh) | 一种类文件装载方法和系统 | |
CN1269034C (zh) | 一种嵌入式系统中可执行文件的压缩及其加载方法 | |
US7191300B2 (en) | Parallel memory compaction | |
CN1237445C (zh) | 分布式文件系统快速路径解析的方法 | |
US20020199176A1 (en) | Storing and retrieving of field descriptors in Java computing environments | |
CN114519043B (zh) | 一种可执行二进制文件格式逆向分析方法 | |
US7734592B2 (en) | Method for reducing a data repository |
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 | ||
C19 | Lapse of patent right due to non-payment of the annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |