CN108717374B - Java虚拟机启动时预热的方法、装置、及计算机设备 - Google Patents

Java虚拟机启动时预热的方法、装置、及计算机设备 Download PDF

Info

Publication number
CN108717374B
CN108717374B CN201810375412.1A CN201810375412A CN108717374B CN 108717374 B CN108717374 B CN 108717374B CN 201810375412 A CN201810375412 A CN 201810375412A CN 108717374 B CN108717374 B CN 108717374B
Authority
CN
China
Prior art keywords
function
preheated
unit test
functions
determining
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.)
Active
Application number
CN201810375412.1A
Other languages
English (en)
Other versions
CN108717374A (zh
Inventor
魏亚文
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.)
Advanced New Technologies Co Ltd
Advantageous New Technologies Co Ltd
Original Assignee
Advanced New Technologies Co Ltd
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 Advanced New Technologies Co Ltd filed Critical Advanced New Technologies Co Ltd
Priority to CN201810375412.1A priority Critical patent/CN108717374B/zh
Publication of CN108717374A publication Critical patent/CN108717374A/zh
Application granted granted Critical
Publication of CN108717374B publication Critical patent/CN108717374B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45575Starting, stopping, suspending or resuming virtual machine instances

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

公开了一种Java虚拟机启动时预热的方法、装置及计算机设备,所述方法包括:在Java虚拟机启动过程中执行以下步骤:根据预设的系统关键字与历史编译日志确定待预热方法函数;获取所述待预热方法函数对应的单元测试用例;执行所述单元测试用例。

Description

