一种Java虚拟机装载程序的处理方法

文档序号:6524309阅读:193来源:国知局
一种Java虚拟机装载程序的处理方法
【专利摘要】本发明涉及通信【技术领域】,具体涉及一种Java虚拟机装载程序的处理方法。一种Java虚拟机装载程序的处理方法,启动类装载器后,将待装载类加入一待装载队列;判断待装载队列是否为空,如果不为空,从待装载队列获取当前运行应用程序需要的类名,依据获取的类名,通过一第一装载单元和/或一第二装载单元执行装载类步骤;第一装载单元用于对待装载队列中的第一种待装载类进行装载;第二装载单元用于对待装载队列中的第二种待装载类进行装载。如果为空,装载结束;本发明从装载器并行角度去考虑装载相应的应用程序,将待装载类中的常用应用程序要引用的类与普通应用程序要引用的类分开装载,从系统结构上将优化处理方法引入虚拟机系统装载领域。
【专利说明】一种Java虚拟机装载程序的处理方法
【技术领域】
[0001]本发明涉及电子通信【技术领域】,具体涉及一种Java虚拟机装载程序的处理方法。【背景技术】
[0002]随着手机终端国际化进程的推进,市场规模的不断扩大及技术的不断更新,使得手机在种类、外观、功能等方面有了前所未有的突破,同时在操作系统、芯片、无线传输制式等方面也有了扩展和深入。与此同时,手机市场对Java也产生了巨大的需求增长,支持Java虚拟机的功能显得尤为重要,基于嵌入式平台的Java虚拟机已经成为了多数主流运营商对手机,特别是定制手机的强制性要求。广大的消费者、运营商、服务/内容提供商以及手机制造商强烈渴望手机的Java性能更加强劲,支持更多更复杂的应用,为产业链各方带来更多商机和收入,同时也为用户带来更丰富多彩的增值应用。众所周知,Java虚拟机的跨平台性,使得手机的能力得到了不断的提升,但Java虚拟机如何在不断为运营商扩展新业务,为用户带来更丰富的增值业务的同时,提升自身的性能,也是需要深入考虑的问题。
[0003]目前市场上有很多针对虚拟机进行优化的专利与方法,现有技术中申请号为201010265244.4的专利公开了一种Java虚拟机图片资源加载的终端,其考虑到移动智能终端有很多的图片资源需要加载,针对传统的图片加载资源方法,提出了新的图片资源加载速度与改进方法。
[0004]现有技术中申请号为201010588216.6的专利公开了一种基于嵌入式实时Java虚拟机的预先类加载方法及装置,通过修改类加载器的Java类文件,设置用于根据类的列表进行类加载的加载方法;修改虚拟机内核的jni类,设置用于调用所述加载方法以预先加载应用程序所需的全部类的预先类加载方法;获取包含应用程序所需的全部类的类列表。
[0005]第一种系统调用方法:系统首先调用相应的应用程序(app),dalvik虚拟机装载相应的应用程序进入虚拟机,系统先装载应用程序所需的核心内库,接着装载相应的本地内装载器。第二种系统调用方法:系统中的应用程序,在装载相应的系统资源中,采用利用寄存器和片上的RAM实现Java栈的功能,部分功能用硬件模拟实现,这样速度得到了相应的提升,但是成本也随着上升,不适合快速发展的手持智能终端行业。
[0006]综上,上述现有技术中智能终端通用的加载方法的优点是,比较通用,虚拟机先来先服务原则,响应加载最新发生的应用程序。但是缺点也很明显,没有充分考虑智能手机的操作中,资源的分配不平衡,一些应用程序不使用了还占据着系统的资源,垃圾回收期(GC,Garbage Collection)没有及时回收。而对于用户经常使用的应用,比如电话,联系人,短信,彩信,网络信息等应用来不及响应,虽然芯片处理器的处理速度一再上升,但是随着智能手机的使用,还是感觉系统越来越慢的感觉。

【发明内容】

