CN118519637A - 一种编译方法、解析方法和装置 - Google Patents
一种编译方法、解析方法和装置 Download PDFInfo
- Publication number
- CN118519637A CN118519637A CN202310154098.5A CN202310154098A CN118519637A CN 118519637 A CN118519637 A CN 118519637A CN 202310154098 A CN202310154098 A CN 202310154098A CN 118519637 A CN118519637 A CN 118519637A
- Authority
- CN
- China
- Prior art keywords
- array
- instruction group
- instruction
- instructions
- offset
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请提供了一种编译方法、解析方法和装置,其涉及的字节码文件可以使用多个常量池来存储数据的偏移值,且当已创建的常量池的存储余量不足时创建新常量池来继续存储数据的偏移值,这样可以保证每个数组均不超过偏移值的数量限制,有助于保证引用指令的引用位宽,从而减小字节码文件的体积,并且在数据的数量超过一个数组的偏移量的数量限制时,可以通过创建新的数组方式将源代码文件编译成一个字节码文件,这样可以减少字节码文件的读取次数,有助于减少I/O开销和提升性能。
Description
技术领域
本申请实施例涉及电子技术领域,并且更具体地,涉及一种编译方法、解析方法和装置。
背景技术
应用开发者通过编译器将源代码文件编译成字节码文件,并将字节码文件和其它文件打包成应用安装包,然后将应用安装包发布到应用平台。用户通过终端在应用平台下载应用开发者发布的应用安装包,终端从应用安装包中解析出字节码文件,并调用终端中的虚拟机执行字节码文件,从而完成应用的启动和运行。
在上述字节码文件中存在着大量的引用指令,引用指令的引用位宽,即引用指令的地址码的长度,直接影响字节码文件的体积和执行性能。通常会通过限制字节码文件中引用的数据的数量来控制引用指令的引用位宽,如将引用的数据的数量限制为65536,那么通过2字节就可以完成65536个数据的编码,或者说通过2字节即可将65536个数据进行区分,也即可以采用2字节的引用位宽。
但是对于比较大型的应用而言,引用的数据的数量很容易就超过限制。当引用的数据的数量超过限制时,要么将应用分成多个字节码文件存储,要么增加引用位宽。而将应用分成多个字节码文件存储会增加字节码文件的读取次数,导致输入/输出(input/output,I/O)开销增加和性能劣化;采用长引用位宽会导致字节码文件的体积很大。
发明内容
本申请实施例提供一种编译方法、解析方法和装置,能够在不增加引用指令的引用位宽的前提下在一个字节码文件中存放更多的数据。
第一方面,提供了一种编译方法,所述方法可以由编译装置执行。可选地,所述编译装置可以为电子设备,也可以为电子设备中的模块或单元(如编译器或虚拟编译器)执行。
所述方法包括:获取源代码文件;对所述源代码文件进行编译,得到字节码文件,所述字节码文件包括第一指令组和第二指令组,所述第一指令组中的引用指令所引用的数据的偏移值存储在第一数组,所述第二指令组中的引用指令所引用的数据的偏移值存储在第二数组,所述第二数组是在所述第一数组的存储余量不足时创建的。
在上述方法中,字节码文件使用多个数组(如第一数组和第二数组)来存储数据的偏移值,且当已创建的数组(如第一数组)的存储余量不足时,创建新的数组(第二数组)来继续存储数据的偏移值,这样可以保证每个数组均不超过偏移值的数量限制,有助于保证引用指令的引用位宽,从而减小字节码文件的体积,并且在数据的数量超过一个数组的偏移量的数量限制时,可以通过创建新的数组方式将源代码文件编译成一个字节码文件,这样可以减少字节码文件的读取次数,有助于减少I/O开销和提升性能。因而,基于上述方法,能够在不增加引用指令的引用位宽的前提下在字节码文件中存放更多的数据。
结合第一方面,在一种可能的实现方式中,所述字节码文件还包括第三数组,所述第三数组包括所述第一数组的偏移值和所述第二数组的偏移值;所述第一指令组包括所述第一数组在所述第三数组中的索引;所述第二指令组包括所述第二数组在所述第三数组中的索引。该方式可以通过指令组中的索引间接读取到存储数据偏移值的数组的偏移值,数组的索引值相对于数组的偏移值较小,因此该方式有助于减小字节码文件的体积。
结合第一方面或其任意实现方式,在另一种可能的实现方式中,所述第一指令组包括所述第一数组的偏移值;所述第二指令组包括所述第二数组的偏移值。该方式可以直接在指令组中读取到存储数据偏移值的数组的偏移值,解析指令的速度更快。
结合第一方面或其任意实现方式,在另一种可能的实现方式中,所述第一数组和/或所述第二数组支持存储的偏移值的总量小于或者等于65536;所述第一指令组中的引用指令的引用位宽和/或所述第二指令组中的引用指令的引用位宽小于或者等于2字节。
其中,在数组支持存储的偏移值的总量小于65536且引用指令的引用位宽小于2个字节的情况下,如对于数组支持存储的偏移值的总量为256且引用指令的引用位宽为1个字节,相比于数组支持存储的偏移值的总量为65536且引用指令的引用位宽为2个字节,由于使用了比2个字节更小的引用位宽,因此可以进一步减小字节码文件的体积。
结合第一方面或其任意实现方式,在另一种可能的实现方式中,所述字节码文件还包括第三指令组,所述第三指令组中的引用指令所引用的数据的偏移值存储在第四数组,并且所述第四数组专用于存储所述第三指令组中的引用指令所引用的数据的偏移值。这样,运行时并发场景下可以保持数据的独立性,并且减少内存开销。
结合第一方面或其任意实现方式,在另一种可能的实现方式中,所述第一指令组和/或所述第二指令组为:函数、预设数量的指令的组合、或调试信息对应的指令的组合。
结合第一方面或其任意实现方式,在另一种可能的实现方式中,所述第一数组和/或所述第二数组包括多类数据的偏移值。
结合第一方面或其任意实现方式,在另一种可能的实现方式中,所述第一数组包括的偏移值各不相同;和/或,所述第二数组包括的偏移值各不相同。
换句话说,同一个数组中的偏移值可以去重,这样有助于减少冗余数据,进而减小字节码文件的体积。
第二方面,提供了一种解析方法,所述方法可以由解析装置执行。可选地,所述解析装置可以为电子设备,也可以为电子设备中的模块或单元(如虚拟机)执行。
所述方法包括:获取字节码文件,所述字节码文件包括第一指令组和第二指令组,所述第一指令组中的引用指令所引用的数据的偏移值存储在第一数组,所述第二指令组中的引用指令所引用的数据的偏移值存储在第二数组,所述第二数组是在所述第一数组的存储余量不足时创建的;解析所述字节码文件。
一种可能的实现方式,所述解析所述字节码文件,包括:根据所述字节码文件的文件类型,解析所述字节码文件。
结合第二方面,在一种可能的实现方式中,所述字节码文件还包括第三数组,所述第三数组包括所述第一数组的偏移值和所述第二数组的偏移值;所述第一指令组包括所述第一数组在所述第三数组中的索引;所述第二指令组包括所述第二数组在所述第三数组中的索引。所述解析字节码文件,包括:以第一指令组中的第一引用指令为例,当解析第一引用指令时,首先根据第一指令组中的第一数组在第三数组中的索引从第三数组中读取第一数组的偏移量,再从第一数组的偏移量指向的数组中读取引用指令包括的索引对应的偏移量,然后根据读取到的偏移量获取引用的数据。
结合第二方面或其任意实现方式,在另一种可能的实现方式中,所述第一指令组包括所述第一数组的偏移值;所述第二指令组包括所述第二数组的偏移值。所述解析字节码文件,包括:以第一指令组中的第一引用指令为例,当解析第一引用指令时,首先从第一指令组中读取第一数组的偏移量,再从第一数组的偏移量指向的数组中读取引用指令包括的索引对应的偏移量,然后根据读取到的偏移量获取引用的数据。
结合第二方面或其任意实现方式,在另一种可能的实现方式中,所述第一数组和/或所述第二数组支持存储的偏移值的总量小于或者等于65536;所述第一指令组中的引用指令的引用位宽和/或所述第二指令组中的引用指令的引用位宽小于或者等于2字节。
结合第二方面或其任意实现方式,在另一种可能的实现方式中,所述字节码文件还包括第三指令组,所述第三指令组中的引用指令所引用的数据的偏移值存储在第四数组,并且所述第四数组专用于存储所述第三指令组中的引用指令所引用的数据的偏移值。
结合第二方面或其任意实现方式,在另一种可能的实现方式中,所述第一指令组和/或所述第二指令组为:函数、预设数量的指令的组合、或调试信息对应的指令的组合。
结合第二方面或其任意实现方式,在另一种可能的实现方式中,所述第一数组和/或所述第二数组包括多类数据的偏移值。
结合第二方面或其任意实现方式,在另一种可能的实现方式中,所述第一数组包括的偏移值各不相同;和/或,所述第二数组包括的偏移值各不相同。
第三方面,提供了一种电子设备,该电子设备包括执行上述第一方面或其任意一种可能的设计的方法的模块/单元,或者包括执行上述第二方面或其任意一种可能的设计的方法的模块/单元;这些模块/单元可以通过硬件实现,也可以通过硬件执行相应的软件实现。
第四方面,提供了一种芯片,该芯片与电子设备中的存储器耦合,用于调用存储器中存储的计算机程序并执行上述第一方面或其任一可能设计的技术方案,或者用于调用存储器中存储的计算机程序并执行上述第二方面或其任一可能设计的技术方案;其中,“耦合”是指两个部件彼此直接或间接地结合。
第五方面,提供了一种计算机可读存储介质,该计算机可读存储介质包括计算机程序,当计算机程序在电子设备上运行时,使得该电子设备执行如上述第一方面及其任一可能设计的技术方案,或者执行如上述第二方面及其任一可能设计的技术方案。
第六方面,提供了一种计算机程序,该计算机程序包括指令,当该指令在计算机上运行时,使得该计算机执行如上述第一方面及其任一可能设计的技术方案,或者执行如上述第二方面及其任一可能设计的技术方案。
第七方面,提供了一种处理系统,该系统包括上述任意一种电子设备。
需要说明的是,第二方面至第七方面的有益效果可以参见第一方面或其实现方式的有益效果,不再详述。
附图说明
图1是本申请实施例提供的一种电子设备的结构示意图。
图2是编译过程的示意图。
图3是虚拟机技术的一种应用场景。
图4是直接引用和间接引用的示意图。
图5是class文件的一种布局方式的示意图。
图6是class文件的解析指令引用的流程。
图7是dex文件的一种布局方式的示意图。
图8是本申请实施例的字节码文件格式的一个示例。
图9是本申请实施例的字节码文件格式的另一个示例。
图10是本申请实施例提供的编译方法的示意性流程图。
图11是本申请实施例提供的解析方法的示意性流程图。
图12是本申请实施例提供的装置10的组成示意图。
图13是本申请实施例提供的装置20的组成示意图。
具体实施方式
为便于理解本申请实施例,在介绍本申请的实施例之前,先做出以下说明:在本申请的实施例中,第一、第二、第三以及各种编号仅为描述方便进行的区分,并不用来限制本申请实施例的范围,例如,区分不同的数组等;本申请对很多特性所列出的定义仅用于以举例方式来解释该特性的功能,其详细内容可以参考现有技术;“示例的”、“例如”、“示例性地”、“作为(另)一个示例”等词用于表示作例子、例证或说明,本申请中被描述为“示例”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势,确切而言,使用示例的一词旨在以具体方式呈现概念;术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调;“多个”是指两个或两个以上;“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B的情况,其中A,B可以是单数或者复数。
本申请实施例提供的编译方法和/或解析方法可以通过电子设备实现,本申请不限定电子设备的具体类型和实现形式。例如,电子设备可以是台式计算机、智能手机、平板电脑、笔记本电脑、个人计算机(personal computer,PC)、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本、个人数字助理(personal digitalassistant,PDA)、车载设备、可穿戴设备、可折叠设备等电子设备中,还可以应用于车机、机器人等移动设备中。电子设备包括但不限于搭载鸿蒙(Harmony OS)或者其它操作系统的电子设备。
示例性的,图1示出了电子设备100的结构示意图。电子设备100可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,指南针190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。
可以理解的是,本申请实施例示意的结构并不构成对电子设备100的具体限定。在本申请另一些实施例中,电子设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
其中,处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的部件,也可以集成在一个或多个处理器中。在一些实施例中,电子设备101也可以包括一个或多个处理器110。其中,控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。在其他一些实施例中,处理器110中还可以设置存储器,用于存储指令和数据。示例性地,处理器110中的存储器可以为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从该存储器中直接调用。这样就避免了重复存取,减少了处理器110的等待时间,因而提高了电子设备101处理数据或执行指令的效率。
在一些实施例中,处理器110可以包括一个或多个接口。接口可以包括集成电路间(inter-integrated circuit,I2C)接口,集成电路间音频(inter-integrated circuitsound,I2S)接口,脉冲编码调制(pulse code modulation,PCM)接口,通用异步收发传输器(universal asynchronous receiver/transmitter,UART)接口,移动产业处理器接口(mobile industry processor interface,MIPI),通用输入输出(general-purposeinput/output,GPIO)接口,SIM卡接口,和/或USB接口等。其中,USB接口130是符合USB标准规范的接口,具体可以是Mini USB接口,Micro USB接口,USB Type C接口等。USB接口130可以用于连接充电器为电子设备101充电,也可以用于电子设备101与外围设备之间传输数据。该USB接口130也可以用于连接耳机,通过耳机播放音频。
外部存储器接口120可以用于连接外部存储卡,例如Micro SD卡,实现扩展电子设备100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
内部存储器121可以用于存储一个或多个计算机程序,该一个或多个计算机程序包括指令。处理器110可以通过运行存储在内部存储器121的上述指令。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统;该存储程序区还可以存储一个或多个应用(比如图库、联系人等)等。存储数据区可存储电子设备101使用过程中所创建的数据(比如照片,联系人等)等。此外,内部存储器121可以包括高速随机存取存储器,还可以包括非易失性存储器,例如一个或多个磁盘存储部件,闪存部件,通用闪存存储器(universal flash storage,UFS)、嵌入式多媒体卡(Embedded Multi Media Card,eMMC)等。在一些实施例中,处理器110可以通过运行存储在内部存储器121的指令,和/或存储在设置于处理器110中的存储器的指令,来使得电子设备101执行本申请实施例中所提供的方法,以及其他应用及数据处理。电子设备100可以通过音频模块170、扬声器170A、受话器170B、麦克风170C、耳机接口170D、以及应用处理器等实现音频功能。例如音乐播放、录音等。
在介绍本申请实施例之前,先介绍几个和本申请实施例相关的概念。
1、虚拟机技术
计算机中的文件普遍以二进制的方式存储,随着对不同编程语言以及不同体系结构的兼容性的现实需求,虚拟机技术应运而生,如Java虚拟机(Java Virtual Machine,JVM)、安卓运行时(Android Runtime,ART)等。
在虚拟机技术中,编译器(也称虚拟机编译器)以源代码文件作为输入,将源代码文件转换成字节码文件;虚拟机以字节码文件作为输入,执行字节码文件中指令。其中,编译器可以是存储于开发者终端中的计算机程序,虚拟机是用户终端(如手机、智能手表或平板电脑等)上的可执行程序。开发者终端和/或用户终端可以为电子设备,例如图1所示的电子设备100。上述字节码文件也可以称为二进制文件或虚拟机文件等,为了描述方便,下文统一称为字节码文件。
编译是把一种文件(源文件)转换或翻译成另一种文件(目标文件)的过程,编译器将源代码文件转换成字节码文件的过程即为编译的过程。示例性地,如图2所示,编译可以包括以下几个主要步骤:
1)解析器(parser):将源文件解析成中间表达形式(intermediaterepresentation,IR);
2)优化(optimization):对解析得到的中间表达形式进行优化,如死代码消除、循环展开、函数内联、代码下沉等;
3)发射器(emitter):将优化后的中间表达形式按照目标文件的格式生成文件。
在一些实现方式中,本申请的实施例提供的技术方案可以应用在emitter阶段。
示例性地,图3示出了虚拟机技术的一种应用场景。如图3所示,应用开发者通过编译器将源代码文件编译成字节码文件,并将字节码文件和其它文件(如图片、文本、音频、和视频等)打包成应用安装包,然后将应用安装包发布到应用平台。用户通过终端在应用平台下载应用开发者发布的应用安装包,终端从应用安装包中解析出字节码文件,并调用终端中的虚拟机执行字节码文件,从而完成应用的启动和运行。
2、引用指令
在上文所述的字节码文件中存在着大量对数据进行引用的指令,这类指令可以统称为引用指令。常见的引用指令包括如下两类:
1)加载常量字符串的指令
例如,JVM字节码文件(即类文件(class文件))中的ldc指令,ART字节码文件(即dex文件)中的const_string指令等。
2)函数调用指令
例如,class文件中的invokevirtual指令,dex文件中的invoke-virtual指令等。
引用指令的引用位宽:引用指令包括操作码和地址码两部分,操作码用于指出引用指令执行的操作或具备的功能,地址码用于指出引用指令使用的数据的位置,引用指令的地址码的长度也可以称为指令的引用位宽。
3、直接引用和间接引用
由于引用指令在字节码制文件中大量存在,因此引用指令中对引用的数据的编码方式将直接影响字节码文件的体积和执行性能。在当前的字节码文件格式中,引用指令的编码方式有两种,即直接引用和间接引用。
图4是直接引用和间接引用的示意图。图4的(a)图所示的是直接引用,即通过数据在字节码文件中的偏移量直接引用。例如,数据的偏移量为0x1A2B3C4D,引用指令可以为CALL 0x1A2B3C4D,即引用指令通过数据的偏移量引用数据。图4的(b)图所示的是间接引用,在该方式中,字节码文件中有个数组记录了所有数据的偏移量,可以通过数据的偏移量在该数组中的索引来间接引用数据。例如,数组的偏移量为0x0011,数组包括6个偏移量,数据的偏移量为0x1A2B3C4D,数据的偏移量在数组中的索引为0x1,引用指令可以为CALL0x1。
直接引用常用于可执行程序的文件格式,如可执行和可连接格式(executableand linkable format,ELF)文件格式。直接引用的好处是访问数据的速度相对更快,但是缺点是引用位宽很长,如ELF需要使用4个字节对数据编码。因此,使用直接引用编码方式生成的字节码文件的体积往往很大。
间接引用可以减少引用位宽,如JVM的class文件格式和ART的dex文件格式都是使用2个字节的引用位宽来引用数据。间接引用牺牲了部分访问数据的性能,来减少字节码文件的体积。
4、JVM字节码文件格式
JVM字节码文件格式即class文件格式,采用间接引用并且通过严格限制数据个数的方式来控制引用位宽。
图5示出了class文件的一种布局方式的示意图。图5中的偏移量0、偏移量1、偏移量2、偏移量3…偏移量10…等是数据的偏移量,由这些偏移量组成的数组在class文件格式中也被称作常量池(constant pool),每个class文件中包括一个常量池。class文件格式的文件头(file header)包括该常量池的偏移量,常量池位于class文件的固定的偏移量。class文件格式规定一个常量池中偏移量的数目不能超过65536(即能被2个字节编码的最大数值)。class文件格式的引用指令的引用位宽为2个字节,如图5所示的invokevirtual0x0002和invokevirtual 0x000a,其中,0x0002为偏移量2在常量池中的索引,0x000a为偏移量10在常量池中的索引。
JVM源代码文件(即java文件)中每个类会被编译成一个class文件,即每个java文件编译出的class文件的数目等于java文件中类的数目。但是,若JVM源代码文件中的某个类的数据的数量超过65536,即超过常量池中偏移量的数量限制,则该类将不能被编译生成class文件或者将被编译成多个class文件,以使得引用指令的引用位宽保持在2个字节。
图6示出了class文件的解析指令引用的流程。以引用指令invokevirtual 0x0002为例,如图6所示,当解析invokevirtual 0x0002时,首先从文件头中读取常量池的偏移量,再从常量池的偏移量指向的数组中读取索引值为0x0002的偏移量2,然后根据偏移量2获取引用的数据。
5、ART字节码文件格式
ART字节码文件格式即dex文件格式,与class文件格式类似,dex文件格式也采用间接引用,并且通过限制一个常量池中的数据数量来控制引种指令的引用位宽。一个常量池中偏移量的数目不能超过65536(即能被2个字节编码的最大数值)。与class文件格式不同的是,ART源代码文件会被编译成一个dex文件。
但是,若ART源代码文件中的数据的数量超过65536,即超过常量池中偏移量的数量限制,则需要开发者在编译的时候额外配置编译选项,来让生成的dex文件适配这种场景:
1)类或函数的数量超过65536,ART源代码文件将被编译成多个dex文件,以使得引用指令的引用位宽保持在2个字节;
2)字符串的数量超过65536,一种处理方式为将ART源代码文件编译成多个dex文件,另一种处理方式为将常量池中偏移量的数量限制放宽到65536*65536(即能被4个字节编码的最大数值),同时引用指令的引用位宽可以放松到4个字节,即在65536以内的数据,引用指令的引用位宽为2个字节,在65536以外的数据,引用指令的引用位宽为4个字节。
图7示出了dex文件的一种布局方式的示意图。图7以字符串的数量超过65536为例。dex文件格式的文件头包括常量池的偏移量,常量池位于dex文件的固定的偏移量。对于常量池中的前65536个偏移量(即偏移量0~偏移量0xffff),引用指令的引用位宽为2字节,如图7中的const-string 0x0002,其中,0x0002为偏移值2在常量池中的索引;对于常量池中的第65537个偏移量及其以后的偏移量,引用指令的引用位宽为4字节,如图7中的const-string-jumbo 0x0001ffff,其中,0x0001ffff为偏移量0x1ffff在常量池中的索引。
dex文件的解析指令引用的流程与class文件类似,不再赘述。
比较大型的应用的数据很容易超过65536的数量限制,在此情况下,基于目前的字节码文件的布局方式,要么将应用分成多个字节码文件存储,要么采用长引用位宽(如上文中的直接引用、如图7所示的ART的字符串的引用等)。而将应用分成多个字节码文件存储会增加字节码文件的读取次数,导致I/O开销增加和性能劣化;采用长引用位宽会导致字节码文件的体积很大。
针对上述问题,本申请实施例提供了一种字节码文件格式,能够在不增加引用指令的引用位宽的前提下在一个字节码文件中存放更多的数据。
具体而言,本申请实施例的字节码文件格式支持使用多个常量池来存储数据的偏移值,且每个常量池的长度均不超过规定的最大长度以控制引用指令的引用位宽,包括一组引用指令的引用单元中包含常量池的信息以表明该引用单元中的引用指令所引用的数据的偏移量存储于该常量池。这样,对于源代码文件中数据的数量超过单个常量池规定的长度时,可以使用多个常量池来存储这些数据的偏移量,因而不必将源代码文件编译成多个字节码文件,有助于减少I/O开销和提升性能;并且由于不增加引用指令的引用位宽,因此字节码文件的体积也比较小。
在本申请实施例中,将期望对应于同一常量池的一组引用指令划分为一个引用单元。示例性地,引用单元可以包括以下至少一个:函数、预设数量的指令组合、或调试信息对应的指令的组合。
在本申请实施例中,一个常量池可以包括一个或多个引用单元所引用的数据的偏移值,即一个或多个引用单元可以对应于一个常量池。同一个常量池中的数据可以去重,即同一个常量池中的偏移值各不相同,以减少冗余数据。
本申请实施例不限定常量池中包括的偏移值对应的数据的类型,一个常量池可以包括多个类型的数据的偏移值,也可以仅包括某种类型的数据的偏移值。这里的类型可以包括以下至少一个:字符串、方法、函数或类。
本申请实施例的多个常量池的创建方式可以为:当已创建的常量池的存储余量不足时,创建新常量池。此外,一些引用单元也可以对应于单独的常量池,即某个常量池专用于存储这些引用单元所引用的数据的偏移值,这样,运行时并发场景下可以保持数据的独立性,并且减少内存开销。
本申请实施例不限定常量池支持存储的偏移值的总量(或者说常量池的长度)。可选地,常量池支持存储的偏移值的总量小于或者等于65536,相应地,引用指令的引用位宽也小于或者等于2字节。例如,常量池支持存储的偏移值的总量为65536,引用指令的引用位宽为2字节。又例如,常量池支持存储的偏移值的总量为256,引用指令的引用位宽为1字节。换句话说,基于本申请实施例的字节码文件格式,可以为常量池设置小于或者等于65536的长度,引用指令的引用位宽也可以相应的小于或等于2个字节。当常量池的长度小于65536且引用指令的引用位宽小于2个字节时,由于使用了更小的引用位宽,因此可以进一步减小字节码文件的体积。
本申请实施例的字节码文件格式的一种具体实现方式为:字节码文件包括常量池表、一个或多个常量池、一个或多个引用单元,其中,常量池表用于存储该一个或多个常量池的偏移量,一个或多个引用单元中的每个引用单元包括其对应的常量池在常量池表中的索引(或者称偏移值),引用单元中的引用指令通过数据在常量池中的偏移量来引用数据。可选地,常量池表可以存储在字节码文件的文件头。对于该实现方式,解析指令引用的流程为:首先读取引用单元中的常量池在常量池表中的索引,常量池在常量池表中的索引从常量池表中读取常量池的偏移量,再从常量池的偏移量指向的数组中读取引用指令包括的索引对应的偏移量,然后根据读取到的偏移量获取引用的数据。
图8是本申请实施例的字节码文件格式的一个示例。图8中以引用单元为函数为例。如图8所示,字节码文件中包括常量池0、常量池1等多个常量池,且有个常量池表用于记录每个常量池的偏移量;函数1包括常量池1在常量池表中的索引(即0x1),这表示函数1中的引用的数据的偏移量均存储于常量池1,函数1中的引用指令的引用位宽为2字节,如引用指令1的0x0002和引用指令2的0x0003,这里的0x0002和0x0003为数据的偏移量在常量池1中的索引;函数2包括常量池0在常量池表中的索引(即0x0),这表示函数2中的引用的数据的偏移量均存储于常量池0,函数2中的引用指令的引用位宽为2字节,如引用指令3的0x0002和引用指令4的0x0003,这里的0x0002和0x0003为数据的偏移量在常量池0中的索引。
本申请实施例的字节码文件格式的另一种具体实现方式为:字节码文件包括一个或多个常量池、一个或多个引用单元,其中,一个或多个引用单元中的每个引用单元包括其对应的常量池的偏移值,引用单元中的引用指令通过数据在常量池中的偏移量来引用数据。在该实现方式中,字节码文件的文件头中可以不包括常量池的偏移量。对于该实现方式,解析指令引用的流程可以为:首先读取引用单元中的常量池的偏移量,再从常量池的偏移量指向的数组中读取引用指令包括的索引对应的偏移量,然后根据读取到的偏移量获取引用的数据。相较于引用单元包括常量池在常量池表中的索引相比,该实现方式可以直接在引用单元中读取到常量池偏移值,解析指令的速度更快。
图9是本申请实施例的字节码文件格式的另一个示例。与图8不同的是,字节码文件中不包括常量池表,引用单元中包括的是常量池的偏移量,而不是常量池在常量池表中的索引。具体而言,同样以引用单元为函数为例,如图9所示,字节码文件中包括常量池0、常量池1等多个常量池;函数1包括常量池1的偏移量,这表示函数1中的引用的数据的偏移量均存储于常量池1,函数1中的引用指令的引用位宽为2字节,如引用指令1的0x0002和引用指令2的0x0003,这里的0x0002和0x0003为数据的偏移量在常量池1中的索引;函数2包括常量池0的偏移量,这表示函数2中的引用的数据的偏移量均存储于常量池0,函数2中的引用指令的引用位宽为2字节,如引用指令3的0x0002和引用指令4的0x0003,这里的0x0002和0x0003为数据的偏移量在常量池0中的索引。
在需要说明的是,本申请实施例将存储数据的偏移量的数组称为常量池、将存储常量池偏移量的数组称为常量池表,但实际上它们也可能被称为其他的名字,它们的叫法可以随应用场景的不同发生变化。
采用本申请提供的字节码文件格式,在一个字节码文件中能够存放更多的数据。对于绝大部分应用而言,采用本申请提供的字节码文件格式,可以将应用编译到一个字节码文件中,有助于减少I/O开销,提升性能。并且采用本申请提供的字节码文件格式,可以不增加引用指令的引用位宽,字节码文件的体积也比较小,读取引用指令的速度更快,性能更好。
图10是本申请实施例提供的编译方法的示意性流程图。图10所示的方法1000可以由编译装置执行,也可以由编译装置中的模块或单元(如编译器或虚拟机编译器)执行。可选地,编译装置可以是开发者终端,开发者终端可以是如图1所示的电子设备。方法1000中的指令组,如第一指令组、第二指令组和第三指令组,可以对应于上文所述的引用单元;第一数组、第二数组和第四数组可以对应于上文的常量池;第三数组可以对应于上文的常量池表。
步骤1010,获取源代码文件。
步骤1020,对源代码文件进行编译,得到字节码文件。
本申请实施例不限定编译的具体实现方式,如可以包括图2所述的解析器、优化和发射器,只要可以生成满足本申请提供的字节码文件格式的字节码文件即可。
其中,字节码文件包括第一指令组和第二指令组,第一指令组中的引用指令所引用的数据的偏移值存储在第一数组,第二指令组中的引用指令所引用的数据的偏移值存储在第二数组,第二数组是在第一数组的存储余量不足时创建的。例如,假设第一指令组引用的数据的数量为50且第一数组的最大长度限制为65536,当编译第一指令组时,第一数组已经存储了65500个数据的偏移量,第一数组的存储余量为36,即第一数组还可以存储36个偏移量,该数量小于50,在此情况下可以创建新的第二数组,以便存储第一指令组引用的数据的偏移值。
可选地,字节码文件还包括第三数组,第三数组包括第一数组的偏移值和第二数组的偏移值;第一指令组包括第一数组在第三数组中的索引;第二指令组包括第二数组在第三数组中的索引。详细描述可以参考图8,在此不再赘述。
可选地,第一指令组包括所述第一数组的偏移值;第二指令组包括所述第二数组的偏移值。详细描述可以参考图9,在此不再赘述。
可选地,第一数组和/或第二数组支持存储的偏移值的总量小于或者等于65536;第一指令组中的引用指令的引用位宽和/或第二指令组中的引用指令的引用位宽小于或者等于2字节。例如,第一数组和/或第二数组支持存储的偏移值的总量为65536,相应地,其中的引用指令的引用位宽为2字节。又例如,第一数组和/或第二数组支持存储的偏移值的总量为256,相应地,其中的引用指令的引用位宽为1字节。
可选地,字节码文件还包括第三指令组,第三指令组中的引用指令所引用的数据的偏移值存储在第四数组,并且第四数组专用于存储第三指令组中的引用指令所引用的数据的偏移值。这样,运行时并发场景下可以保持第三指令组中引用的数据的独立性,并且减少内存开销。
可选地,第一指令组和/或第二指令组为:函数、预设数量的指令的组合、或调试信息对应的指令的组合。
可选地,第一数组和/或第二数组包括多类数据的偏移值。
可选地,第一数组包括的偏移值各不相同;和/或,第二数组包括的偏移值各不相同。换句话说,同一个数组中的偏移值可以去重。例如,以编译第一指令组为例,当编译第一指令组时,可以检测第一数组中是否已包括部分或全部的第一指令组所引用的数据的偏移值,若有则可以直接使用。
此外,在图3所示的场景中,在得到字节码文件后,还可以进一步根据字节码文件生成应用安装包。
方法1000中的字节码文件的描述可以进一步参考上文,在此不再详述。
图11是本申请实施例提供的解析方法的示意性流程图。图11所示的方法1100可以由解析装置执行,也可以由解析装置中的模块或单元(如虚拟机)执行。可选地,解析装置为用户终端,用户终端可以为如图1所示的电子设备。方法1100中的指令组,如第一指令组、第二指令组和第三指令组,可以对应于上文所述的引用单元;第一数组、第二数组和第四数组可以对应于上文的常量池;第三数组可以对应于上文的常量池表。
步骤1110,获取字节码文件。
示例性地,对于图3所示的场景,可以是通过解析应用安装包获取到字节码文件。
其中,字节码文件包括第一指令组和第二指令组,第一指令组中的引用指令所引用的数据的偏移值存储在第一数组,第二指令组中的引用指令所引用的数据的偏移值存储在第二数组,第二数组是在第一数组的存储余量不足时创建的。
步骤1120,解析字节码文件。
可选地,字节码文件还包括第三数组,第三数组包括第一数组的偏移值和第二数组的偏移值;第一指令组包括第一数组在第三数组中的索引;第二指令组包括第二数组在第三数组中的索引。在此情况下,解析字节码文件可以包括:以第一指令组中的第一引用指令为例,当解析第一引用指令时,首先根据第一指令组中的第一数组在第三数组中的索引从第三数组中读取第一数组的偏移量,再从第一数组的偏移量指向的数组中读取引用指令包括的索引对应的偏移量,然后根据读取到的偏移量获取引用的数据。
可选地,第一指令组包括所述第一数组的偏移值;第二指令组包括所述第二数组的偏移值。在此情况下,解析字节码文件可以包括:以第一指令组中的第一引用指令为例,当解析第一引用指令时,首先从第一指令组中读取第一数组的偏移量,再从第一数组的偏移量指向的数组中读取引用指令包括的索引对应的偏移量,然后根据读取到的偏移量获取引用的数据。
方法1100中的字节码文件的描述可以参考上文,在此不再详述。
以上,结合图10和图11描述了本申请提供的方法,下面将结合图12和图13描述本申请的装置实施例。
可以理解的是,为了实现上述方法实施例中功能,图12和图13中的装置包括了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本申请中所公开的实施例描述的各示例的单元及方法步骤,本申请能够以硬件或硬件和计算机软件相结合的形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法实施例对装置进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个模块中。上述模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
图12示出了本申请实施例提供的装置10的组成示意图,如图12所示,该装置10包括:获取单元11和处理单元12。
当装置10用于实现图10所示的方法时,获取单元11,用于获取源代码文件,即执行图10的步骤1000。处理单元12,用于对源代码文件进行编译,得到字节码文件,即执行图10的步骤1010。
当装置10用于实现图11所示的方法时,获取单元11,用于获取字节码文件,即执行图11的步骤1100。处理单元12,用于解析字节码文件,即执行图11的步骤1110。
需要说明的是,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。本申请实施例提供的装置10,用于执行上文所述方法,因此可以达到与上文所述方法相同的效果。
图13示出了本申请实施例提供的装置20的组成示意图,如图12示,装置20包括处理器21。处理器21与存储器23耦合,存储器23用于存储指令。当装置20用于实现上文所述的方法时,处理器21用于执行存储器23中的指令,以实现上述处理单元12的功能。
可选地,装置20还包括存储器23。
可选地,装置20还包括接口电路22。处理器21和接口电路22之间相互耦合。可以理解的是,接口电路22可以为收发器或输入输出接口。当装置20用于实现上文所述的方法时,处理器21用于执行指令,以实现上述处理单元12的功能,接口电路22用于实现上述获取单元11的功能。
本申请实施例还提供了一种电子设备,包括:处理器、存储器、应用程序以及计算机程序。上述各器件可以通过一个或多个通信总线连接。其中,该一个或多个计算机程序被存储在上述存储器中并被配置为被该一个或多个处理器执行,该一个或多个计算机程序包括指令,上述指令可以用于使电子设备执行上述方法实施例中的各个步骤。
示例性地,上述处理器具体可以为图1所示的处理器110,上述存储器具体可以为图1所示的内部存储器120和/或与电子设备连接的外部存储器。
本申请实施例还提供一种芯片,所述芯片包括处理器和通信接口,所述通信接口用于接收信号,并将所述信号传输至所述处理器,所述处理器处理所述信号,使得如前文中任一种可能的实现方式中所述编译方法或解析方法被执行。
本实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机指令,当该计算机指令在电子设备上运行时,使得电子设备执行上述相关方法步骤实现上述实施例中的编译方法或解析方法。
本实施例还提供了一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述相关步骤,以实现上述实施例中的编译方法或解析方法。
另外,本申请的实施例还提供一种装置,这个装置具体可以是芯片,组件或模块,该装置可包括相连的处理器和存储器;其中,存储器用于存储计算机执行指令,当装置运行时,处理器可执行存储器存储的计算机执行指令,以使芯片执行上述各方法实施例中的编译方法或解析方法。
本申请实施例还提供一种处理系统,该系统包括上述实施例提供的任意一种装置。
上述提供的任一种装置中相关内容的解释及有益效果均可参考上文提供的对应的方法实施例,此处不再赘述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (20)
1.一种解析方法,其特征在于,所述方法包括:
获取字节码文件,所述字节码文件包括第一指令组和第二指令组,所述第一指令组中的引用指令所引用的数据的偏移值存储在第一数组,所述第二指令组中的引用指令所引用的数据的偏移值存储在第二数组,所述第二数组是在所述第一数组的存储余量不足时创建的;
解析所述字节码文件。
2.根据权利要求1所述的方法,其特征在于,
所述字节码文件还包括第三数组,所述第三数组包括所述第一数组的偏移值和所述第二数组的偏移值;
所述第一指令组包括所述第一数组在所述第三数组中的索引;
所述第二指令组包括所述第二数组在所述第三数组中的索引。
3.根据权利要求1所述的方法,其特征在于,
所述第一指令组包括所述第一数组的偏移值;
所述第二指令组包括所述第二数组的偏移值。
4.根据权利要求1至3中任一项所述的方法,其特征在于,
所述第一数组和/或所述第二数组支持存储的偏移值的总量小于或者等于65536;
所述第一指令组中的引用指令的引用位宽和/或所述第二指令组中的引用指令的引用位宽小于或者等于2字节。
5.根据权利要求1至4中任一项所述的方法,其特征在于,
所述字节码文件还包括第三指令组,所述第三指令组中的引用指令所引用的数据的偏移值存储在第四数组,并且所述第四数组专用于存储所述第三指令组中的引用指令所引用的数据的偏移值。
6.根据权利要求1至5中任一项所述的方法,其特征在于,
所述第一指令组和/或所述第二指令组为:函数、预设数量的指令的组合、或调试信息对应的指令的组合。
7.根据权利要求1至6中任一项所述的方法,其特征在于,
所述第一数组和/或所述第二数组包括多类数据的偏移值。
8.根据权利要求1至7中任一项所述的方法,其特征在于,
所述第一数组包括的偏移值各不相同;和/或,
所述第二数组包括的偏移值各不相同。
9.一种编译方法,其特征在于,所述方法包括:
获取源代码文件;
对所述源代码文件进行编译,得到字节码文件,所述字节码文件包括第一指令组和第二指令组,所述第一指令组中的引用指令所引用的数据的偏移值存储在第一数组,所述第二指令组中的引用指令所引用的数据的偏移值存储在第二数组,所述第二数组是在所述第一数组的存储余量不足时创建的。
10.根据权利要求9所述的方法,其特征在于,
所述字节码文件还包括第三数组,所述第三数组包括所述第一数组的偏移值和所述第二数组的偏移值;
所述第一指令组包括所述第一数组在所述第三数组中的索引;
所述第二指令组包括所述第二数组在所述第三数组中的索引。
11.根据权利要求9所述的方法,其特征在于,
所述第一指令组包括所述第一数组的偏移值;
所述第二指令组包括所述第二数组的偏移值。
12.根据权利要求9至11中任一项所述的方法,其特征在于,
所述第一数组和/或所述第二数组支持存储的偏移值的总量小于或者等于65536;
所述第一指令组中的引用指令的引用位宽和/或所述第二指令组中的引用指令的引用位宽小于或者等于2字节。
13.根据权利要求9至12中任一项所述的方法,其特征在于,
所述字节码文件还包括第三指令组,所述第三指令组中的引用指令所引用的数据的偏移值存储在第四数组,并且所述第四数组专用于存储所述第三指令组中的引用指令所引用的数据的偏移值。
14.根据权利要求9至13中任一项所述的方法,其特征在于,
所述第一指令组和/或所述第二指令组为:函数、预设数量的指令的组合、或调试信息对应的指令的组合。
15.根据权利要求9至14中任一项所述的方法,其特征在于,
所述第一数组和/或所述第二数组包括多类数据的偏移值。
16.根据权利要求9至15中任一项所述的方法,其特征在于,
所述第一数组包括的偏移值各不相同;和/或,
所述第二数组包括的偏移值各不相同。
17.一种电子装置,其特征在于,包括:一个或多个处理器;一个或多个存储器;该一个或多个存储器存储有一个或多个计算机程序,该一个或多个计算机程序包括指令,当该指令被一个或多个处理器执行时,使得如权利要求1-8中任一项所述的方法被执行,或者使得如权利要求9-16中任一项所述的方法被执行。
18.一种芯片,其特征在于,所述芯片包括处理器和通信接口,所述通信接口用于接收信号,并将所述信号传输至所述处理器,所述处理器处理所述信号,使得如权利要求1-8中任一项所述的方法被执行,或者使得如权利要求9-16中任一项所述的方法被执行。
19.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机指令,当所述计算机指令在计算机上运行时,使得如权利要求1-8中任一项所述的方法被执行,或者使得如权利要求9-16中任一项所述的方法被执行。
20.一种计算机程序产品,其特征在于,所述计算机程序产品包括用于执行如权利要求1至8中任一项所述的方法或者如权利要求9-16中任一项所述的方法的指令。
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202310154098.5A CN118519637A (zh) | 2023-02-17 | 2023-02-17 | 一种编译方法、解析方法和装置 |
| PCT/CN2023/139471 WO2024169376A1 (zh) | 2023-02-17 | 2023-12-18 | 一种编译方法、解析方法和装置 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202310154098.5A CN118519637A (zh) | 2023-02-17 | 2023-02-17 | 一种编译方法、解析方法和装置 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| CN118519637A true CN118519637A (zh) | 2024-08-20 |
Family
ID=92280012
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202310154098.5A Pending CN118519637A (zh) | 2023-02-17 | 2023-02-17 | 一种编译方法、解析方法和装置 |
Country Status (2)
| Country | Link |
|---|---|
| CN (1) | CN118519637A (zh) |
| WO (1) | WO2024169376A1 (zh) |
Family Cites Families (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6857063B2 (en) * | 2001-02-09 | 2005-02-15 | Freescale Semiconductor, Inc. | Data processor and method of operation |
| US20100312991A1 (en) * | 2008-05-08 | 2010-12-09 | Mips Technologies, Inc. | Microprocessor with Compact Instruction Set Architecture |
| CN103914326B (zh) * | 2014-04-21 | 2017-02-08 | 飞天诚信科技股份有限公司 | 一种高效更新java指令的方法和装置 |
| CN104978182B (zh) * | 2014-10-15 | 2018-05-22 | 武汉安天信息技术有限责任公司 | 一种将JAR文件解析成java的方法及系统 |
| CN111782270B (zh) * | 2020-06-09 | 2023-12-19 | Oppo广东移动通信有限公司 | 一种数据处理方法及装置、存储介质 |
| CN111880806B (zh) * | 2020-07-23 | 2023-11-21 | 无锡融卡科技有限公司 | 应用执行方法与应用执行系统 |
| CN112631722A (zh) * | 2020-12-24 | 2021-04-09 | 北京握奇数据股份有限公司 | 一种字节码指令集精简方法和系统 |
-
2023
- 2023-02-17 CN CN202310154098.5A patent/CN118519637A/zh active Pending
- 2023-12-18 WO PCT/CN2023/139471 patent/WO2024169376A1/zh not_active Ceased
Also Published As
| Publication number | Publication date |
|---|---|
| WO2024169376A1 (zh) | 2024-08-22 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN110675256B (zh) | 部署和执行智能合约的方法及装置 | |
| US7376781B2 (en) | Virtual USB card reader with PCI express interface | |
| CN111651384B (zh) | 寄存器的读写方法、芯片、子系统、寄存器组及终端 | |
| CN112631657B (zh) | 用于字符串处理的字节比较方法以及指令处理装置 | |
| US20030101208A1 (en) | JAVA DSP acceleration by byte-code optimization | |
| CN101751273A (zh) | 用于嵌入式系统的安全引导装置及方法 | |
| US20240176914A1 (en) | Data Processing Method and Related Apparatus | |
| CN108694052A (zh) | 一种固件升级方法、固件升级装置及固件升级系统 | |
| US20080288919A1 (en) | Encoding of Symbol Table in an Executable | |
| CN105630530A (zh) | 数字信号处理器多级启动方法及系统 | |
| CN101794219A (zh) | .net文件的压缩方法和装置 | |
| CN116467015B (zh) | 镜像生成方法、系统启动校验方法及相关设备 | |
| US10656926B2 (en) | Compact type layouts | |
| CN118519637A (zh) | 一种编译方法、解析方法和装置 | |
| US20140214434A1 (en) | Method for processing sound data and circuit therefor | |
| US20070079015A1 (en) | Methods and arrangements to interface a data storage device | |
| CN1514379A (zh) | 具有嵌入式开放平台体系结构的移动信息装置及扩展方法 | |
| CN114780120B (zh) | 升级方法、设备及存储介质 | |
| US7314180B2 (en) | Memory card and reproducing apparatus | |
| CN116521487A (zh) | 日志打印方法、电子设备以及存储介质 | |
| CN101770368B (zh) | .net文件中命名空间的压缩方法和装置 | |
| CN116483736B (zh) | 插桩位置确定方法及电子设备 | |
| CN1234213C (zh) | 用于在存储媒体和移动通信终端之间进行数据传输的装置和方法 | |
| CN101794221A (zh) | .net文件中引用类型的压缩方法和装置 | |
| CN118672587A (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 |