一种Java对象分配优化方法、装置及设备的制造方法

文档序号:9843933阅读:445来源:国知局
一种Java对象分配优化方法、装置及设备的制造方法
【技术领域】
[0001]本发明涉及计算机技术领域,尤其是涉及一种Java对象分配优化方法、装置及系 统。
【背景技术】
[0002] Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java技术具有 卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、 科学超级计算机、移动电话和互联网。
[0003] Java平台结构组成如图1所示,包括Java编程语言,主要涉及Java的编程语法; Java文件格式,主要包括各类java的目录、文件及后缀等;Java应用程序接口; Java虚拟机, 主要包括Java bytecode的编译优化、加载、解释及运行、管理等模块。其中Java四个模块之 间的关系如图2所示。编写Java代码(.java文件),然后将之编译成字节码(.class文件)。最 后字节码被装入内存,字节码进入虚拟机,该字节码就会被Java解释器解释执行,或者是被 即时代码编译器器有选择的转换成机器码执行。Java平台由Java虚拟机和Java应用程序接 口搭建,Java语言则是进入这个平台的通道,用Java语言编写并编译的程序可以运行在这 个平台上。在Java程序运行时,Java代码中某些对象调用后可能不再继续使用,有些对象调 用后仍然会被再次调用。通常情况下,采用逃逸分析技术,识别出可能不再继续使用的对 象,然后采用标量替换或函数复制栈上分配的方法对该些分析得到的对象进行优化。但是 这两种方式有很多缺陷:
[0004] 首先,标量替换的方式仅适合小对象,符合条件的场景少,会额外参加函数参数, 变量格式。其次,函数复制栈上分配的方式,对象较多时需要复制多份函数,会导致代码体 积膨胀较大,并且仅适合小函数。多层次的函数调用,需要复制调用栈中的多个函数。
[0005] 由上述可知,通常情况下对Java对象分配优化的方式局限性较强、需要占用较多 的处理资源。

【发明内容】

[0006] 本发明提供了一种Java对象分配优化方法、装置及设备,用于解决对Java对象分 配优化的方式局限性较强、需要占用较多的处理资源的问题。
[0007] 第一方面,提供了一种Java对象分配优化方法,包括:在运行的Java代码中,确定 所述Java代码中存在对应关系的被调用函数和调用函数;将所述被调用函数中的非逃逸的 Java对象,转存到与所述被调用函数对应的调用函数的函数栈中分配。
[0008] 结合第一方面,在第一方面的第一种可能的实现方式中,确定所述Java代码中存 在对应关系的被调用函数和调用函数,包括:在所述Java代码中,根据Java函数的方法标识 Me thod ID,确定存在对应关系的被调用函数和调用函数。
[0009] 结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能的 实现方式中,将所述被调用函数中的非逃逸的Java对象,转存到与所述被调用用函数对应 的调用函数的函数栈中分配,包括:若所述被调用函数中的非逃逸的Java对象的数量大于 第一设定值时,将被调用次数大于第二设定值的非逃逸的Java对象存储在函数栈中分配。
[0010] 结合第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式 中,还包括:将被调用次数小于第二设定值的非逃逸的Java对象存储在堆中分配。
[0011] 结合第一方面至第一方面的第三种可能的实现方式中的任一一种可能的实现方 式,在第一方面的第四种可能的实现方式中,还包括:将除所述非逃逸的Java对象之外的其 它Java对象存储在堆中分配。
[0012] 第二方面,提供了一种Java对象分配优化装置,包括:确定模块,用于在运行的 Java代码中,确定所述Java代码中存在对应关系的被调用函数和调用函数;执行模块,用于 将所述被调用函数中的非逃逸的Java对象,转存到与所述被调用函数对应的调用函数的函 数栈中分配。
[0013] 结合第二方面,在第二方面的第一种可能的实现方式中,所述确定模块,具体用于 在所述Java代码中,根据Java函数的方法标识MethodID,确定存在对应关系的被调用函数 和调用函数。
[0014] 结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第二种可能的 实现方式中,所述执行模块,具体用于若所述被调用函数中的非逃逸的Java对象的数量大 于第一设定值时,将被调用次数大于第二设定值的非逃逸的Java对象存储在函数栈中分 配。
[0015] 结合第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式 中,所述执行模块,还用于将被调用次数小于第二设定值的非逃逸的Java对象存储在堆中 分配。
[0016] 结合第二方面至第二方面的第三种可能的实现方式中的任一一种可能的实现方 式,在第二方面的第四种可能的实现方式中,所述执行模块,还用于将除所述非逃逸的Java 对象之外的其它Java对象存储在堆中分配。
[0017] 第三方面,提供了一种Java对象分配优化设备,包括:存储器,用于存储Java代码, 虚拟机,用于运行Java代码,在运行的Java代码中,确定所述Java代码中存在对应关系的被 调用函数和调用函数;将所述被调用函数中的非逃逸的Java对象,转存到与所述被调用函 数对应的调用函数的函数栈中分配。
[0018] 结合第三方面,在第三方面的第一种可能的实现方式中,所述虚拟机,具体用于在 所述Java代码中,根据Java函数的方法标识MethodID,确定存在对应关系的被调用函数和 调用函数。
[0019] 结合第三方面或第三方面的第一种可能的实现方式,在第三方面的第二种可能的 实现方式中,所述虚拟机,具体用于若所述被调用函数中的非逃逸的Java对象的数量大于 第一设定值时,将被调用次数大于第二设定值的非逃逸的Java对象存储在函数栈中分配。
[0020] 结合第三方面的第二种可能的实现方式,在第三方面的第三种可能的实现方式 中,所述虚拟机,还用于将被调用次数小于第二设定值的非逃逸的Java对象存储在堆中分 配。
[0021] 结合第三方面至第三方面的第三种可能的实现方式中的任一一种可能的实现方 式,在第三方面的第四种可能的实现方式中,所述虚拟机,还用于将除所述非逃逸的Java对 象之外的其它Java对象存储在堆中分配。
[0022]通过采用上述技术方案,在运行的Java代码中,确定Java代码中存在对应关系的 被调用函数和调用函数;将被调用函数中的非逃逸的Java对象,转存到与被调用函数对应 的调用函数的函数栈中分配,这样可以较好地解决对Java对象分配优化的方式局限性较 强、需要占用较多的处理资源的问题。
【附图说明】
[0023]图1为Java平台结构组成示意图;
[0024]图2为Java四个模块之间的关系示意图;
[0025]图3为本发明实施例中提出的Java代码运行的Java平台结构组成示意图;
[0026] 图4为本发明实施例中提出的Java对象分配优化方法流程图;
[0027] 图5为本发明实施例中提出的对象逃逸分析示意图;
[0028] 图6为本发明实施例中提出的对象分配架构示意图;
[0029] 图7为本发明实施例中,提出的Java对象分配优化装置结构组成示意图;
[0030] 图8为本发明实施例中,提出的Java对象分配优化设备机构组成示意图。
【具体实施方式】
[0031] Java代码的运行环境中,Java代码中的所有Java对象只能放在堆中,这就导致了 较多不需要的Java对象回收问题,本发明实施例提出的技术方案中,针对该问题,通过对 Java代码进行静态分析,确定出非逃逸的Java对象和逃逸的Java对象,将不同的Java对象 做出不同的存储,从而实现节省处理资源的目的。
[0032] 在本发明实施例提出的技术方案中,通过逃逸分析优化的方式,确定出非逃逸的 Java对象和逃逸的Java对象,将非逃逸的Java对象存储在函数栈中存储进行分配。
[0033]其中在本发明实施例提出的技术方案中,函数栈,是用于临时存储Java函数内局 部变量的空间,但是该Java函数执行完毕之后,存储该Java函数的栈空间会立即释放。堆是 用于存储新创建的Java对象,在堆中,存储的Java对象执行完毕后不会立即释放存储该 Java对象的空间。
[0034]下面将结合各个附图对本发明实施例技术方案的主要实现原理、【具体实施方式】及 其对应能够达到的有益效果进行详细地阐述。
[0035]本发明实施例提出一种Java对象分配优化的系统,如图3所示,Java代码运行的 Java平台结构组成示意图,Java虚拟机(JVM)是整个系统的核心的位置,是程序与底层操作 系统和硬件无关的关键。JVM的下方是移植接口,移植接口由两部分组成:适配器和Java操 作系统,其中依赖于平台的部分称为适配器;JVM通过移植接口在具体的平台和操作系统上 实现;在JVM的上方是Java的基本类库和扩展类库以及它们的API,利用Java API编写的应 用程序(application)和小程序(Java applet)可以在任何Java平台上运行而无需考虑底 层平台,就是因为有Java虚拟机(JVM)实现了程序与操作系统的分离,从而实现了Java的平 台无关性。
[0036]基于图3所示的系统架构,本发明实施例提出一种Java对象分配优化方法,如图4 所示,其具体处理流程如下述:
[0037] 步骤41,在运行的Java代码中,确定Java代码中的非逃逸的Java对象。
[0038] 通过逃逸分析技术,在运行的Java代码中,确定Java代码中的非逃逸的Java对象 和逃逸的Java对象。
[0039] 举一例进行详细阐述,具体示例Java代码如下述所示:
[0040]
[0041 ] 针对上述Java代码,经过逃逸技术分析后,如图5所示,确定Java对象v3对象在 Java函数Caller 1中是非逃逸的Java对象。
[0042]步骤42,确定Java代码中的被调用函数和调用函数。
[0043] 仍以上述Java代码为例,在上述Java代码中,Callee函数是被调用函数,Caller函 数是调用函数。
[0044]步骤43,将被调用函数中的非逃逸的Java对象,转存到与被调用函数对应的调用 函数的函数栈中分配。
[0045]本发明实施例提出的技术方案中,具体实施时,可以在被调用函数Callee函数中 插入的一段代码,来实现上述步骤41~步骤43的处理流程。
[0046] 可选地,在上述步骤43之前,步骤42之后,还可以包括:
[0047]根据Java函数的方法标识(MethodID),确定被调用函数对应的调用函数。
[0048] 例如,如图6所示,假设调用函数Cal 1 er 1需
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1