Java虚拟机启动时预热的方法、装置、及计算机设备
技术领域
本说明书实施例涉及JAVA技术领域,尤其涉及Java虚拟机启动时预热的方法、装置、及。
背景技术
Java程序运行过程包括两个步骤,依次为:通过编译器将Java源码编译成字节码,通过JVM(Java Virtual Machine,Java虚拟机)的解释器将字节码逐行解释为机器指令并执行,然而,针对某些需要频繁运行的方法函数或代码块,即热点代码(Hot Spot Code)而言,逐行解释的时间成本较高,基于此,引入JIT编译器(Just-In-Time Compiler,即时编译器),在首次执行热点代码时,通过JIT编译器直接将热点代码编译为机器指令,并存储在缓存区中,下一次执行时则执行直接编译后的机器指令即可。
目前,在分布式系统中,单机高并发请求发生地越来越突然,持续时间也越来越长,而JVM是在设备启动之后,也即大量业务流量涌入之后才启用JIT编译器进行编译的,JIT编译器对大量业务流量进行编译的过程很可能会造成设备负载飙升,CPU使用率飙升,从而导致设备针对部分业务流量的处理超时,进一步很可能导致设备不可用,更有甚者将由于单台设备不可用从而导致整个集群故障。
发明内容
针对上述技术问题,本说明书实施例提供Java虚拟机启动时预热的方法、装置、及,技术方案如下:
根据本说明书实施例的第一方面,提供一种Java虚拟机启动时预热的方法,Java源码中的方法函数具有对应的单元测试用例,所述方法包括:
在Java虚拟机启动过程中执行以下步骤:
根据预设的系统关键字与历史编译日志确定待预热方法函数;
获取所述待预热方法函数对应的单元测试用例;
执行所述单元测试用例。
根据本说明书实施例的第二方面,提供一种Java虚拟机启动时预热的装置,Java源码中的方法函数具有对应的单元测试用例,所述装置包括:
确定模块,用于根据预设的系统关键字与历史编译日志确定待预热方法函数;
获取模块,用于获取所述待预热方法函数对应的单元测试用例;
执行模块,用于执行所述单元测试用例。
根据本说明书实施例的第三方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现本说明书实施例提供的任一Java虚拟机启动时预热的方法。
本说明书实施例所提供的技术方案,通过在Java虚拟机启动过程中执行如下步骤:根据预设的系统关键字与历史编译日志确定待预热方法函数,获取待预热方法函数对应的单元测试用例,执行单元测试用例,由于根据预设的系统关键字确定待预热方法函数,从而可以实现灵活定制不同的预热策略,并且,通过复用现有的单元测试用例即可实现方法级别的精准预热,无需额外编码,节省人力物力,同时,通过在Java虚拟机启动过程中即完成预热,可以实现提前将热点代码优化到最佳状态,以及将运行热点代码所需数据准备充分,以应对设备启动后突然出现的流量洪峰。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书实施例。
此外,本说明书实施例中的任一实施例并不需要达到上述的全部效果。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1为本说明书实施例示例出的一种Java虚拟机启动时预热的方法的实施例流程图;
图2为候选方法函数列表的一种示例;
图3为待预热方法函数列表的一种示例;
图4为图3中所示例的待预设方法函数对应的单元测试用例的一种示例;
图5为本说明书实施例示例出的一种Java虚拟机启动时预热的装置实施例框图;
图6示出了本说明书实施例所提供的一种更为具体的计算机设备硬件结构示意图。
具体实施方式
为了使本领域技术人员更好地理解本说明书实施例中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于保护的范围。
Java程序运行过程包括两个步骤,依次为:通过编译器将Java源码编译成字节码,通过JVM将字节码编译为机器指令并执行,其中,JVM将字节码编译为机器指令并执行的过程又可分为两种方式,其一:针对热点代码,在首次执行热点代码时,通过JIT编译器直接将热点代码编译为机器指令后执行,并将编译好的机器指令存储在缓存区中,以供下一次执行时直接从缓存区获取已编译好的机器指令;其二,针对非热点代码,按照常规方式对字节码进行逐行解释并执行。
上述热点代码是指运行特别频繁的方法函数或代码块,例如,当某个方法函数的被调用次数达到一定阈值,例如10000次,则该方法函数为热点代码,又例如,某个循环类型的方法函数的循环次数达到一定阈值,则该方法函数为热点代码。
然而,现有技术中,JVM是在设备启动之后,也即大量业务流量涌入之后才启用JIT编译器对热点代码进行编译的,而在分布式系统中,单机高并发请求发生地越来越突然,持续时间也越来越长,从而,单机高并发请求发生时,JIT编译器对大量业务流量进行编译的过程很可能会造成设备负载飙升,CPU利用率飙升,从而导致设备针对部分业务流量的处理超时,进一步很可能导致设备不可用,更有甚者将由于单台设备不可用从而导致整个集群故障。
基于此,本说明书实施例提供一种Java虚拟机启动时预热的方法,该方法中,在JVM启动过程中,即提前将某些热点代码优化到最佳状态,或者将运行热点代码所需数据提前准备充分,以应对设备启动后突然出现的流量洪峰。
如下,示出下述实施例对Java虚拟机启动时预热的方法进行说明:
请参见图1,为本说明书实施例示例出的一种Java虚拟机启动时预热的方法的实施例流程图,该方法发生在Java虚拟机启动过程中,可以包括以下步骤:
步骤101:根据预设的系统关键字与历史编译日志确定待预热方法函数。
在本说明书实施例中,JVM开始启动后,即可根据预先配置的静态文件开启预热过程,该静态文件中至少可以包括:系统关键字、预热超时时间、指定时间范围,其中,系统关键字可以包括待预热方法函数的方法属性,例如函数名称、代码路径等,预热超时时间则可以用于指示预热时长,即预热过程持续时长不得超过的最大时长,指定时间范围则可以用于指示待预热方法函数的历史编译时间范围,也即可以仅对编译时刻属于该指定时间范围内的待预热方法函数进行预热。
基于上述静态文件,在本说明书实施例中,则可以从历史编译日志中筛选出已编译完成,且编译时刻属于上述指定时间范围的方法函数,为了描述方便,将该些方法函数称为候选方法函数,例如,如图2所示,为候选方法函数列表的一种示例,在图2中,每一行记载有一个候选方法函数的方法属性,该方法属性包括代码路径与函数名称,其中,“::”前边为代码路径,“::”后边为函数名称,例如,以图2中的第一行为例,“com.aLipay.securitycenter.test.jit.jitCompLier”为代码路径,“calcSum”为函数名称。
在一实施例中,可以采用文件监听的方式从历史编译日志中筛选出候选方法函数,并且,在筛选候选方法函数时,还可以监听JVM的关闭钩子,以保证当JVM正常关闭时,将筛选出来的候选方法函数写入硬盘。
在一实施例中,可以按照时间升序的顺序,从历史编译日志中筛选出候选方法函数,并且,可以以“天”为单位,将筛选出的候选方法函数分文件存储在内存中。
进一步,则可以根据上述系统关键字,在候选方法函数中,查找到方法属性与系统关键字相匹配的方法函数,在说明书实施例中,方法属性与系统关键字相匹配的方法函数则为待预热方法函数,例如,图2中的第二行中所记载的方法函数即为待预热方法函数。
此外,由于在编写Java源码时,可以使用方法调用方式,例如,在图2中,第二行所记载的方法函数“doubleValue”则被第一行所记载的方法函数“calcSum”调用,为了描述方便,可以将被其它方法函数调用的方法函数称为内嵌函数,例如,“doubleValue”这一方法函数即为内嵌函数,而调用内嵌函数的方法则称为内嵌函数的上一层级的方法函数,而本领域技术人员可以理解的是,该上一层级的方法函数同时又可以为某一方法函数的内嵌函数,也即,对于某一内嵌函数而言,其可以具有多个层级的上层函数。
在本说明书实施例中,可以以最上层的方法函数作为预热入口,从而,在查找到方法属性与系统关键字相匹配的方法函数后,还可以进一步判断该方法函数是否为内嵌函数,若是,则将其各级上层方法函数均确定为待预热方法函数,例如,如图3所示,为待预热方法函数列表的一种示例,该图3所示例的待预热方法函数列表中包括编译时刻,序号,方法属性,例如,在图3所示例的第一行中,“2017-11-10T01:43:22.068+0800”表示编译时刻,318表示序号,其它部分则表示方法属性。
步骤102:获取待预热方法函数对应的单元测试用例。
在本说明书实施例中,确定待预热方法函数之后,可以进一步在Java源码中获取待预热方法函数对应的单元测试用例,本领域技术人员可以理解的是,开发人员在编写Java源码时,即可为全部或某些方法函数编写单元测试用例,例如,如图4所示,为图3中所示例的待预设方法函数对应的单元测试用例的一种示例。
如图4所示,单元测试用例带有自定义注解@PreJitHot,从而,在Java源码中查找待预热方法函数对应的单元测试用例时,则可以根据自定义注解@PreJitHot与待预热方法函数的方法属性共同查找。
步骤103:执行待预热方法函数对应的单元测试用例。
在本说明书实施例中,可以调用多个线程分别重复执行各个待预热方法函数对应的单元测试用例,直至各个单元测试用例的被执行次数均达到预设次数,或者是直至执行时长达到预设时长,其中,该预设时长即可以为上述步骤101中描述的超时时间。
需要说明的是,若待预热方法函数包括多个层级的方法函数,例如如图4所示例的待预热方法函数列表中包括两个层级的方法函数,则可以从最上层的待预热方法函数对应的单元测试用例开始,按照从上到下的层级顺序依次执行各个层级的待预热方法函数各自对应的单元测试用例。
至此,则完成了本说明书实施例提供的Java虚拟机启动时预热的过程。
此外,在本说明书实施例中,若采取严格模式时,还可以进一步通过查看历史编译日志以确定是否完成预热过程,也即通过是否可以在历史编译日志中查找到执行待预热方法函数对应的单元测试用例的相关记录,来确定是否完成预热过程,需要说明的是,本说明书实施例对是否采取严格模式并不作限制。
此外,在完成本说明书实施例提供的Java虚拟机启动时预热的过程之后,设备则可以正常加载业务模块并启动成功了,待启动成功之后,设备则可以打开对外流量的监听接口,以允许流量进入。
本说明书实施例所提供的技术方案,通过在Java虚拟机启动过程中执行如下步骤:根据预设的系统关键字与历史编译日志确定待预热方法函数,获取待预热方法函数对应的单元测试用例,执行单元测试用例,由于根据预设的系统关键字确定待预热方法函数,从而可以实现灵活定制不同的预热策略,并且,通过复用现有的单元测试用例即可实现方法级别的精准预热,无需额外编码,节省人力物力,同时,通过在Java虚拟机启动过程中即完成预热,可以实现提前将热点代码优化到最佳状态,以及将运行热点代码所需数据准备充分,以应对设备启动后突然出现的流量洪峰。
相应于上述方法实施例,本说明书实施例还提供一种Java虚拟机启动时预热的装置,请参见图5,为本说明书实施例示例出的一种Java虚拟机启动时预热的装置实施例框图,该装置可以包括:确定模块51、获取模块52,以及执行模块53。
其中,确定模块51,可以用于根据预设的系统关键字与历史编译日志确定待预热方法函数;
获取模块52,可以用于获取所述待预热方法函数对应的单元测试用例;
执行模块53,可以用于执行所述单元测试用例。
在一实施例中,所述确定模块51可以包括(图5中未示出):
筛选子模块,用于从历史编译日志中筛选出已编译完成,且编译时刻属于指定时间范围的候选方法函数;
匹配子模块,用于确定所述候选方法函数中方法属性与预设的系统关键字相匹配的方法函数为待预热方法函数,所述方法函数属性至少包括方法名称、代码路径。
在一实施例中,所述执行模块53可以具体用于:
调用多个线程分别重复执行各个待预热方法函数对应的单元测试用例,直至各个所述单元测试用例的被执行次数均达到预设次数。
在一实施例中,所述执行模块53可以具体用于:
调用多个线程分别重复执行各个待预热方法函数对应的单元测试用例,直至执行时长达到预设时长。
在一实施例中,所述装置还可以包括(图5中未示出):
判断模块,用于判断所述方法函数属性与预设的系统关键字相匹配的方法函数是否为内嵌函数;
处理模块,用于若所述方法属性与预设的系统关键字相匹配的方法函数为内嵌函数,则确定所述方法属性与预设的系统关键字相匹配的方法函数的各级上层方法函数为待预热方法函数。
在一实施例中,所述执行模块53可以具体用于:
若所述待预热方法函数包括多个层级的方法函数,则从最上层的待预热方法函数对应的单元测试用例开始,按照从上至下的层级顺序依次执行各个层级的待预热方法函数各自对应的单元测试用例。
可以理解的是,确定模块51、获取模块52,以及执行模块53作为三种功能独立的模块,既可以如图5所示同时配置在装置中,也可以分别单独配置在装置中,因此图5所示的结构不应理解为对本说明书实施例方案的限定。
此外,上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现前述的一种Java虚拟机启动时预热的方法,该方法至少包括:在Java虚拟机启动过程中执行以下步骤:根据预设的系统关键字与历史编译日志确定待预热方法函数;获取所述待预热方法函数对应的单元测试用例;执行所述单元测试用例。
在一实施例中,所述根据预设的系统关键字与历史编译日志确定待预热方法函数,包括:
从历史编译日志中筛选出已编译完成,且编译时刻属于指定时间范围的候选方法函数;
确定所述候选方法函数中方法属性与预设的系统关键字相匹配的方法函数为待预热方法函数,所述方法属性至少包括方法名称、代码路径。
在一实施例中,所述执行所述单元测试用例,包括:
调用多个线程分别重复执行各个待预热方法函数对应的单元测试用例,直至各个所述单元测试用例的被执行次数均达到预设次数。
在一实施例中,所述执行所述单元测试用例,包括:
调用多个线程分别重复执行各个待预热方法函数对应的单元测试用例,直至执行时长达到预设时长。
在一实施例中,在所述确定所述候选方法函数中方法函数属性与预设的系统关键字相匹配的方法函数为待预热方法函数之后,所述方法还包括:
判断所述方法属性与预设的系统关键字相匹配的方法函数是否为内嵌函数;
若是,则确定所述方法属性与预设的系统关键字相匹配的方法函数的各级上层方法函数为待预热方法函数。
在一实施例中,所述执行所述单元测试用例,包括:
若所述待预热方法函数包括多个层级的方法函数,则从最上层的待预热方法函数对应的单元测试用例开始,按照从上至下的层级顺序依次执行各个层级的待预热方法函数各自对应的单元测试用例。
图6示出了本说明书实施例所提供的一种更为具体的计算机设备硬件结构示意图,该设备可以包括:处理器610、存储器620、输入/输出接口630、通信接口640和总线650。其中处理器610、存储器620、输入/输出接口630和通信接口640通过总线650实现彼此之间在设备内部的通信连接。
处理器610可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器620可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器620可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器620中,并由处理器610来调用执行。
输入/输出接口630用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图6中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口640用于连接通信模块(图6中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线650包括一通路,在设备的各个组件(例如处理器610、存储器620、输入/输出接口630和通信接口640)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器610、存储器620、输入/输出接口630、通信接口640以及总线650,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述的一种Java虚拟机启动时预热的方法,该方法至少包括:在Java虚拟机启动过程中执行以下步骤:根据预设的系统关键字与历史编译日志确定待预热方法函数;获取所述待预热方法函数对应的单元测试用例;执行所述单元测试用例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法函数或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法函数。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法函数实施例,所以描述得比较简单,相关之处参见方法函数实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。

Claims (13)

1.一种Java虚拟机启动时预热的方法,Java源码中的方法函数具有对应的单元测试用例,所述方法包括:
在Java虚拟机启动过程中执行以下步骤:
根据预设的系统关键字与历史编译日志确定待预热方法函数;
获取所述待预热方法函数对应的单元测试用例;
执行所述单元测试用例。
2.根据权利要求1所述的方法,所述根据预设的系统关键字与历史编译日志确定待预热方法函数,包括:
从历史编译日志中筛选出已编译完成,且编译时刻属于指定时间范围的候选方法函数;
确定所述候选方法函数中方法属性与预设的系统关键字相匹配的方法函数为待预热方法函数,所述方法属性至少包括方法名称、代码路径。
3.根据权利要求1所述的方法,所述执行所述单元测试用例,包括:
调用多个线程分别重复执行各个待预热方法函数对应的单元测试用例,直至各个所述单元测试用例的被执行次数均达到预设次数。
4.根据权利要求1所述的方法,所述执行所述单元测试用例,包括:
调用多个线程分别重复执行各个待预热方法函数对应的单元测试用例,直至执行时长达到预设时长。
5.根据权利要求2所述的方法,在所述确定所述候选方法函数中方法函数属性与预设的系统关键字相匹配的方法函数为待预热方法函数之后,所述方法还包括:
判断所述方法属性与预设的系统关键字相匹配的方法函数是否为内嵌函数;
若是,则确定所述方法属性与预设的系统关键字相匹配的方法函数的各级上层方法函数为待预热方法函数。
6.根据权利要求5所述的方法,所述执行所述单元测试用例,包括:
若所述待预热方法函数包括多个层级的方法函数,则从最上层的待预热方法函数对应的单元测试用例开始,按照从上至下的层级顺序依次执行各个层级的待预热方法函数各自对应的单元测试用例。
7.一种Java虚拟机启动时预热的装置,Java源码中的方法函数具有对应的单元测试用例,所述装置包括:
确定模块,用于根据预设的系统关键字与历史编译日志确定待预热方法函数;
获取模块,用于获取所述待预热方法函数对应的单元测试用例;
执行模块,用于执行所述单元测试用例。
8.根据权利要求7所述的装置,所述确定模块包括:
筛选子模块,用于从历史编译日志中筛选出已编译完成,且编译时刻属于指定时间范围的候选方法函数;
匹配子模块,用于确定所述候选方法函数中方法属性与预设的系统关键字相匹配的方法函数为待预热方法函数,所述方法函数属性至少包括方法名称、代码路径。
9.根据权利要求7所述的装置,所述执行模块具体用于:
调用多个线程分别重复执行各个待预热方法函数对应的单元测试用例,直至各个所述单元测试用例的被执行次数均达到预设次数。
10.根据权利要求7所述的装置,所述执行模块具体用于:
调用多个线程分别重复执行各个待预热方法函数对应的单元测试用例,直至执行时长达到预设时长。
11.根据权利要求8所述的装置,所述装置还包括:
判断模块,用于判断所述方法函数属性与预设的系统关键字相匹配的方法函数是否为内嵌函数;
处理模块,用于若所述方法属性与预设的系统关键字相匹配的方法函数为内嵌函数,则确定所述方法属性与预设的系统关键字相匹配的方法函数的各级上层方法函数为待预热方法函数。
12.根据权利要求11所述的装置,所述执行模块具体用于:
若所述待预热方法函数包括多个层级的方法函数,则从最上层的待预热方法函数对应的单元测试用例开始,按照从上至下的层级顺序依次执行各个层级的待预热方法函数各自对应的单元测试用例。
13.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如权利要求1至6任一项所述的方法。
CN201810375412.1A 2018-04-24 2018-04-24 Java虚拟机启动时预热的方法、装置、及计算机设备 Active CN108717374B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810375412.1A CN108717374B (zh) 2018-04-24 2018-04-24 Java虚拟机启动时预热的方法、装置、及计算机设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810375412.1A CN108717374B (zh) 2018-04-24 2018-04-24 Java虚拟机启动时预热的方法、装置、及计算机设备

Publications (2)

Publication Number Publication Date
CN108717374A CN108717374A (zh) 2018-10-30
CN108717374B true CN108717374B (zh) 2021-08-17

Family

ID=63899146

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810375412.1A Active CN108717374B (zh) 2018-04-24 2018-04-24 Java虚拟机启动时预热的方法、装置、及计算机设备

Country Status (1)

Country Link
CN (1) CN108717374B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113032035B (zh) * 2019-12-24 2022-07-12 Oppo广东移动通信有限公司 配置文件处理方法、装置以及电子设备
CN113127047A (zh) * 2019-12-31 2021-07-16 Oppo广东移动通信有限公司 热点代码处理方法、装置、服务器及存储介质
CN111475235B (zh) * 2020-04-13 2023-09-12 北京字节跳动网络技术有限公司 函数计算冷启动的加速方法、装置、设备及存储介质
CN111770113B (zh) * 2020-08-31 2021-07-30 支付宝(杭州)信息技术有限公司 一种执行智能合约的方法、区块链节点和节点设备
CN112394941A (zh) * 2020-11-18 2021-02-23 京东数字科技控股股份有限公司 代码预热方法、装置、电子设备及存储介质
CN114265772A (zh) * 2021-12-17 2022-04-01 绿盟科技集团股份有限公司 一种测试用例的生成方法及一种测试方法
CN116016648A (zh) * 2022-12-28 2023-04-25 北京沃东天骏信息技术有限公司 一种服务预热方法和装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1504881A (zh) * 2002-12-02 2004-06-16 三星电子株式会社 爪哇执行设备和爪哇执行方法
CN102567033A (zh) * 2010-12-14 2012-07-11 北京大学 基于嵌入式实时Java虚拟机的预先类加载方法及装置
CN103793249A (zh) * 2014-01-24 2014-05-14 北京航空航天大学 一种Java虚拟机中类库的多线程预加载方法
CN105589729A (zh) * 2015-12-28 2016-05-18 北京锐安科技有限公司 一种基于嵌入式虚拟机的动态编译的方法及装置
CN106682148A (zh) * 2016-12-22 2017-05-17 北京锐安科技有限公司 一种基于Solr数据搜索的方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1504881A (zh) * 2002-12-02 2004-06-16 三星电子株式会社 爪哇执行设备和爪哇执行方法
CN102567033A (zh) * 2010-12-14 2012-07-11 北京大学 基于嵌入式实时Java虚拟机的预先类加载方法及装置
CN103793249A (zh) * 2014-01-24 2014-05-14 北京航空航天大学 一种Java虚拟机中类库的多线程预加载方法
CN105589729A (zh) * 2015-12-28 2016-05-18 北京锐安科技有限公司 一种基于嵌入式虚拟机的动态编译的方法及装置
CN106682148A (zh) * 2016-12-22 2017-05-17 北京锐安科技有限公司 一种基于Solr数据搜索的方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Why does the JVM require warmup;Peter Lawrey et al.;《https://stackoverflow.com/questions/36198278/why-does-the-jvm-require-warmup#》;20161231;第1-10页 *

Also Published As

Publication number Publication date
CN108717374A (zh) 2018-10-30

Similar Documents

Publication Publication Date Title
CN108717374B (zh) Java虚拟机启动时预热的方法、装置、及计算机设备
CN107025559B (zh) 一种业务处理方法及装置
CN107832100B (zh) 一种apk插件的加载方法及其终端
US10963267B2 (en) Bootstrapping profile-guided compilation and verification
US20150186161A1 (en) Platform system, method for changing support hardware configuration of universal extensible firmware interface basic input output system and computer program product
CN109359118B (zh) 一种数据写入方法及装置
CN111767226B (zh) 一种云计算平台资源的测试方法、系统及设备
CN111736913B (zh) 类加载方法和装置
CN107832059A (zh) 一种基于Makefile的代码静态分析方法和装置
CN110347497B (zh) 一种将多个存储设备划分设备组的方法及装置
CN111949297B (zh) 一种区块链智能合约升级方法、装置及电子设备
CN116126581B (zh) 内存故障处理方法、装置、系统、设备及存储介质
CN110968333B (zh) 配置信息替换方法和装置、机器可读存储介质及处理器
CN109977005B (zh) 端到端测试方法、介质、装置和计算设备
CN115659340B (zh) 一种仿冒小程序识别方法、装置、存储介质及电子设备
CN111367710B (zh) 一种eMMC问题还原方法和装置
CN109656805B (zh) 用于业务分析的代码链路的生成方法、装置及业务服务器
CN115442262A (zh) 一种资源评估方法、装置、电子设备及存储介质
CN110471828A (zh) 一种操作系统测试方法、装置及其设备
CN114840427A (zh) 一种代码测试、测试用例生成的方法及装置
CN108920563B (zh) 一种数据库切换方法及装置
CN114138444A (zh) 一种任务调度方法、装置、设备、存储介质及程序产品
CN111356987B (zh) 动态内存的识别方法和装置
CN111158733A (zh) 一种bmc升级方法、装置、设备及计算机可读存储介质
CN104731665B (zh) 一种信息处理方法及电子设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20200922

Address after: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Applicant after: Innovative advanced technology Co.,Ltd.

Address before: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Applicant before: Advanced innovation technology Co.,Ltd.

Effective date of registration: 20200922

Address after: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Applicant after: Advanced innovation technology Co.,Ltd.

Address before: A four-storey 847 mailbox in Grand Cayman Capital Building, British Cayman Islands

Applicant before: Alibaba Group Holding Ltd.

GR01 Patent grant
GR01 Patent grant