CN1139032C - 减少存储器需求的程序代码执行装置和方法 - Google Patents

减少存储器需求的程序代码执行装置和方法 Download PDF

Info

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
Application number
CNB998035068A
Other languages
English (en)
Other versions
CN1292119A (zh
Inventor
G・H・赛彭贝格
G·H·赛彭贝格
G・武格茨
J·A·G·武格茨
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Koninklijke Philips NV
Original Assignee
Koninklijke Philips Electronics NV
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Koninklijke Philips Electronics NV filed Critical Koninklijke Philips Electronics NV
Publication of CN1292119A publication Critical patent/CN1292119A/zh
Application granted granted Critical
Publication of CN1139032C publication Critical patent/CN1139032C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44594Unloading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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/5022Mechanisms 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所述的方法,其特征在于所说方法包括存储指定为可移去的定义实体的标志。
CNB998035068A 1999-01-06 1999-12-20 减少存储器需求的程序代码执行装置和方法 Expired - Fee Related CN1139032C (zh)

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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101395580B (zh) * 2006-03-01 2012-06-20 诺基亚公司 通过在库中描绘特定函数减小代码大小

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
ES2376191T3 (es) * 2000-05-25 2012-03-09 Oracle America, Inc. Método y aparato para crear métodos nativos eficaces que extienden un intérprete de códigos de byte.
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
WO2007076629A1 (en) * 2005-12-30 2007-07-12 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)

* Cited by examiner, † Cited by third party
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

Cited By (1)

* Cited by examiner, † Cited by third party
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
CN1292119A (zh) 2001-04-18
JP2002534737A (ja) 2002-10-15
EP1068572A2 (en) 2001-01-17
KR20010083781A (ko) 2001-09-01
CA2322950A1 (en) 2000-07-13
WO2000041079A2 (en) 2000-07-13
WO2000041079A3 (en) 2000-11-02
BR9908574A (pt) 2000-11-21

Similar Documents

Publication Publication Date Title
CN1139032C (zh) 减少存储器需求的程序代码执行装置和方法
US7480782B2 (en) Reference-updating using per-chunk referenced-address ranges in a compacting garbage collector
CN1260651C (zh) 用于在爪哇程序中缩短字节代码的编译时间的系统和方法
CN1218248C (zh) 堆栈使用的方法
US7533228B1 (en) Two-pass sliding compaction
KR100541174B1 (ko) 로컬화된 메모리 재이용을 가진 데이터 처리기
CN1020014C (zh) 快速开启由路径名识别的磁盘文件的方法
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
CN1829977A (zh) 利用一个栈跟踪高速缓存器改善垃圾收集的性能的方法和装置
CN1556951A (zh) 在具备解释器和编译器的混合式系统中用于无用存储单元收集的被编译激活框架内的惰型标记
US6799185B2 (en) Frameworks for accessing Java class files
US6901591B1 (en) Frameworks for invoking methods in virtual machines
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程序中的类加载处理的系统和方法
CN1269034C (zh) 一种嵌入式系统中可执行文件的压缩及其加载方法
CN101126988A (zh) 一种类文件装载方法和系统
US7191300B2 (en) Parallel memory compaction
CN1237445C (zh) 分布式文件系统快速路径解析的方法
CN1402847A (zh) 把无用方法收集到垃圾箱中的方法
US20020199176A1 (en) Storing and retrieving of field descriptors in Java computing environments

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