[0007]本发明的目的在于,提供一种Java虚拟机装载程序的处理方法,解决以上技术问题。[0008]本发明所解决的技术问题可以采用以下技术方案来实现:
[0009]—种Java虚拟机装载程序的处理方法,其中,所述方法包括:
[0010]步骤Sll:启动类装载器后,将待装载类加入一待装载队列;
[0011]步骤sl2:判断所述待装载队列是否为空,如果不为空,从所述待装载队列获取当前运行应用程序需要的类名,进入步骤sl3 ;如果为空,装载结束,启动解析字节码的步骤;
[0012]步骤sl3:所述类装载器包括一第一装载单元和一第二装载单元,依据获取的所述类名,通过所述第一装载单元和/或所述第二装载单元执行装载类步骤;所述第一装载单元用于对所述待装载队列中的第一种待装载类进行装载;所述第二装载单元用于对所述待装载队列中的第二种待装载类进行装载。
[0013]优选地,还包括步骤sl4,步骤sl3过程中生成有装载类的常量池,所述常量池中包括装载类要引用的类,将所述要引用的类添加入待装载队列,并跳转至步骤sl2。
[0014]优选地,所述第一装载单元与所述第二装载单元分别设有单独的工作区间,单独的对象堆与Java工作栈,所述第一装载单元与所述第二装载单元之间相互访问。
[0015]优选地,所述第一种待装载类为常用应用程序要引用的类,所述第二种待装载类为普通应用程序要引用的类,所述第一种待装载类的被操作的频率高于所述第二种待装载类被操作的频率。
[0016]优选地,所述第一种待装载类为应用程序类,所述第二种待装载类为Java应用程序编程接口类。
[0017]优选地,步骤sl3中,所述第一装载单元对所述待装载队列中的第一种待装载类进行装载的过程中;同一时间内,所述第二装载单元对所述待装载队列中的第二种待装载类进行装载。
[0018]优选地,装载结束后,经过解析的字节码进入Java执行引擎进行处理。
[0019]优选地,所述第一装载单元对所述待装载队列中的第一种待装载类进行装载的方法如下:进行预处理将所述第一种待装载类的字节码解析后在虚拟机中单独进行处理,独立加载所述第一种待装载类所用到的库函数,直到所述第一种待装载类的闭包不再增加。
[0020]优选地,应用于智能手机系统装载领域。
[0021]优选地,包括两个所述类装载器,通过两个所述类装载器并行处理所述待装载类。
[0022]有益效果:由于采用以上技术方案,本发明从类装载器并行角度去考虑装载相应的应用程序,将待装载类中的常用应用程序要引用的类与普通应用程序要引用的类分开装载,从系统结构上将优化处理方法引入虚拟机系统装载领域。
【专利附图】

