CN112463303B - Java虚拟机类加载方法及系统 - Google Patents
Java虚拟机类加载方法及系统 Download PDFInfo
- Publication number
- CN112463303B CN112463303B CN202011380272.0A CN202011380272A CN112463303B CN 112463303 B CN112463303 B CN 112463303B CN 202011380272 A CN202011380272 A CN 202011380272A CN 112463303 B CN112463303 B CN 112463303B
- Authority
- CN
- China
- Prior art keywords
- class
- target
- loading
- virtual machine
- paths
- 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
Links
- 238000011068 loading method Methods 0.000 title claims abstract description 152
- 238000012545 processing Methods 0.000 claims description 18
- 238000004590 computer program Methods 0.000 claims description 16
- 230000006870 function Effects 0.000 abstract description 15
- 238000000034 method Methods 0.000 description 17
- 230000008569 process Effects 0.000 description 11
- 238000010586 diagram Methods 0.000 description 10
- 230000007246 mechanism Effects 0.000 description 10
- 238000002347 injection Methods 0.000 description 6
- 239000007924 injection Substances 0.000 description 6
- 230000002708 enhancing effect Effects 0.000 description 4
- 239000003795 chemical substances by application Substances 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000012216 screening Methods 0.000 description 2
- 230000007488 abnormal function Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000000243 solution Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供一种JAVA虚拟机类加载方法及系统,应用于云计算技术领域。该JAVA虚拟机类加载方法包括:获取类加载请求,类加载请求包括类名称;确定类名称对应的多个类路径;根据预设的策略配置文件和多个类路径对应的类文件生成目标类文件;加载目标类文件的目标字节码;对目标字节码进行初始化,生成类对象。本发明可以确保应用程序在不同部署环境运行功能的一致性,进而提高了应用投产上线的运行安全性。
Description
技术领域
本发明涉及云计算技术领域,具体地,涉及一种JAVA虚拟机类加载方法及系统。
背景技术
随着开源技术的发展和系统越来越复杂模块化,开发人员为了不断满足新需求而开发的功能可能需要频繁地新增引入外部的jar包进行依赖,而不同的jar包中经常存在相同的类,导致同一个信息系统的程序中引入了冲突的类和方法。由于JAVA虚拟机的实现机制,在不同的文件系统下可能会产生不同的类加载顺序,这就导致同样的应用程序部署在不同的环境下由于类加载顺序的不同可能体现出不同的应用行为。不可预估的类加载顺序经常会导致应用系统部署上线后遇到功能异常,应用开发人员对于可预估的类加载顺序需求迫切,因此亟需实现一种可以控制固定类加载顺序的方法来解决日益突出的冲突类的加载顺序问题。
发明内容
本发明实施例的主要目的在于提供一种JAVA虚拟机类加载方法及系统,以确保应用程序在不同部署环境运行功能的一致性,进而提高了应用投产上线的运行安全性。
为了实现上述目的,本发明实施例提供一种JAVA虚拟机类加载方法,包括:
获取类加载请求,类加载请求包括类名称;
确定类名称对应的多个类路径;
根据预设的策略配置文件和多个类路径对应的类文件生成目标类文件;
加载目标类文件的目标字节码;
对目标字节码进行初始化,生成类对象。
本发明实施例还提供一种JAVA虚拟机类加载系统,包括:
获取单元,用于获取类加载请求,所述类加载请求包括类名称;
类路径确定单元,用于确定类名称对应的多个类路径;
目标类文件生成单元,用于根据预设的策略配置文件和多个类路径对应的类文件生成目标类文件;
加载单元,用于加载目标类文件的目标字节码;
类对象生成单元,用于对目标字节码进行初始化,生成类对象。
本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并在处理器上运行的计算机程序,处理器执行计算机程序时实现所述的JAVA虚拟机类加载方法的步骤。
本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现所述的JAVA虚拟机类加载方法的步骤。
本发明实施例的JAVA虚拟机类加载方法及系统先确定类名称对应的多个类路径,然后根据策略配置文件和多个类路径对应的类文件生成目标类文件,最后对加载目标类文件获取的目标字节码进行初始化,生成类对象,以确保应用程序在不同部署环境运行功能的一致性,进而提高了应用投产上线的运行安全性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是现有技术中JAVA虚拟机类加载系统的结构图;
图2是本发明实施例中JAVA虚拟机类加载方法的流程图;
图3是本发明实施例中JAVA虚拟机类加载系统的结构框图;
图4是本发明实施例中JAVA虚拟机类加载系统的实际结构框图;
图5是图4的功能流程示意图;
图6是本发明实施例中计算机设备的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本领域技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
鉴于不可预估的类加载顺序经常会导致应用系统部署上线后遇到功能异常,本发明实施例提供一种JAVA虚拟机类加载方法,通过控制类的加载顺序保证应用程序在不同的环境部署运行时均能够按照确定可控的顺序加载,确保应用程序在不同部署环境运行功能的一致性,进而提高了应用投产上线的运行安全性。以下结合附图对本发明进行详细说明。
本发明可调整JAVA虚拟机的类加载顺序,实现按需灵活控制类加载顺序。当应用程序中存在类冲突时,能够保证在应用程序的启动过程中仍能够按照预期的顺序进行类检索和类加载,确保应用程序加载到正确的类。同时,本发明是通过一种对应用无侵入式的方式来调整目标类加载顺序,解决应用中冲突类的加载顺序问题。
为了更好地理解本发明实现的技术原理,先对JAVA虚拟机自身类加载系统的处理流程做简要说明。
JAVA虚拟机是JAVA编程语言的运行环境。JAVA语言源代码编译所得的类文件,需要通过类加载流程才能被JAVA虚拟机所使用,该类加载过程由JAVA虚拟机中类加载系统完成。图1是现有技术中JAVA虚拟机类加载系统的结构图。参照图1,类加载系统111主要划分为如下模块:字节码定位模块112、字节码读取模块113、类解析模块114和初始化模块115。类加载系统111大致上运行流程为获取输入,数据处理,输出结果。其中类加载系统111需要的输入数据为类字节码,类字节码源116通常为类文件,类加载系统111处理输出的结果为类对象117,存放在JAVA虚拟机内存中,供JAVA虚拟机和其他代码调用使用。
类加载系统111在接收到加载某个类的请求后,首先由字节码定位模块112根据加载请求中提供的需求类的全限定名称,从类路径中寻找相应的jar包或者目标路径以定位到类文件的具体位置。其中类路径为JAVA虚拟机内置的默认位置和JAVA虚拟机启动参数中配置的用户自定义位置的并集。随后,字节码读取模块113读取定位到的类文件的字节码数据;类解析模块114解析获取到的字节码,在JAVA虚拟机内存空间中构建出相应的数据及数据结构,根据构建出的数据及数据结构解析及关联新增类(获取到的字节码对应的类)与其他类的相互关系,构建相关关联信息的数据,同时查找新增类是否能够获取到自身依赖的类(相关类),如果可以获取到相关类则触发相关类的加载过程。初始化模块115,对解析完成的类进行初始化,最后类加载系统111向JAVA虚拟机返回请求所需的类对象117。
在字节码定位模块中,由于JAVA虚拟机或中间件层等问题,存在搜索路径固定,类加载器之间有明确的分层,对类加载缺少灵活可变可顺序控制机制,JAVA虚拟机内部jar包相关搜索逻辑中,最终底层调用的是FileSystem.list()函数获取目录文件列表,不同操作系统、不同底层实现,获取到的文件列表顺序不尽相同,造成类加载顺序无法保证。
图2是本发明实施例中JAVA虚拟机类加载方法的流程图。如图2所示,JAVA虚拟机类加载方法包括:
S101:获取类加载请求。
其中,类加载请求包括类名称(类的全限定名)和原字节码。
一实施例中,S101包括:根据预先利用JAVA Instrument机制注册的回调事件获取类加载请求,完成类加载增强逻辑的注入动作。
S102:确定类名称对应的多个类路径。
一实施例中,S102包括:根据类名称对应的类路径数量确定类名称的类型;当类名称为冲突类名称时,确定该类名称对应的多个类路径。
具体实施时,在执行S102之前还可以包括:先扫描JAVA虚拟机环境中能够获取到的所有类路径,包括默认路径和配置的路径,收集类路径下所有类文件的相关信息,形成信息字典,其中需要汇总该JAVA虚拟机环境下全限定名相同的类,保存记录潜在的类冲突条件情况。类名称对应的类路径数量不止一个时,该类名称为冲突类名称,被记录进信息字典。当类名称位于信息字典中时,执行S102。当类的类名称不在信息字典中时,该类为不符合潜在类冲突情况的类,因此会被筛选排除,结束回调事件处理。
S103:根据预设的策略配置文件和多个类路径对应的类文件生成目标类文件。
一实施例中,在执行S103之前可以包括:获取、加载用户设定的关于对类加载顺序的策略配置文件,解析其中的类加载顺序策略,判断类加载请求中的类名称是否包含在策略配置文件定义的策略中。当类名称与其中一个策略匹配,执行S103,否则将该类加载请求视为用户不关心的类,不做处理。
一实施例中,S103包括:根据类名称从策略配置文件中获取目标配置策略;根据目标配置策略和多个类路径对应的类文件生成目标类文件。
具体实施时,目标配置策略可以包括以下三种:
一、指定类的类名称及来源的类路径,确定该类路径对应的类文件为目标类文件。其中,类路径包括jar包或目标路径。
二、自适应选择版本较新的类,确定多个类路径对应的类文件中的最新版本,确定该最新版本对应的类文件为目标类文件。
三、将类冲突类从字节码层面进行合并,适配上层应用中使用到该类的情形。例如,将目标配置策略中提及的多个类路径对应的类文件进行合并,生成目标类文件。
S104:加载目标类文件的目标字节码。
具体实施时,S104包括:加载目标类文件的目标字节码至内存,通过JAVAInstrument机制将原字节码替换为目标字节码。
S105:对目标字节码进行初始化,生成类对象。
在执行S05之前,还可以包括:解析获取到的目标字节码,在JAVA虚拟机内存空间中构建出相应的数据及数据结构,根据构建出的数据及数据结构解析及关联新增类(目标字节码对应的类)与其他类的相互关系,构建相关关联信息的数据,同时查找新增类是否能够获取到自身依赖的类(相关类),如果可以获取到相关类则触发相关类的加载过程。
图2所示的JAVA虚拟机类加载方法的执行主体为JAVA虚拟机类加载系统,应用于JAVA虚拟机。由图2所示的流程可知,本发明实施例的JAVA虚拟机类加载方法先确定类名称对应的多个类路径,然后根据策略配置文件和多个类路径对应的类文件生成目标类文件,最后对加载目标类文件获取的目标字节码进行初始化,生成类对象,以确保应用程序在不同部署环境运行功能的一致性,进而提高了应用投产上线的运行安全性。
本发明实施例的具体流程如下:
1、获取类加载请求,根据类名称对应的类路径数量确定类名称的类型。
2、当类名称为冲突类名称时,确定该类名称对应的多个类路径。
3、根据类名称从策略配置文件中获取目标配置策略。
4、根据目标配置策略和多个类路径对应的类文件生成目标类文件
5、加载目标类文件的目标字节码至内存,通过JAVA Instrument机制将原字节码替换为目标字节码。
6、对目标字节码进行初始化,生成类对象。
综上,本发明提供了一种JAVA虚拟机类加载方法,该方法不需要应用修改已引用的依赖jar包即可保证在存在类冲突的情况下,不同的运行环境均能按照预期的配置顺序进行类加载,保证各个运行环境均能加载到正确的类,进而保证不同部署环境功能的一致性。本发明解决了当前JAVA虚拟机类加载顺序不可控的问题,该问题会导致同样存在类冲突的应用程序在不同的运行环境出现加载不同类的情况,此种情况会导致应用投产上线之后由于加载了错误版本的类出现不可预期的功能,进而导致信息系统运行的生产问题。本发明不需要修改程序,即可在存在类冲突的情况下有效避免加载不期望的类导致应用系统功能异常的问题,最大程度的确保应用投产上线的运行安全性。
基于同一发明构思,本发明实施例还提供了一种JAVA虚拟机类加载系统,由于该系统解决问题的原理与JAVA虚拟机类加载方法相似,因此该系统的实施可以参见方法的实施,重复之处不再赘述。
图3是本发明实施例中JAVA虚拟机类加载系统的结构框图。图4是本发明实施例中JAVA虚拟机类加载系统的实际结构框图。图5是图4的功能流程示意图。如图3-图5所示,JAVA虚拟机类加载系统包括:
获取单元,用于获取类加载请求,所述类加载请求包括类名称;
类路径确定单元,用于确定类名称对应的多个类路径;
目标类文件生成单元,用于根据预设的策略配置文件和多个类路径对应的类文件生成目标类文件;
加载单元,用于加载目标类文件的目标字节码;
类对象生成单元,用于对目标字节码进行初始化,生成类对象。
在其中一种实施例中,目标类文件生成单元具体用于:
根据类名称从策略配置文件中获取目标配置策略;
根据目标配置策略和多个类路径对应的类文件生成目标类文件。
在其中一种实施例中,获取单元具体用于:
根据预先注册的回调事件获取类加载请求。
在其中一种实施例中,类路径确定单元具体用于:
根据类名称对应的类路径数量确定类名称的类型;
当类名称为冲突类名称时,确定该类名称对应的多个类路径。
如图4-图5所示,在实际应用中,JAVA虚拟机类加载系统包括类解析模块114,初始化模块115和类加载顺序增强装置221以实现类加载顺序可控调整。类加载顺序增强装置221包含代理(Agent)注册单元222、扫描单元223、目标匹配单元224、裁决单元225、策略实施单元226、加载单元227和类字节码注入单元228。
代理注册单元222负责利用JAVA Instrument机制注册回调事件,完成类加载增强逻辑的注入动作。
扫描单元223用于扫描JAVA虚拟机环境中能够获取到的所有类路径,包括默认路径和配置的路径,收集类路径下所有类文件的相关信息,形成信息字典,其中需要汇总该JAVA虚拟机环境下全限定名相同的类,保存记录潜在的类冲突条件情况。
目标匹配单元224包括获取单元和类路径确定单元,用于筛选出冲突类。由于在类加载顺序增强装置221初始化时代理注册单元222已经向JAVA虚拟机注册了类加载相关回调事件,因此JAVA虚拟机的类加载事件发生时,类加载请求会通知到类加载顺序增强装置221,接收到的类加载请求首先由目标匹配单元224解析出需要加载的类的全限定名,根据扫描单元223生成的信息字典进行筛选,不符合潜在类冲突情况的类会被筛选排除,结束回调事件处理,不会进行后续单元组件的处理。
裁决单元225包括目标类文件生成单元,用于获取、加载用户对类加载顺序的策略配置文件229,解析其中的类加载顺序策略,同时判断目标匹配单元224传递来的类加载请求中的类名称是否包含在策略配置文件定义的策略中。当类名称与其中一个策略匹配,则将类加载请求交由策略实施单元226继续处理,其他类加载请求则视为用户不关心的类,不做处理。
策略实施单元226包括目标类文件生成单元,用于从策略配置文件中获取目标配置策略,对传递来的类加载请求做处理,最终决定加载哪个候选类到JAVA虚拟机中。
加载单元227包括图3中的目标类文件生成单元和加载单元,用于根据策略实施单元226生成目标配置策略和多个类路径对应的类文件生成目标类文件,加载目标类文件的目标字节码到内存中。
具体实施时,目标配置策略可以包括以下三种:
一、指定类的类名称及来源的类路径,确定该类路径对应的类文件为目标类文件。其中,类路径包括jar包或目标路径。
二、自适应选择版本较新的类,确定多个类路径对应的类文件中的最新版本,确定该最新版本对应的类文件为目标类文件。
三、将类冲突类从字节码层面进行合并,适配上层应用中使用到该类的情形。例如,将目标配置策略中提及的多个类路径对应的类文件进行合并,生成目标类文件。
类字节码注入单元228包括图3中的加载单元,用于将加载单元227加载的目标字节码通过JAVA Instrument机制将来自类加载系统111的原字节码替换为目标字节码,最终使得目标字节码被JAVA虚拟机使用。
如图5所示,本发明包括以下步骤:
1、代理注册。在JAVA虚拟机启动阶段,通过JAVA Instrument机制,代理注册单元222注册自身到类加载事件回调调用列表中,同时完成类加载顺序增强装置221自身初始化,由裁决单元读取相关策略配置文件229,解析策略配置文件229中用户指定的策略。
2、扫描类文件。扫描单元223扫描JAVA虚拟机可获得的所有类文件,生成信息字典,收集、标注潜在类冲突情况。
3、接收类加载事件。在JAVA虚拟机正常运行过程中发生类加载事件(类加载请求),在底层处理过程中会调用通过JAVA Instrument机制注册的回调过程,回调过程将类加载事件发送到类加顺序增强装置,由类加顺序增强装置对类加载请求作后续处理。
4、匹配处理目标。目标匹配单元224通过判断回调获得的类加载请求是否为潜在类冲突情况,决定是否需要后续步骤处理。
5、策略裁决。裁决单元225判断一个潜在的类冲突事件是否被用户指定需要处理,如果符合条件,则交由策略实施单元226进行处理,不符合用户定义处理条件的,则跳过后续处理步骤。
6、策略实施。策略实施单元226根据配置的策略决定实施的方案,得到实际加载的类路径或类合并的相关信息。
7、类加载或类生成。加载单元227根据实施方案加载具体类的字节码,或者生成合并类的字节码。
8、字节码注入。类字节码注入单元228将上面步骤中得到的字节码以符合JAVAInstrument机制的方式返回给JAVA虚拟机。
综上,本发明实施例的JAVA虚拟机类加载系统先确定类名称对应的多个类路径,然后根据策略配置文件和多个类路径对应的类文件生成目标类文件,最后对加载目标类文件获取的目标字节码进行初始化,生成类对象,以确保应用程序在不同部署环境运行功能的一致性,进而提高了应用投产上线的运行安全性。
本发明实施例还提供能够实现上述实施例中的JAVA虚拟机类加载方法中全部步骤的一种计算机设备的具体实施方式。图6是本发明实施例中计算机设备的结构框图,参见图6,所述计算机设备具体包括如下内容:
处理器(processor)601和存储器(memory)602。
所述处理器601用于调用所述存储器602中的计算机程序,所述处理器执行所述计算机程序时实现上述实施例中的JAVA虚拟机类加载方法中的全部步骤,例如,所述处理器执行所述计算机程序时实现下述步骤:
获取类加载请求,类加载请求包括类名称;
确定类名称对应的多个类路径;
根据预设的策略配置文件和多个类路径对应的类文件生成目标类文件;
加载目标类文件的目标字节码;
对目标字节码进行初始化,生成类对象。
综上,本发明实施例的计算机设备先确定类名称对应的多个类路径,然后根据策略配置文件和多个类路径对应的类文件生成目标类文件,最后对加载目标类文件获取的目标字节码进行初始化,生成类对象,以确保应用程序在不同部署环境运行功能的一致性,进而提高了应用投产上线的运行安全性。
本发明实施例还提供能够实现上述实施例中的JAVA虚拟机类加载方法中全部步骤的一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中的JAVA虚拟机类加载方法的全部步骤,例如,所述处理器执行所述计算机程序时实现下述步骤:
获取类加载请求,类加载请求包括类名称;
确定类名称对应的多个类路径;
根据预设的策略配置文件和多个类路径对应的类文件生成目标类文件;
加载目标类文件的目标字节码;
对目标字节码进行初始化,生成类对象。
综上,本发明实施例的计算机可读存储介质先确定类名称对应的多个类路径,然后根据策略配置文件和多个类路径对应的类文件生成目标类文件,最后对加载目标类文件获取的目标字节码进行初始化,生成类对象,以确保应用程序在不同部署环境运行功能的一致性,进而提高了应用投产上线的运行安全性。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
本领域技术人员还可以了解到本发明实施例列出的各种说明性逻辑块(illustrative logical block),单元,和步骤可以通过电子硬件、电脑软件,或两者的结合进行实现。为清楚展示硬件和软件的可替换性(interchangeability),上述的各种说明性部件(illustrative components),单元和步骤已经通用地描述了它们的功能。这样的功能是通过硬件还是软件来实现取决于特定的应用和整个系统的设计要求。本领域技术人员可以对于每种特定的应用,可以使用各种方法实现所述的功能,但这种实现不应被理解为超出本发明实施例保护的范围。
本发明实施例中所描述的各种说明性的逻辑块,或单元,或装置都可以通过通用处理器,数字信号处理器,专用集成电路(ASIC),现场可编程门阵列或其它可编程逻辑装置,离散门或晶体管逻辑,离散硬件部件,或上述任何组合的设计来实现或操作所描述的功能。通用处理器可以为微处理器,可选地,该通用处理器也可以为任何传统的处理器、控制器、微控制器或状态机。处理器也可以通过计算装置的组合来实现,例如数字信号处理器和微处理器,多个微处理器,一个或多个微处理器联合一个数字信号处理器核,或任何其它类似的配置来实现。
本发明实施例中所描述的方法或算法的步骤可以直接嵌入硬件、处理器执行的软件模块、或者这两者的结合。软件模块可以存储于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可移动磁盘、CD-ROM或本领域中其它任意形式的存储媒介中。示例性地,存储媒介可以与处理器连接,以使得处理器可以从存储媒介中读取信息,并可以向存储媒介存写信息。可选地,存储媒介还可以集成到处理器中。处理器和存储媒介可以设置于ASIC中,ASIC可以设置于用户终端中。可选地,处理器和存储媒介也可以设置于用户终端中的不同的部件中。
在一个或多个示例性的设计中,本发明实施例所描述的上述功能可以在硬件、软件、固件或这三者的任意组合来实现。如果在软件中实现,这些功能可以存储与电脑可读的媒介上,或以一个或多个指令或代码形式传输于电脑可读的媒介上。电脑可读媒介包括电脑存储媒介和便于使得让电脑程序从一个地方转移到其它地方的通信媒介。存储媒介可以是任何通用或特殊电脑可以接入访问的可用媒体。例如,这样的电脑可读媒体可以包括但不限于RAM、ROM、EEPROM、CD-ROM或其它光盘存储、磁盘存储或其它磁性存储装置,或其它任何可以用于承载或存储以指令或数据结构和其它可被通用或特殊电脑、或通用或特殊处理器读取形式的程序代码的媒介。此外,任何连接都可以被适当地定义为电脑可读媒介,例如,如果软件是从一个网站站点、服务器或其它远程资源通过一个同轴电缆、光纤电缆、双绞线、数字用户线(DSL)或以例如红外、无线和微波等无线方式传输的也被包含在所定义的电脑可读媒介中。所述的碟片(disk)和磁盘(disc)包括压缩磁盘、镭射盘、光盘、DVD、软盘和蓝光光盘,磁盘通常以磁性复制数据,而碟片通常以激光进行光学复制数据。上述的组合也可以包含在电脑可读媒介中。
Claims (6)
1.一种JAVA虚拟机类加载方法,其特征在于,包括:
获取类加载请求,所述类加载请求包括类名称;
确定所述类名称对应的多个类路径;
根据预设的策略配置文件和所述多个类路径对应的类文件生成目标类文件;
加载所述目标类文件的目标字节码;
对所述目标字节码进行初始化,生成类对象;
确定所述类名称对应的多个类路径包括:
根据所述类名称对应的类路径数量确定所述类名称的类型;
当所述类名称为冲突类名称时,确定该类名称对应的多个类路径;
根据预设的策略配置文件和所述多个类路径对应的类文件生成目标类文件包括:
根据所述类名称从所述策略配置文件中获取目标配置策略;
根据所述目标配置策略和所述多个类路径对应的类文件生成目标类文件。
2.根据权利要求1所述的JAVA虚拟机类加载方法,其特征在于,获取类加载请求包括:
根据预先注册的回调事件获取类加载请求。
3.一种JAVA虚拟机类加载系统,其特征在于,包括:
获取单元,用于获取类加载请求,所述类加载请求包括类名称;
类路径确定单元,用于确定所述类名称对应的多个类路径;
目标类文件生成单元,用于根据预设的策略配置文件和所述多个类路径对应的类文件生成目标类文件;
加载单元,用于加载所述目标类文件的目标字节码;
类对象生成单元,用于对所述目标字节码进行初始化,生成类对象;
所述类路径确定单元具体用于:
根据所述类名称对应的类路径数量确定所述类名称的类型;
当所述类名称为冲突类名称时,确定该类名称对应的多个类路径;
所述目标类文件生成单元具体用于:
根据所述类名称从所述策略配置文件中获取目标配置策略;
根据所述目标配置策略和所述多个类路径对应的类文件生成目标类文件。
4.根据权利要求3所述的JAVA虚拟机类加载系统,其特征在于,所述获取单元具体用于:
根据预先注册的回调事件获取类加载请求。
5.一种计算机设备,包括存储器、处理器及存储在存储器上并在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至2任一项所述的JAVA虚拟机类加载方法的步骤。
6.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至2任一项所述的JAVA虚拟机类加载方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011380272.0A CN112463303B (zh) | 2020-12-01 | 2020-12-01 | Java虚拟机类加载方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011380272.0A CN112463303B (zh) | 2020-12-01 | 2020-12-01 | Java虚拟机类加载方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112463303A CN112463303A (zh) | 2021-03-09 |
CN112463303B true CN112463303B (zh) | 2023-11-24 |
Family
ID=74805164
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011380272.0A Active CN112463303B (zh) | 2020-12-01 | 2020-12-01 | Java虚拟机类加载方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112463303B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113032045B (zh) * | 2021-03-22 | 2024-03-01 | 广州虎牙科技有限公司 | 应用程序的启动方法以及相关装置、设备 |
CN113296752A (zh) * | 2021-05-25 | 2021-08-24 | 平安养老保险股份有限公司 | 生成api文档的方法、系统、设备及存储介质 |
CN113746894A (zh) * | 2021-07-23 | 2021-12-03 | 济南浪潮数据技术有限公司 | 基于hdfs rbf路由层实现负载均衡方法、装置 |
CN116048735B (zh) * | 2023-03-23 | 2023-08-29 | 阿里云计算有限公司 | 信息处理方法以及对象共享方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103150494A (zh) * | 2013-03-05 | 2013-06-12 | 华为技术有限公司 | Java类对象的解扰运行方法、加扰形成方法及其装置 |
CN110262818A (zh) * | 2019-05-29 | 2019-09-20 | 北京达佳互联信息技术有限公司 | Java代码热更新方法、装置、电子设备及存储介质 |
CN111538545A (zh) * | 2020-04-23 | 2020-08-14 | 京东方科技集团股份有限公司 | Java应用运行方法、装置、介质及电子设备 |
CN111736913A (zh) * | 2019-03-25 | 2020-10-02 | 华为技术有限公司 | 类加载方法和装置 |
CN111782340A (zh) * | 2020-06-29 | 2020-10-16 | 中国工商银行股份有限公司 | 一种基于字节码的数据处理方法、装置、设备及系统 |
-
2020
- 2020-12-01 CN CN202011380272.0A patent/CN112463303B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103150494A (zh) * | 2013-03-05 | 2013-06-12 | 华为技术有限公司 | Java类对象的解扰运行方法、加扰形成方法及其装置 |
CN111736913A (zh) * | 2019-03-25 | 2020-10-02 | 华为技术有限公司 | 类加载方法和装置 |
CN110262818A (zh) * | 2019-05-29 | 2019-09-20 | 北京达佳互联信息技术有限公司 | Java代码热更新方法、装置、电子设备及存储介质 |
CN111538545A (zh) * | 2020-04-23 | 2020-08-14 | 京东方科技集团股份有限公司 | Java应用运行方法、装置、介质及电子设备 |
CN111782340A (zh) * | 2020-06-29 | 2020-10-16 | 中国工商银行股份有限公司 | 一种基于字节码的数据处理方法、装置、设备及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN112463303A (zh) | 2021-03-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112463303B (zh) | Java虚拟机类加载方法及系统 | |
US8141059B2 (en) | Method and system for avoidance of software conflict | |
US8799885B2 (en) | Method and system for automated root-cause analysis for class loading failures in java | |
CN110941528B (zh) | 一种基于故障的日志埋点设置方法、装置及系统 | |
US7278133B2 (en) | Index-based parameter access and software for using the same | |
CN111142899B (zh) | 数据库脚本执行方法、装置、存储介质及电子设备 | |
US20150169320A1 (en) | Verification of backward compatibility of software components | |
US7509584B2 (en) | Dynamic ECMAScript class loading | |
US20160232017A1 (en) | System and Method for Reloading Constructors | |
US8020156B2 (en) | Bulk loading system and method | |
JP2007511018A (ja) | ソフトウェアをコンポーズする方法及び装置 | |
CN111176717B (zh) | 生成安装包的方法、装置及电子设备 | |
CN109492181A (zh) | 页面跳转方法、装置、计算机设备和存储介质 | |
CN111679852B (zh) | 一种冲突依赖库的检测方法及装置 | |
US20040216138A1 (en) | Method and system for processing input from a command line interface | |
CN114398102B (zh) | 一种应用程序包生成方法、装置、编译服务器及计算机可读存储介质 | |
US10394610B2 (en) | Managing split packages in a module system | |
CN115859280A (zh) | 内存马的检测方法、装置、设备及存储介质 | |
US7389515B1 (en) | Application deflation system and method | |
CN112800194A (zh) | 一种接口变更识别方法、装置、设备及存储介质 | |
US7082376B1 (en) | State full test method executor | |
Pieterse et al. | Evaluation of smartphone data using a reference architecture | |
CN118012520A (zh) | 小程序加载和上传方法、装置、设备及存储介质 | |
Ghorbani | Validation and Verification of Modular Software Applications | |
CN116842530A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |