• 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03
    • / 8
    • 下载费用:30 金币  

    重庆时时彩质合是什么意思: 一种JAVA虚拟机中类库的多线程预加载方法.pdf

    摘要
    申请专利号:

    重庆时时彩单双窍门 www.4mum.com.cn CN201410035171.8

    申请日:

    2014.01.24

    公开号:

    CN103793249A

    公开日:

    2014.05.14

    当前法律状态:

    驳回

    有效性:

    无权

    法律详情: 发明专利申请公布后的驳回IPC(主分类):G06F 9/445申请公布日:20140514|||实质审查的生效IPC(主分类):G06F 9/445申请日:20140124|||公开
    IPC分类号: G06F9/445 主分类号: G06F9/445
    申请人: 北京航空航天大学
    发明人: 赵胜男; 史晓华; 范礼阳; 杨海燕
    地址: 100191 北京市海淀区学院路37号
    优先权:
    专利代理机构: 北京永创新实专利事务所 11121 代理人: 祗志洁
    PDF完整版下载: PDF下载
    法律状态
    申请(专利)号:

    CN201410035171.8

    授权公告号:

    ||||||

    法律状态公告日:

    2017.09.08|||2014.06.11|||2014.05.14

    法律状态类型:

    发明专利申请公布后的驳回|||实质审查的生效|||公开

    摘要

    本发明提供了一种Java虚拟机中类库的多线程预加载方法。首先连接类库,生成预加载列表,预加载列表中包含虚拟机运行时所需要预先加载的类;然后,根据线程个数,将预加载列表中的类平均分配到各个线程,同时启动各线程,将列表中的类加载到内存中,并对类中的静态变量进行初始化;最后,将预加载的类存入共享内存资源。本发明方法筛选记录了Java程序运行时需要多次加载或者必须常驻内存的类,使得预加载类库随着应用程序和用户使用习惯的改变而自动调整,有效提高Java程序的运行效率;同时,通过多线程同步加载预加载列表中的类,有效提高Java虚拟机启动阶段类库本身的加载速度。

    权利要求书

    权利要求书
    1.  一种Java虚拟机中类库的多线程预加载方法,其特征在于,包括如下步骤:
    步骤1:连接类库,生成预加载列表;所述的预加载列表中包含虚拟机运行时所需要预先加载的类;当过程虚拟机初始化完成后,开始查询类库中的每个类,若类满足如下任一条件时,将类加入预加载列表,条件如下:(1)至少被两个应用所加载,(2)所需要加载的时间大于额定最小值,(3)常驻内存区域;
    步骤2:根据线程个数,将预加载列表中的类平均分配到各个线程,然后同时启动各个线程,将列表中的类加载到内存中,并对类中的静态变量进行初始化;
    步骤3:将预加载的类存入共享内存资源。

    2.  根据权利要求1所述的Java虚拟机中类库的多线程预加载方法,其特征在于,步骤2中所述的各个线程的工作过程为:首先获取一个输入流,用于读取预加载列表中类的信息;然后创建类相应的存贮对象,设置缓存额度和读取对象;对预加载列表中当前行包含的注释和空行忽略掉;最后调用Java虚拟机中的接口将类的信息加载到内存中,并对类中的静态变量进行初始化。

    说明书

    说明书一种Java虚拟机中类库的多线程预加载方法
    技术领域
    本发明涉及Java虚拟机中的类加载技术,尤其是手机系统Java虚拟机中类的预加载方法。
    背景技术
    类加载器在虚拟机中主要负责对类文件的查询和加载。类加载器通过对二进制文件的解析来加载运行过程中该类的数据结构,然后对其进行调用,同时装载并连接该类中所有超类和超类之间的接口。当虚拟机需要装载一个类时,类加载器就会查找该类所对应的字节码文件,然后对这个字节码文件进行加载,提取其中所需的数据信息存储到内存中。
    运行在手机上的Java虚拟机,例如Android系统下的Dalvik虚拟机在设备开机时就进行预加载,预先将所有基础类加载到内存中,以此来提高Java程序的执行效率。
    但类加载器所预先加载的基础类资源量很大,很可能会导致设备开机时预加载类的过程时间过长。
    发明内容
    本发明针对目前类加载器预加载的基础资源量大,开机过程长的问题,提出了一种Java虚拟机中类库的多线程预加载方法。本发明方法以多线程并发的方式来完成虚拟机预加载过程,尤其是针对在手机中使用的多核处理器,采用了多运算引擎并行运行的方式来提高系统中整体的使用效率和程序的运行速度。
    本发明提供的一种Java虚拟机中类库的多线程预加载方法,包括如下步骤:
    第一步,连接类库,生成预加载列表,所述的预加载列表中包含虚拟机运行时所需要预先加载的类;
    第二步,根据线程个数,将预加载列表中的类平均分配到各个线程,然后同时启动各个线程,将列表中的类加载到内存中,并对类中的静态变量进行初始化;
    第三步,将预加载的类存入共享内存资源。
    所述的第一步中,当过程虚拟机初始化完成后开始查询类库中的每个类,若类满足如下任一条件时,将类加入预加载列表,条件如下:(1)至少被两个应用所加载;(2)所需要加载的时间大于额定最小值;(3)常驻内存区域。
    所述的第二步中,各个线程的工作过程为:首先获取一个输入流,用于读取预加载列表中类的信息;然后创建类相应的存贮对象,设置缓存额度和读取对象;对预加载列表中当前行包含的注释和空行忽略掉;最后调用Java虚拟机中的接口将类的信息加载到内存中,并对类中的静态变量进行初始化。
    本发明的优点与积极效果在于:通过预加载列表的方式筛选记录Java程序运行时需要多次加载或者必须常驻内存的类,从而预测出下次运行时需要预加载的类表,可以使得预加载类库随着应用程序和用户使用习惯的改变而自动调整,从而有效提高Java程序的运行效率。同时,通过多线程加载的方式同步加载预加载列表中的类,可以有效提高Java虚拟机启动阶段类库本身的加载速度。
    附图说明
    图1是本发明的Java虚拟机中类库的多线程加载方法的原理示意图;
    图2是本发明中预加载列表的生成方法示意图;
    图3是本发明中多线程同步预加载类的过程示意图。
    具体实施方式
    下面将结合附图和实施例对本发明作进一步的详细说明。
    本发明工作原理如图1所示。虚拟机的运行过程将按照图1中所给出的流程来执行,其预加载列表的生成方法则按照图2所示的流程进行。在获得分配好了的预加载类的列表后,可以采用图3中给出的方法进行加载。在图1虚线部分,以及图2和3中所提出来的方法和执行机制均为本发明独创。
    图1中给出了Java虚拟机中类库的多线程加载的主要过程。虚线范围内的部分为优化过程。当硬件已启动完成后,本发明的Java虚拟机中类库的多线程预加载方法的过程如下:
    第一步,连接类库,生成预加载列表。把虚拟机运行时所需要预先加载的类都列在同一个文件里,形成一个预加载列表,在加载过程中虚拟机先访问预加载列表中的预加载项,然后对预加载项逐一进行加载。
    第二步,进行多线程类加载。通过平均分配的方法对预加载列表进行线程分配,以并发的形式对虚拟机中的资源进行同步预加载,初始化静态变量。
    第三步,将预加载的类信息存入共享内存资源。
    当Java程序运行时,不必重新加载,从共享内存资源中直接抽取所需的类,并执行包含在已装载的类或接口中的指令,经Jit编译器实时编译或Java解释器编译,获取字节码指令,然后分析并执行即可。本发明实施例中图1中的硬件可以是手机,操作系统为Android系统。
    如图2所示为预加载列表的生成过程,包括步骤1.1~步骤1.5。
    其中“开始”表示过程虚拟机已初始化完成。
    步骤1.1:连接类库,获取类信息,依次读取每个类开始执行步骤1.2。
    步骤1.2:判断所读取的类是否被至少两个应用所加载,如果是,将该类加入预加载列表,然后转步骤1.5执行;如果否,则进入下一步判断。
    步骤1.3:判断所读取的类所需要加载的时间是否大于额定最小值,如果是,将该类加入 预加载列表,然后转步骤1.5执行;如果否,则进入下一步判断。
    步骤1.4:判断所读取的类是否常驻内存区域,也就是该类存储的是否为运行环境必须的类信息,如果是,将该类加入预加载列表,然后执行步骤1.5;如果否,则直接执行步骤1.5。
    步骤1.5:判断是否类库中所有的类都完成了查询,如果是,则完成预加载列表的生成;如果否,继续读取下一个类,然后转步骤1.2执行。
    通过如图2所示的预加载列表的方式,筛选记录Java程序运行时需要多次加载或者必须常驻内存的类,从而预测出下次运行时需要预加载的类表,可以使得预加载类库随着应用程序和用户使用习惯的改变而自动调整,从而有效提高Java程序的运行效率。
    如图3所示为第二步中类库的多线程加载方法,包括步骤2.1~步骤2.7。
    步骤2.1:获取预加载列表信息。
    步骤2.2:根据多线程计算引擎的个数,将预加载列表中的类进行平均分配,形成多个子预加载列表。每个子预加载列表中包含的预加载类的个数基本相同。
    步骤2.3:启动多线程,进行类的预加载,每一个线程获得一个子预加载列表地址。
    步骤2.4:各个线程中,首先获取一个输入流,以便读取虚拟机的预加载列表中记录的类。
    步骤2.5:在获取输入流的基础上,创建类相应的存贮对象,设置缓存(Buffer)额度、读取(Reader)对象等,例如创建BufferedReader对象,并读取预加载列表中的内容。
    步骤2.6:判断输入的预加载列表中当前行是否包含注释或是空行,如果否,进行下一步;否则,如果包含注释,则忽略所读内容中的注释,然后执行步骤2.7,如果是空行,则继续读取下一行进行判断。
    步骤2.7:调用Java虚拟机中相应的接口,例如Class.forName()接口,将列表中的类的信息加载到内存中,对类中的静态变量进行初始化。
    通过多线程加载的方式同步加载预加载列表中的类,可以有效提高Java虚拟机启动阶段类库本身的加载速度。

    关 键 词:
    一种 JAVA 虚拟机 中类库 多线程 加载 方法
      专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:一种JAVA虚拟机中类库的多线程预加载方法.pdf
    链接地址://www.4mum.com.cn/p-6156892.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服客服 - 联系我们

    [email protected] 2017-2018 www.4mum.com.cn网站版权所有
    经营许可证编号:粤ICP备17046363号-1 
     


    收起
    展开
  • 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03