【附图说明】
[0023]图1为Java虚拟机体系结构示意图;
[0024]图2为本发明的系统结构示意图;
[0025]图3为本发明的方法流程图。
【具体实施方式】
[0026]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0027]需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相
互组合。
[0028]下面结合附图和具体实施例对本发明作进一步说明,但不作为本发明的限定。
[0029]参照图1,整个Java虚拟机体系结构,可以分为二个子系统:类装载器I和Java执行引擎2,Java执行引擎2是Java的处理器内核,是Java虚拟机的核心,负责执行所有已经解析的Java字节码;类装载器I为Java执行引擎2创建合适的数据结构,基于这个数据结构,Java执行引擎2提供有效的算法来执行每条Java字节码指令。Java虚拟机的类装载就是将包含在类文件中的字节码装载到Java虚拟机中,具体通过将类文件中的内容转换成Java虚拟机使用的类字节码,通过类装载器I装载到Java虚拟机中的字节码数据,从而成为可执行的代码。类文件包括应用程序类3,还包括Java应用程序编程接口类(Application Programming Interface, API 类)4。
[0030]传统情况下,手机慢慢变慢是由于手机内存逐步被占用来不及收集不用对象,内存碎片的增多。同时在应用程序的使用中,频繁的使用某项应用,当突然来了电话,短信的时候,主要进程被应用程序占据了,而常规的应用一时间得不到系统资源。本发明从Java虚拟机装载应用程序入口进行装载,改变虚拟机传统的装载方法,在类装载器I中将应用程序中二进制形式的字节码数据读入Java虚拟机中。
[0031]由于嵌入式智能机应用中的资源限制严格,而对实时性要求却比较高,如果像传统Java虚拟机一样,在运行时发觉某个需要的类未被装载时才启动类装载器进行装载,则可能导致程序运行时长时间暂停。因此本文的类装载器将一次性把Java应用程序的类装载进来。
[0032]参照图2、图3,本发明提供的一种Java虚拟机装载程序的处理方法,
[0033]其中,方法包括:
[0034]步骤sll:启动类装载器I后,将待装载类加入一待装载队列;
[0035]步骤sl2:判断待装载队列是否为空,如果不为空,从待装载队列获取当前运行应用程序需要的类名,进入步骤sl3 ;如果为空,装载结束,启动解析字节码的步骤,经过解析的字节码进入Java执行引擎2进行处理;
[0036]步骤sl3:类装载器I包括一第一装载单元11和一第二装载单元12,依据获取的类名,通过第一装载单元11和/或第二装载单元12执行装载类步骤;第一装载单元11用于对待装载队列中的第一种待装载类进行装载;第二装载单元12用于对待装载队列中的第二种待装载类进行装载。
[0037]优选地,还包括步骤sl4,步骤sl3过程中生成有装载类的常量池,常量池中包括装载类要引用的类,分析装载类的常量池,将要引用的类添加入待装载队列,并跳转至步骤sl20
[0038]优选地,步骤sl3中,第一装载单元11对待装载队列中的第一种待装载类进行装载的过程中;同一时间内,第二装载单元12对待装载队列中的第二种待装载类进行装载。
[0039]本发明可以主要应用于智能手机系统装载,解决智能手机的软件装载问题,待装载类包括应用程序类3,待装载类还包括Java应用程序编程接口类4。人们使用手机的时候,从功能上说可以分为常用联系应用和普通应用。比如一个智能手机,用到最常用的有电话,联系人,短信,彩信功能。而对于游戏,秒表,日历,不同的应用不同的使用人使用频率也不一样。比如对于爱玩游戏的,除了基本应用外,用的最多的是游戏应用。对于爱看电子书的,除了基本应用外,使用频率比较多的就是电子书应用程序。由日常用户的行为分析来看,基本上常用模块的操作比较多,频率也较高,是系统中运行最频繁,后台进程调度最大的。
[0040]一种优选的实施例,第一种待装载类为应用程序类3,第二种待装载类为Java应用程序编程接口类(Application Programming Interface, API 类)4。
[0041]另一种优选的实施例,第一种待装载类为常用应用程序要引用的类,第二种待装载类为普通应用程序要引用的类,第一种待装载类的被操作的频率高于第二种待装载类被操作的频率。
[0042]类装载器I把一个类装入Java虚拟机中,要经过三个步骤来完成,装载、链接和初始化,其中,链接又可以分为校验、准备和解析三步,除了解析外,其他步骤是严格按照顺序完成的。本发明在类装载器I进行装载的时候,考虑智能手机的特点,充分修改了智能手机虚拟机加载模块方法,将智能机常用模块的应用程序进行特别的装载处理,将常用模块与普通模块分开,分别进行加载,经过装载,连接,初始化后,这样系统就有区别对待保证了有条理的处理,同时常用模块和普通模块之间也可以实现并发访问,重点突出。
[0043]作为本发明的进一步改进,第一装载单元11对待装载队列中的第一种待装载类进行装载的方法如下:进行预处理将第一种待装载类的字节码解析后在虚拟机中单独进行处理,独立加载第一种待装载类所用到的库函数,直到第一种待装载类的闭包不再增加。待装载类的闭包不再增加,意味着要引用的类已加载完毕。
[0044]第二装载单元12对待装载队列中的第二种待装载类依照传统的方法进行加载。由于传统的方法属于现有技术,在此不再赘述。
[0045]智能设备由于版权将传统的Java进行了一定程度的修改,在Java运行时内存空间中逻辑上可以被分为三部分:方法区,Java工作栈和对象堆;方法区,也称为工作区间,存储所有与Java类相关的信息,包括方法、类静态域以及用于表示类内部或类之间的关系的数据结构,其中最重要的是所有可能被执行的Java方法都在方法区中。Java执行引擎从这里读取执行代码。因此,Java虚拟机必须有效的组织这些方法,在尽可能保持小巧紧凑的同时,使得执行代码能够迅速的被定位和读取,这正是类装载器子系统的职能。
[0046]作为本发明的进一步改进,第一装载单元11与第二装载单元12分别设有单独的工作区间,单独的对象堆与Java工作栈,第一装载单元11与第二装载单元12之间相互访问。第一装载单元11与第二装载单元12之可以并行处理,并且可以访问对方的数据结构,从虚拟机加载的结构方面将类装载器结构进行修改,常用应用程序要引用的类加载与普通应用程序要引用的类加载,每个加载类都可以实现自己的对字节码进行独立的分析,对应自己的数据区,局部变量,返回值。
[0047]一种优选的实施例,包括两个类装载器1,通过两个类装载器I并行处理待装载类。本发明从类装载器并行角度去考虑装载相应的应用程序,将待装载类中的常用应用程序要引用的类与普通应用程序要引用的类分开装载,从系统结构上将优化处理方法引入虚拟机系统装载领域。[0048] 以上所述仅为本发明较佳的实施例,并非因此限制本发明的实施方式及保护范围,对于本领域技术人员而言,应当能够意识到凡运用本发明说明书及图示内容所作出的等同替换和显而易见的变化所得到的方案,均应当包含在本发明的保护范围内。
【权利要求】
1.一种Java虚拟机装载程序的处理方法,其特征在于,所述方法包括: 步骤sll:启动类装载器后,将待装载类加入一待装载队列; 步骤sl2:判断所述待装载队列是否为空,如果不为空,从所述待装载队列获取当前运行应用程序需要的类名,进入步骤sl3 ;如果为空,装载结束,启动解析字节码的步骤; 步骤sl3:所述类装载器包括一第一装载单元和一第二装载单元,依据获取的所述类名,通过所述第一装载单元和/或所述第二装载单元执行装载类步骤;所述第一装载单元用于对所述待装载队列中的第一种待装载类进行装载;所述第二装载单元用于对所述待装载队列中的第二种待装载类进行装载。
2.根据权利要求1所述的一种Java虚拟机装载程序的处理方法,其特征在于,还包括步骤sl4,步骤sl3过程中生成有装载类的常量池,所述常量池中包括装载类要引用的类,将所述要引用的类添加入待装载队列,并跳转至步骤sl2。
3.根据权利要求1所述的一种Java虚拟机装载程序的处理方法,其特征在于,所述第一装载单元与所述第二装载单元分别设有单独的工作区间,单独的对象堆与Java工作栈,所述第一装载单元与所述第二装载单元之间相互访问。
4.根据权利要求1所述的一种Java虚拟机装载程序的处理方法,其特征在于,所述第一种待装载类为常用应用程序要引用的类,所述第二种待装载类为普通应用程序要引用的类,所述第一种待装载类的被操作的频率高于所述第二种待装载类被操作的频率。
5.根据权利要求1所述的一种Java虚拟机装载程序的处理方法,其特征在于,所述第一种待装载类为应用程序类,所述第二种待装载类为Java应用程序编程接口类。
6.根据权利要求1所述的一种Java虚拟机装载程序的处理方法,其特征在于,步骤sl3中,所述第一装载单元对所述待装载队列中的第一种待装载类进行装载的过程中;同一时间内,所述第二装载单元对所述待装载队列中的第二种待装载类进行装载。
7.根据权利要求1所述的一种Java虚拟机装载程序的处理方法,其特征在于,装载结束后,经过解析的字节码进入Java执行引擎进行处理。
8.根据权利要求1所述的一种Java虚拟机装载程序的处理方法,其特征在于,所述第一装载单元对所述待装载队列中的第一种待装载类进行装载的方法如下:进行预处理将所述第一种待装载类的字节码解析后在虚拟机中单独进行处理,独立加载所述第一种待装载类所用到的库函数,直到所述第一种待装载类的闭包不再增加。
9.根据权利要求1所述的一种Java虚拟机装载程序的处理方法,其特征在于,应用于智能手机系统装载领域。
10.根据权利要求1所述的一种Java虚拟机装载程序的处理方法,其特征在于,包括两个所述类装载器,通过两个所述类装载器并行处理所述待装载类。
【文档编号】G06F9/445GK103713939SQ201310697873
【公开日】2014年4月9日 申请日期:2013年12月17日 优先权日:2013年12月17日
【发明者】金果 申请人:上海斐讯数据通信技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1