当前位置: 首页 > 专利查询>诺基亚公司专利>正文

用于利用自动存储器管理系统减少应用程序的存储器占用量的系统和方法技术方案

技术编号:2838970 阅读:176 留言:0更新日期:2012-04-11 18:40
所描述的技术通过减少所产生的无用单元来减轻无用单元收集器的工作。这些实施例将本机编译器的数据流分析与Java虚拟机(JVM)的扩展相组合。特别字节代码被插入到原始字节代码中以明确地释放未使用的对象。结果,无用单元收集器看不到被明确地回收的对象,而该对象在它不再被使用之后不保留存储器。JVM的存储器占用量减少而响应性更佳,这是由于存储单元收集器具有较少的工作,所以它更少地和在时间上更短地中断应用程序。

【技术实现步骤摘要】
【国外来华专利技术】
本专利技术主要地涉及计算机应用程序的存储器管理。具体而言,本专利技术涉及用于使用自动化存储器管理减少应用程序的存储器占用量(footprint)的系统和方法。
技术介绍
这一部分旨在于提供在权利要求中记载的本专利技术的背景或者环境。这里的描述可以包括能够寻求的但不是必然地先前就已经设想过或者寻求过的概念。因此,除非这里另有指明,在这一部分中描述的内容既不是先于本申请权利要求的技术,也不因为被包含于这一部分中而被认可为是现有技术。Java是由Sun Microsystems在20世纪90年代开发的简易的、面向对象的、分布式的、解释性的、鲁棒的、安全的、架构中立的、便携的、多线程的、动态的、顺应时髦词语(buzzword-compliant)的、通用性的编程语言。Java类似于C++,既没有操作符过载(尽管它确实具有方法过载),也没有多重继承和扩充自动强制。它具有被称为无用单元(garbage)收集的自动存储器管理。Java程序可以在小型计算机上独立运行。解译器和类(class)支持约占40千字节;附加的标准库和线程支持(实质上是自含微核)则添加了附加的175Kb。Java利用用于动态方法解析的Objective C的工具来扩展C++的面向对象的工具。Java具有用于例如HTTP和FTP的TCP/IP协议的例程扩展库。Java应用可以如在本地文件系统上一样容易地经由URL跨越因特网来访问对象。Java编译器和连接器实行强类型检验——必须明确地确定类型的过程。Java利用基于公共密钥加密的认证来支持无病毒、无篡改系统的创建。Java编译器生成可在任何支持Java运行期系统的处理器上执行的架构中立性的对象文件。对象代码由字节代码指令构成,这些指令被设计成既易于在任何机器上解译又容易转换成本机机器代码。Java的无用单元收集堆是Java系统的主要魅力所在,因为它消除了或者至少是减少了普通的编程错误、存储器漏洞的可能。遗憾的是,无用单元收集堆必然地比普通的存储器管理需要更多的存储器。这归因于如下事实在无用单元对象的生成(当对象不再被引用、因此可以释放它的空间时)与无用单元收集器线程在系统中发现足够的空余时间并且能够为新的分配回收无用单元对象的空间这一时刻之间有一段时间。因此,Java程序比常规程序占据更多存储器。这一存储器要求对于在移动终端业界中采用Java而言是一个重大阻碍。Java对象库是这详一种对象库,即某些普通操作(如串操纵)生成大量无用单元对象。减少Java的存储器占用量可以带来很大益处。目前已经有对于解决Java存储器要求的尝试。例如,Java运行期已经包括越来越高效的无用单元收集器,一代又一代的无用单元收集器就是本领域技术发展的现状(参见http://java.sun.com/docs/hotspot/gc1.4.2/faq.html)。本机Java编译器已经使用数据流分析来发现可以在堆栈上分配哪些对象以取代无用单元堆(参见Choi,Gupta,Serrano,Sreedhar和Midkiff(IBM T.J WatsonResearch Center)Escape analysis for Java.OOPSLA99,Denver 1999)。所尝试的另一解决方案要求程序员标记什么对象可以在什么堆区段上分配(参见JSR-1,Real-time specification for Java,http://www.jcp.org/en/jsr/detail?id=1)。Microsoft.NET框架使用与Java类似的无用单元收集系统。其它编程语言使用字节代码和无用单元收集,例如包括C#、Lisp、Objective-C、PHP、Perl、Python、Smalltalk、VBA、Visual Basic和VBScript。因此,需要通过显著地减少所产生的无用单元来减轻无用单元收集器的工作,由此允许程序运行得更快和需要更少的存储器。另外,需要减少存储器占用量以促进在移动终端业界中的采用。还需要一种用于减少应用程序的存储器占用量的系统和方法。
技术实现思路
一般而言,这里描述的示例性的实施例通过减少所产生的无用单元来减轻无用单元收集器的工作。这些实施例将Java字节代码的数据流分析与Java虚拟机(JVM)的扩展相结合。向Java字节代码添加如下信息,该信息明确地描述了在程序的某一位置可以释放哪个对象。例如,特殊字节代码可以被插入到原始字节代码中以明确地释放未使用的对象。结果是,无用单元收集器看不到被明确地回收的对象,而该对象在它不再被使用之后不保留存储器。JVM的存储器占用量减少而响应性更佳,这是由于无用单元收集器具有较少的工作,所以它更少地和在时间上更短地中断应用程序。一个示例性的实施例涉及一种减少在面向对象的编程环境中产生的存储器占用量的方法。此方法包括分析经编译的代码以标识待回收的对象;以及修改经编译的代码以包括用以对于从所述分析中发现的对象进行回收的指令。另一示例性的实施例涉及一种用于在面向对象的编程环境中减少存储器占用量的系统。该系统包括预处理器,配置用以在面向对象代码中发现非逸出(no escape)点,并且将未使用对象标志插入到代码中以释放在面向对象的代码中的未使用的对象;执行面向对象的代码的虚拟机;以及释放无用单元收集堆中的对象的无用单元收集器,该无用单元收集堆包含来自于所执行的面向对象的代码中的使用过的对象。具有未使用对象标志的代码不进入无用单元收集堆中并且不必由无用单元收集器释放。另一示例性的实施例涉及一种具有在其上执行的面向对象的编程代码的设备。该设备包括存储器,配置用以包含面向对象的代码;处理器,对面向对象的代码执行数据流分析以确定可以回收的对象,其中该处理器在可以回收的对象中插入特别指令;以及无用单元收集堆,配置用以存储不需要的对象直至所述不需要的对象可以被释放为止。该无用单元收集堆是存储器中的空间,并且该无用单元收集堆不包含在数据流分析中确定的对象。另一示例性的实施例涉及一种用以减少执行面向对象的代码所需要的存储器的计算机程序产品。该计算机程序产品包括用以将特别字节代码插入到原始字节代码中以标识待回收的对象的计算机代码,其中所标识的对象不再被使用;以及用以回收所标识的对象使得所标识的对象在不再被使用之后不保留存储器的计算机代码。又一示例性的实施例涉及一种减少面向对象的代码的存储器需求的模块。该模块包括存储器结构和预处理器。该存储器结构包含无用单元收集堆。该预处理器对面向对象的代码执行数据流分析以确定可以被回收的对象,并且在可以回收的对象中插入特别字节代码。具有特别字节代码的对象不放置于无用单元收集堆中而是被明确地释放。附图说明图1是对根据示例性的实施例的无用单元减少系统进行描绘的大体框图;图2是对操作中的示例性无用单元减少系统进行描绘的示图;图3是对包括图1的无用单元减少系统的通信系统进行描绘的示图。具体实施例方式现存有若干种不同编程语言,这些编程语言解译和包括利用无用单元收集的自动存储器管理。在最为流行的编程语言之中的是JavaTM、Visual C#、.NETTM、Lisp、Objective-C、PHP、Perl、Python、Smalltalk、VBA、Visua本文档来自技高网
...

【技术保护点】
一种减少在编程环境中产生的存储器占用量的方法,所述方法包括:分析经编译的代码以标识待回收的对象;修改所述经编译的代码以包括用以对于从所述分析中发现的对象进行回收的指令。

【技术特征摘要】
【国外来华专利技术】...

【专利技术属性】
技术研发人员:G帕利尔
申请(专利权)人:诺基亚公司
类型:发明
国别省市:FI[]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术
  • 暂无相关专利