CN112612530B - 类查询方法及装置 - Google Patents
类查询方法及装置 Download PDFInfo
- Publication number
- CN112612530B CN112612530B CN201910883259.8A CN201910883259A CN112612530B CN 112612530 B CN112612530 B CN 112612530B CN 201910883259 A CN201910883259 A CN 201910883259A CN 112612530 B CN112612530 B CN 112612530B
- Authority
- CN
- China
- Prior art keywords
- symbol
- class
- identifier
- information
- entry
- 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
Images
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/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- 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/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
- G06F9/44578—Preparing or optimising for loading
-
- 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/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请公开了一种类查询方法及装置,属于计算机技术领域。该方法包括:在运行已加载的库文件的过程中,在出现对表的一个表项的引用时,获取该表项中的引用信息,对该表项的引用是在编译生成库文件时将对类符号的引用进行修改得到,该表项中存储有该类符号的查询标识和引用信息;当该表项中的引用信息是指定信息时,根据该表项中的查询标识,将该表项中的引用信息更新为该类符号的符号标识,从该表项中获取该类符号的符号标识,根据该类符号的符号标识获取该类符号的已加载的类信息;当该表项中的引用信息是该类符号的符号标识时,根据该类符号的符号标识获取该类符号的已加载的类信息。本申请可以极大地减少运行过程耗时。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种类查询方法及装置。
背景技术
对于使用需要动态加载类的动态语言的计算机,其在运行已加载的库文件的过程中,当出现对某个类的引用时,需要先获取该类的已加载的类信息的存储地址,再根据该存储地址,获取该类的已加载的类信息。
目前,获取类的已加载的类信息的存储地址的操作通过类查询过程实现。具体地,根据类的类名在哈希表中查询该类的已加载的类信息的存储地址;如果未查询到该存储地址,则先加载该类,以得到该存储地址,再将该类的类名和该存储地址存储到哈希表中,然后从哈希表中获取该存储地址;如果查询到该存储地址,则直接从哈希表中获取该存储地址。
这种情况下,对于在运行已加载的库文件的过程中出现的对某个类的引用,不管是首次引用还是后续引用,都会触发类查询过程,即都需要根据该类的类名从哈希表中查询该类的已加载的类信息的存储地址,从而导致运行过程耗时较长。
发明内容
本申请提供了一种类查询方法及装置,可以解决相关技术中运行过程耗时较长的问题。
所述技术方案如下:
第一方面,提供了一种类查询方法,所述方法包括:
在运行已加载的库文件的过程中,在出现对表的一个表项的引用时,获取所述表项中的引用信息。当所述表项中的引用信息是指定信息时,根据所述表项中的所述类符号的查询标识,将所述表项中的引用信息更新为所述类符号的符号标识,从所述表项中获取所述类符号的符号标识,根据所述类符号的符号标识获取所述类符号的已加载的类信息;当所述表项中的引用信息是所述类符号的符号标识时,根据所述类符号的符号标识获取所述类符号的已加载的类信息。
其中,所述对所述表项的引用是在编译生成所述库文件时将对类符号的引用进行修改得到,所述表项中的引用信息在编译生成所述库文件时被设置为指定信息,所述表项中存储有所述类符号的查询标识和引用信息,所述类符号的查询标识用于查询所述类符号的符号标识,所述类符号的符号标识用于获取所述类符号的已加载的类信息。
需要说明的是,该库文件可以为需要动态加载类的动态语言中使用的文件,该库文件中可以包括编译好的供其他程序使用的代码和数据。
另外,该类符号可以为需要动态加载其类信息的符号,如该类符号可以为类本身、类成员变量、类方法等。该类符号的类信息可以为该类符号的定义中包含的所有信息,如当该类符号为类本身时,该类符号的类信息可以包括类名、类成员变量信息、类方法信息等。
再者,该类符号的查询标识用于查询该类符号的符号标识,该类符号的符号标识用于获取该类符号的已加载的类信息。例如,该类符号的查询标识可以为该类符号的符号名、符号名的哈希值等,该类符号的符号标识可以为该类符号的已加载的类信息的存储地址、指针、对象等。
需要说明的是,该引用信息为在后续运行已加载的该库文件的过程中,在出现对该表项的引用时需要首先获取的信息,获取该引用信息后,可以根据该引用信息获取该类符号的已加载的类信息。
另外,指定信息可以预先进行设置,指定信息能够触发类查询过程。例如,指定信息可以为指定内存地址。指定内存地址可以预先进行设置,且指定内存地址对应的内存区的保护属性可以为不可访问。
在本申请实施例中,在编译生成库文件的过程中,将对该类符号的引用修改为了对该类符号的查询标识和引用信息所在的表项的引用后,在运行已加载的该库文件的过程中,首次引用该表项时会触发类查询过程,来将该表项中的引用信息更新为该类符号的符号标识,然后再获取该表项中的该类符号的符号标识。而在后续引用该表项时,不会触发类查询过程,可以直接获取到该表项中的该类符号的符号标识。如此,可以极大地减少运行过程耗时。
进一步地,所述在运行已加载的库文件的过程中,当出现对表项的引用时,获取所述表项中的引用信息之前,还包括:在编译生成所述库文件的过程中,对于出现的任意一个类符号,将所述类符号的查询标识和引用信息存储到所述表的一个表项中,并将所述表项中的引用信息设置为指定信息;将对所述类符号的引用修改为对所述表项的引用。
在本申请实施例中,将对该类符号的引用修改为对该表项的引用后,实际上是将对该类符号的直接引用变成了通过该表项对该类符号的间接引用。相关技术中,是对该类符号进行直接引用,在后续运行已加载的库文件的过程中,是先根据该类符号的查询标识在哈希表中查询该类符号的符号标识,再根据该类符号的符号标识获取该类符号的已加载的类信息。而本申请实施例中,是通过该表项对该类符号进行间接引用,在后续运行已加载的库文件的过程中,是直接获取该表项中的引用信息,根据该表项中的引用信号获取该类符号的已加载的类信息。
其中,所述指定信息为指定内存地址,所述指定内存地址对应的内存区的保护属性为不可访问,所述当所述表项中的引用信息是指定信息时,根据所述表项中的所述类符号的查询标识,将所述表项中的引用信息更新为所述类符号的符号标识,包括:当所述表项中的引用信息是所述指定内存地址时,请求访问所述指定内存地址对应的内存区,以触发中断处理,所述中断处理用于获取所述表项中的所述类符号的查询标识,并根据所述类符号的查询标识查询所述类符号的符号标识,将所述表项中的引用信息更新为查询到的所述类符号的符号标识。相应地,所述从所述表项中获取所述类符号的符号标识,根据所述类符号的符号标识获取所述类符号的已加载的类信息,包括:在所述中断处理完成后,返回所述获取所述表项中的引用信息的步骤。
需要说明的是,所述中断处理可以为段内存错误中断(Segmentation Violation,SEGV)处理。
值得说明的是,相关技术中,在静态化场景下,在编译生成库文件的过程中,需要在每个类的引用处增加额外的类查询逻辑,以在后续运行已加载的库文件的过程中可以通过运行该类查询逻辑来实现类查询过程。而在本申请实施例中,在编译生成库文件的过程中,无需增加额外的类查询逻辑,仅需将对类符号的引用修改为对该类符号的查询标识和引用信息所在的表项的引用即可,在后续运行已加载的库文件的过程中,在出现对该表项的引用时,直接根据该表项中的引用信息就可以获取到该类符号的已加载的类信息,如此不仅可以减少库文件占用的存储空间,而且可以进一步减少运行过程耗时。
进一步地,在编译生成所述库文件的过程中,当所述库文件中存在所述类符号的类信息时,将所述表项的索引添加到所述类符号的类信息中。
这种情况下,可以在运行已加载的库文件的过程中,接收对所述类符号的查询请求,所述查询请求中携带所述类符号的查询标识;根据所述类符号的查询标识查询所述类符号的符号标识;根据所述类符号的符号标识获取所述类符号的已加载的类信息;当所述类符号的已加载的类信息中包括所述表项的索引时,根据所述表项的索引查找所述表项;将所述表项中的引用信息更新为所述类符号的符号标识。如此,可以避免在运行已加载的库文件的过程中重复执行类查询过程。
第二方面,提供了一种类查询装置,所述类查询装置具有实现上述第一方面中类查询方法行为的功能。所述类查询装置包括至少一个模块,所述至少一个模块用于实现上述第一方面所提供的类查询方法。
第三方面,提供了一种类查询装置,所述类查询装置的结构中包括处理器和存储器,所述存储器用于存储支持类查询装置执行上述第一方面所提供的类查询方法的程序,以及存储用于实现上述第一方面所述的类查询方法所涉及的数据。所述处理器被配置为用于执行所述存储器中存储的程序。所述类查询装置还可以包括通信总线,所述通信总线用于在所述处理器与所述存储器之间建立连接。
第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的类查询方法。
第五方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面所述的类查询方法。
上述第二方面、第三方面、第四方面和第五方面所获得的技术效果与上述第一方面中对应的技术手段获得的技术效果近似,在这里不再赘述。
本申请提供的技术方案至少可以带来以下有益效果:
在本申请实施例中,在编译生成库文件的过程中,将对类符号的引用修改为了对该类符号的查询标识和引用信息所在的表项的引用。在运行已加载的该库文件的过程中,首次引用该表项时会触发类查询过程,来将该表项中的引用信息更新为该类符号的符号标识,然后再获取该表项中的该类符号的符号标识。而在后续引用该表项时,不会触发类查询过程,可以直接获取到该表项中的该类符号的符号标识。如此,可以极大地减少运行过程耗时。
附图说明
图1是本申请实施例提供的一种类加载系统的结构示意图;
图2是本申请实施例提供的一种计算机设备的结构示意图;
图3是本申请实施例提供的一种类查询方法的流程图;
图4是本申请实施例提供的一种编译生成库文件以及加载库文件的过程的流程图;
图5是本申请实施例提供的一种类查询过程的流程图;
图6是本申请实施例提供的一种主动查询过程和被动查询过程的示意图;
图7是本申请实施例提供的一种类查询装置的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请的实施方式作进一步地详细描述。
在对本申请实施例进行详细地解释说明之前,先对本申请实施例涉及的系统架构予以说明。
图1是本申请实施例提供的一种类加载系统的结构示意图。参见图1,该类加载系统包括:类加载器101、类连接器102、初始化模块103和辅助查询模块104。
编译生成的库文件可以输入到该类加载系统中。
类加载器101可以对该库文件进行加载,在此加载过程中会查找并加载类的二进制数据。类加载器101中可以包括多个加载单元,该多个加载单元可以分别用于加载不同的库文件。如该多个加载单元可以包括BootCL单元、SystemCL单元、AppCL单元等。
类连接器102中可以包括验证单元、准备单元和解析单元。验证单元可以确保被加载的类的正确性;准备单元可以为类的静态变量分配内存,并将其初始化为默认值;解析单元可以将类中的符号引用转换为直接引用。
初始化模块103可以为类中的静态变量赋予正确的初始值。
辅助查询模块104是在运行已加载的库文件的过程中,用于根据类符号的查询标识查询该类符号的符号标识的模块。辅助查询模块104中可以包括中断处理函数、中断处理单元和哈希表。该中断处理函数被调用后可以指示中断处理单元执行中断处理,如该中断处理函数可以为SEGV Handler函数。中断处理单元可以用于执行中断处理,以根据表项中的类符号的查询标识,将该表项中的引用信息更新为该类符号的符号标识。哈希表中可以存储有类符号的查询标识和类符号的符号标识,根据某个类符号的查询标识可以在该哈希表中查询该类符号的符号标识。
图2是本申请实施例提供的一种计算机设备的结构示意图,图1所示的类加载系统可以通过该计算机设备实现。参见图2,该计算机设备包括至少一个处理器201、通信总线202、存储器203以及至少一个通信接口204。
处理器201可以是一个通用中央处理器(Central Processing Unit,CPU)、微处理器、特定应用集成电路(application-specific integrated circuit,ASIC),或者可以是一个或多个用于控制本申请方案程序执行的集成电路。
通信总线202可包括一通路,用于在上述组件之间传送信息。
存储器203可以是只读存储器(read-only memory,ROM)或可存储静态信息和指令的其它类符号型的静态存储设备,也可以是随机存取存储器(random access memory,RAM)或者可存储信息和指令的其它类符号型的动态存储设备,也可以是电可擦可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、只读光盘(Compact Disc Read-Only Memory,CD-ROM)或其它光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其它磁存储设备,或者是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其它介质,但不限于此。存储器203可以是独立存在,并通过通信总线202与处理器201相连接。存储器203也可以和处理器201集成在一起。
通信接口204使用任何收发器一类符号的装置,用于与其它设备或通信网络通信,如以太网,无线接入网(Radio Access Network,RAN)、无线局域网(Wireless Local AreaNetworks,WLAN)等。
在具体实现中,作为一种实施例,处理器201可以包括一个或多个CPU,如图2中所示的CPU0和CPU1。
在具体实现中,作为一种实施例,计算机设备可以包括多个处理器,如图2中所示的处理器201和处理器205。这些处理器中的每一个可以是一个单核处理器(single-CPU),也可以是一个多核处理器(multi-CPU)。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(如计算机程序指令)的处理核。
在具体实现中,作为一种实施例,计算机设备还可以包括输出设备206和输入设备207。输出设备206和处理器201通信,可以以多种方式来显示信息。例如,输出设备206可以是液晶显示器(liquid crystal display,LCD)、发光二级管(light emitting diode,LED)显示设备、阴极射线管(cathode ray tube,CRT)显示设备或投影仪(projector)等。输入设备207和处理器201通信,可以以多种方式接收用户的输入。例如,输入设备207可以是鼠标、键盘、触摸屏设备或传感设备等。
上述的计算机设备可以是一个通用计算机设备或一个专用计算机设备。在具体实现中,计算机设备可以是台式机、便携式电脑、网络服务器、掌上电脑(Personal DigitalAssistant,PDA)、移动手机、平板电脑、无线终端设备、通信设备或嵌入式设备,本申请实施例不限定计算机设备的类符号型。
其中,存储器203用于存储执行本申请方案的程序代码210,处理器201用于执行存储器203中存储的程序代码210。该计算机设备可以通过处理器201以及存储器203中的程序代码210,来实现下文图3实施例提供的类查询方法。
图3是本申请实施例提供的一种类查询方法的流程图。参见图3,该方法可以包括如下步骤。
下面先对编译生成库文件的过程进行说明:
具体地,在编译生成库文件的过程中,对于出现的任意一个类符号,将该类符号的查询标识和引用信息存储到表的一个表项中,并将该表项中的引用信息设置为指定信息;将对该类符号的引用修改为对该表项的引用。
需要说明的是,可以对多种文件进行编译来生成该库文件,如可以对jar文件、class文件(字节码文件)、dex文件、odex文件、源码、或能够被虚拟机运行的中间文件等文件进行编译来生成该库文件,本申请实施例对此不作限定。
另外,该库文件可以为需要动态加载类的动态语言(如Java语言、Kotlin语言、Scala语言、Groovy语言等)中使用的文件,该库文件中可以包括编译好的供其他程序使用的代码和数据。例如,该库文件可以为Java语言中使用的so文件等。
需要说明的是,该类符号可以为需要动态加载其类信息的符号,如该类符号可以为类本身、类成员变量、类方法等。该类符号的类信息可以为该类符号的定义中包含的所有信息,如当该类符号为类本身时,该类符号的类信息可以包括类名、类成员变量信息、类方法信息等。
另外,该类符号的查询标识用于查询该类符号的符号标识,该类符号的符号标识用于获取该类符号的已加载的类信息。例如,该类符号的查询标识可以为该类符号的符号名、符号名的哈希值等,该类符号的符号标识可以为该类符号的已加载的类信息的存储地址、指针、对象等。
需要说明的是,该引用信息为在后续运行已加载的该库文件的过程中,在出现对该表项的引用时需要首先获取的信息,获取该引用信息后,可以根据该引用信息获取该类符号的已加载的类信息。
另外,指定信息可以预先进行设置,指定信息能够触发类查询过程。例如,指定信息可以为指定内存地址。指定内存地址可以预先进行设置,且指定内存地址对应的内存区的保护属性可以为不可访问。例如,可以通过调用mprotect()函数设置一段内存区的保护属性为不可访问,此时可以将这一段内存区的地址作为指定内存地址。
进一步地,将该类符号的查询标识和引用信息存储到表的一个表项中之前,可以先获取该类符号的查询标识。具体地,当该库文件中存在该类符号的类信息时,可以根据该类符号的类信息生成该类符号的查询标识;当该库文件中不存在该类符号的类信息时,可以根据该类符号的符号名生成该类符号的查询标识。
这种情况下,该表可以包括第一列表和第二列表。当该库文件中存在该类符号的类信息时,可以将该类符号的查询标识和引用信息存储到第一列表的一个表项中,第一列表中的查询标识是根据类信息生成的。当该库文件中不存在该类符号的类信息时,可以将该类符号的查询标识和引用信息存储到第二列表的一个表项中,第二列表中的查询标识是根据符号名生成的。
值得注意的是,将对该类符号的引用修改为对该表项的引用后,实际上是将对该类符号的直接引用变成了通过该表项对该类符号的间接引用。相关技术中,是对该类符号进行直接引用,在后续运行已加载的库文件的过程中,是先根据该类符号的查询标识在哈希表中查询该类符号的符号标识,再根据该类符号的符号标识获取该类符号的已加载的类信息。而本申请实施例中,是通过该表项对该类符号进行间接引用,在后续运行已加载的库文件的过程中,是直接获取该表项中的引用信息,根据该表项中的引用信号获取该类符号的已加载的类信息。
例如,对该类符号的引用可以为:ldr x0,class_Ljava_lang_String
将对该类符号的引用修改为对该表项的引用,则是将对该类符号的直接引用变成了通过该表项对该类符号的间接引用,此时对该表项的引用可以如下所示:
adrp x0,ptr_class_Ljava_lang_String
ldr x0,[x0,#:lo12:ptr_class_Ljava_lang_String]
ldr xzr,[x0]
需要说明的一点是,在编译生成该库文件的过程中,当该库文件中存在该类符号的类信息时,可以将该表项的索引添加到该类符号的类信息中。该表项的索引用于查找该表项,如该表项的索引可以为该表项的存储地址等。
例如,可以创建一个类信息列表,当该库文件中存在该类符号的类信息时,可以将该类符号的类信息和该表项的索引均存储在该类信息列表中的一个类信息表项中,此时该类信息表项中的内容就是该类符号的新的类信息。如此,就实现了将该表项的索引添加到该类符号的类信息中。
下面再对库文件的加载过程进行说明:
具体地,可以对该库文件进行加载。对该库文件进行加载,即是对该库文件中的该类符号的类信息进行加载。在对该类符号的类信息进行加载后,可以得到该类符号的符号标识。之后,可以将该类符号的查询标识和该类符号的符号标识存储到哈希表中。
例如,可以将该库文件中出现的该类符号的类信息加载到内存中,然后将该类符号的已加载的类信息的存储地址作为该类符号的符号标识。之后,将该类符号的查询标识和该存储地址存储到哈希表中,以便后续查询。
为了便于理解,下面结合图4来对上述编译生成库文件以及加载库文件的过程进行说明。
参见图4,在步骤401中,当在编译生成库文件的过程中出现某个类符号时,获取该类符号的查询标识,将该类符号的查询标识存储到表中的一个表项中。在步骤402中,将引用信息存储到该表项中,并将该引用信息设置为指定信息。在步骤403中,将对该类符号的引用修改为对该表项的引用。在步骤404中,对该库文件中的该类符号进行加载,以得到该类符号的符号标识,并将该类符号的查询标识和该类符号的符号标识存储到哈希表中。
接下来对运行已加载的库文件的过程进行详细说明。
步骤301:在运行已加载的库文件的过程中,在出现对该表的一个表项的引用时,获取该表项中的引用信息。
由于在编译生成该库文件的过程中,已经将对该类符号的引用修改为了对该表项的引用,所以在运行已加载的库文件的过程中,出现的对该表项的引用就是对该类符号的间接引用。这种情况下,出现对该表项的引用时,可以直接获取该表项中的引用信息,以便后续根据该表项中的引用信息来获取该类符号的已加载的类信息。
步骤302:当该表项中的引用信息是指定信息时,根据该表项中的该类符号的查询标识,将该表项中的引用信息更新为该类符号的符号标识;从该表项中获取该类符号的符号标识,根据该类符号的符号标识获取该类符号的已加载的类信息。
需要说明的是,当该表项中的引用信息是指定信息时,会触发类查询过程,也即触发对该表项中的引用信息的更新操作,此时可以先根据该表项中的该类符号的查询标识将该表项中的引用信息更新为该类符号的符号标识,再重新获取该表项中的引用信息,然后根据该表项中的引用信息获取该类符号的已加载的类信息。
另外,根据该类符号的符号标识获取该类符号的已加载的类信息的操作可以参考相关技术,本申请实施例对此不进行详细阐述。例如,可以根据该类符号的符号标识确定用于存储该类符号的已加载的类信息的内存区,从该内存区中获取该类符号的已加载的类信息。
具体地,当该表项中的引用信息为指定信息时,根据该表项中的该类符号的查询标识,将该表项中的引用信息更新为该类符号的符号标识的操作可以为:当该表项中的引用信息是指定信息,且指定信息是指定内存地址时,请求访问指定内存地址对应的内存区,以触发中断处理,该中断处理用于获取该表项中的该类符号的查询标识,并根据该类符号的查询标识查询该类符号的符号标识,将该表项中的引用信息更新为查询到的该类符号的符号标识。相应地,从该表项中获取该类符号的符号标识,根据该类符号的符号标识获取该类符号的已加载的类信息的操作可以为:在该中断处理完成后,返回步骤301中的获取该表项中的引用信息的步骤。
需要说明的是,该中断处理获取该表项中的该类符号的查询标识时,可以先根据寄存器的值来获取该表项的存储地址,再根据该表项的存储地址查找该表项,继而获取该表项中的该类符号的查询标识。
另外,根据该类符号的查询标识查询该类符号的符号标识的操作可以参考相关技术,本申请实施例对此不进行详细阐述。例如,可以根据该类符号的查询标识在哈希表中查询该类符号的符号标识。
值得注意的是,由于指定内存地址对应的内存区的保护属性为不可访问,所以当请求访问指定内存地址对应的内存区时,会自动触发中断处理。本申请实施例中可以事先对该中断处理的中断处理函数进行设置,以在调用该中断处理函数后可以获取该表项中的该类符号的查询标识,并根据该类符号的查询标识查询该类符号的符号标识,将该表项中的引用信息更新为查询到的该类符号的符号标识。
例如,该中断处理可以为SEGV处理。本申请实施例可以在系统初始化时,对该SEGV处理的Handler处理函数进行注册,以在调用该Handler处理函数后可以获取该表项中的该类符号的查询标识,并根据该类符号的查询标识查询该类符号的符号标识,将该表项中的引用信息更新为查询到的该类符号的符号标识。
值得说明的是,本申请实施例中,在获取到该表项中的引用信息后,可以直接访问该表项中的引用信息对应的内存区。
当该表项中的引用信息是指定内存地址时,访问该表项中的引用信息对应的内存区,就会触发中断处理,该中断处理将可以获取该表项中的该类符号的查询标识,并根据该类符号的查询标识查询该类符号的符号标识,将该表项中的引用信息更新为查询到的该类符号的符号标识。之后,在该中断处理完成后,返回原先运行的程序的断点,即返回步骤301中获取该表项中的引用信息的步骤,然后就可以直接从该表项中获取到该类符号的符号标识,再根据该类符号的符号标识获取到该类符号的已加载的类信息。
而当该表项中的引用信息是该类符号的符号标识时,访问该表项中的引用信息对应的内存区后就可以直接获取到该类符号的已加载的类信息,此过程就是下述步骤303中的操作。
另外,相关技术中,在静态化场景下,在编译生成库文件的过程中,需要在每个类的引用处增加额外的类查询逻辑,以在后续运行已加载的库文件的过程中可以通过运行该类查询逻辑来实现类查询过程。而在本申请实施例中,在编译生成库文件的过程中,无需增加额外的类查询逻辑,仅需将对类符号的引用修改为对该类符号的查询标识和引用信息所在的表项的引用即可,在后续运行已加载的库文件的过程中,在出现对该表项的引用时,直接根据该表项中的引用信息就可以获取到该类符号的已加载的类信息,如此不仅可以减少库文件占用的存储空间,而且可以进一步减少运行过程耗时。
值得注意的是,本申请实施例中的中断处理的思路也可以应用于类符号初始化过程中。例如,可以将该类符号的查询标识和预设内存地址存储到表的一个表项中,预设内存地址对应的内存区的保护属性为不可访问,对预设内存地址的访问将会触发一个中断处理,这个中断处理用于对该类符号进行初始化,并在对该类符号的初始化完成后,将预设内存地址替换为非预设内存地址。这种情况下,当需要对该类符号进行初始化时,可以访问该表项;如果未对该类符号进行初始化,则该表项中存储的就是预设内存地址,此时对该表项的访问就会触发这个中断处理来对该类符号进行初始化,并在对该类符号的初始化完成后,将预设内存地址替换为非预设内存地址;如果已对该类符号进行初始化,则该表项中存储的就是非预设内存地址,此时对该表项的访问就不会触发这个中断处理,如此就不会对该类符号重复进行初始化。
当然,本申请实施例中的中断处理思路也可以应用于其它需要动态查询信息的场景中。例如,对于Linux下根据全局偏移表和过程链接表来访问信息的机制,可以通过该中断处理思路来替换,以优化其性能。
步骤303:当该表项中的引用信息是该类符号的符号标识时,根据该类符号的符号标识获取该类符号的已加载的类信息。
需要说明的是,当该表项中的引用信息是该类符号的符号标识时,此时根据该表项中的引用信息获取该类符号的已加载的类信息,就是根据该类符号的符号标识获取该类符号的已加载的类信息,如此根据该表项中的引用信息将可以直接获取到该类符号的已加载的类信息。
值得说明的是,本申请实施例中在编译生成库文件的过程中,将对该类符号的引用修改为了对该类符号的查询标识和引用信息所在的表项的引用后,在运行已加载的该库文件的过程中,首次引用该表项时会触发类查询过程,来将该表项中的引用信息更新为该类符号的符号标识,然后再获取该表项中的该类符号的符号标识。而在后续引用该表项时,不会触发类查询过程,可以直接获取到该表项中的该类符号的符号标识。如此,可以极大地减少运行过程耗时。
为了便于理解,下面结合图5来对上述类查询过程进行举例说明。
参见图5,在步骤501中,在运行已加载的库文件的过程中,在出现对该表的一个表项的引用时,获取该表项中的引用信息。在步骤502中,当该表项中的引用信息是指定内存地址时,请求访问指定内存地址对应的内存区,以触发中断处理;在步骤5021中,在该中断处理中,根据寄存器的值获取该表项的存储地址,根据该表项的存储地址查找该表项,从该表项中获取该类符号的查询标识;在步骤5022中,根据该类符号的查询标识查询该类符号的符号标识;在步骤5023中,将该表项中的引用信息更新为查询到的该类符号的符号标识;在步骤5024中,结束该中断处理,返回步骤501中的获取该表项中的引用信息的步骤。在步骤503中,当该表项中的引用信息是该类符号的符号标识时,根据该类符号的符号标识获取该类符号的已加载的类信息。
值得注意的是,本申请实施例中不仅可以在运行已加载的库文件的过程中,在出现对该类符号的查询标识和引用信息所在的表项的引用时,对该类符号进行被动查询。还可以在运行已加载的库文件的过程中,对该类符号进行主动查询。具体地,在运行已加载的库文件的过程中,可以接收对该类符号的查询请求,该查询请求中携带该类符号的查询标识;根据该类符号的查询标识查询该类符号的符号标识;根据该类符号的符号标识获取该类符号的已加载的类信息。并且,当该类符号的已加载的类信息中包括该表项的索引时,可以根据该表项的索引查找该表项,然后将该表项中的引用信息更新为该类符号的符号标识。如此,可以避免在运行已加载的库文件的过程中重复执行类查询过程。
需要说明的是,对该类符号的主动查询可以通过调用ClassLoader.loadClass()函数、Class.forName()函数、JNIEnv.FindClass()函数等函数实现,本申请实施例对此不作限定。
为了便于理解,下面结合图6来对上述主动查询过程或被动查询过程进行说明。
参见图6,在加载库文件后,在运行已加载的库文件的过程中,可以通过ClassLoader.loadClass()函数、Class.forName()函数、JNIEnv.FindClass()函数等函数对该类符号进行主动查询。在主动查询过程中,先根据该类符号的查询标识查询该类符号的符号标识,再根据该类符号的符号标识获取该类符号的已加载的类信息,然后根据该类符号的已加载的类信息中包括的该表项的索引查找该表项,最后将该表项中的引用信息更新为该类符号的符号标识。在运行已加载的库文件的过程中,当出现对该表项的引用时对该类符号进行被动查询,该被动查询过程已经在上述步骤301-步骤303中进行了详细说明,此处不再赘述。
进一步地,为了性能和完整性,当被动查询或主动查询获取到该类符号的已加载的类信息时,可以对该类符号关联的其它信息进行处理。
例如,当该类符号为类本身时,可以当被动查询或主动查询获取到该类符号的已加载的类信息时,将该类本身包括的类成员变量的查询标识和引用信息所在的表项中的引用信息更新为该类本身的符号标识,且将该类本身包括的类方法的查询标识和引用信息所在的表项中的引用信息更新为该类本身的符号标识。
又例如,可以当被动查询或主动查询获取到该类符号的已加载的类信息时,可以对该类符号关联的Super类、Vtable、Itable、Field、gctib等信息进行处理。
进一步地,当被动查询或主动查询获取到该类符号的已加载的类信息时,如果该类符号的已加载的类信息中包括对其它类符号的查询标识和引用信息所在的表项的引用,则可以进行链接过程,即可以按照上述步骤301-步骤303来获取该其它类符号的已加载的类信息。
在本申请实施例中,在编译生成库文件的过程中,将对类符号的引用修改为了对该类符号的查询标识和引用信息所在的表项的引用。在运行已加载的该库文件的过程中,首次引用该表项时会触发类查询过程,来将该表项中的引用信息更新为该类符号的符号标识,然后再获取该表项中的该类符号的符号标识。而在后续引用该表项时,不会触发类查询过程,可以直接获取到该表项中的该类符号的符号标识。如此,可以极大地减少运行过程耗时。
图7是本申请实施例提供的一种类查询装置的结构示意图,该类查询装置可以由软件、硬件或者两者的结合实现成为计算机设备的部分或者全部,该计算机设备可以为图2所示的计算机设备。参见图7,该装置包括:第一获取模块701、第二获取模块702和第三获取模块703。
第一获取模块701,用于执行图3实施例中的步骤301;
第二获取模块702,用于执行图3实施例中的步骤302;
第三获取模块703,用于执行图3实施例中的步骤303。
可选地,装置还包括:
存储模块,用于在编译生成库文件的过程中,对于出现的任意一个类符号,将类符号的查询标识和引用信息存储到表的一个表项中,并将表项中的引用信息设置为指定信息;
修改模块,用于将对类符号的引用修改为对表项的引用。
可选地,指定信息为指定内存地址,指定内存地址对应的内存区的保护属性为不可访问,第二获取模块,包括:
第一触发单元,用于当表项中的引用信息是指定内存地址时,请求访问指定内存地址对应的内存区,以触发中断处理,中断处理用于获取表项中的类符号的查询标识,并根据类符号的查询标识查询类符号的符号标识,将表项中的引用信息更新为查询到的类符号的符号标识;
第二触发单元,用于在中断处理完成后,触发第一获取模块获取表项中的引用信息。
可选地,中断处理为段内存错误中断SEGV处理。
可选地,装置还包括:
添加模块,用于在编译生成库文件的过程中,当库文件中存在类符号的类信息时,将表项的索引添加到类符号的类信息中。
可选地,装置还包括:
接收模块,用于在运行已加载的库文件的过程中,接收对类符号的查询请求,查询请求中携带类符号的查询标识;
查询模块,用于根据类符号的查询标识查询类符号的符号标识;
第四获取模块,用于根据类符号的符号标识获取类符号的已加载的类信息;
查找模块,用于当类符号的已加载的类信息中包括表项的索引时,根据表项的索引查找表项;
更新模块,用于将表项中的引用信息更新为类符号的符号标识。
在本申请实施例中,在编译生成库文件的过程中,将对类符号的引用修改为了对该类符号的查询标识和引用信息所在的表项的引用。在运行已加载的该库文件的过程中,首次引用该表项时会触发类查询过程,来将该表项中的引用信息更新为该类符号的符号标识,然后再获取该表项中的该类符号的符号标识。而在后续引用该表项时,不会触发类查询过程,可以直接获取到该表项中的该类符号的符号标识。如此,可以极大地减少运行过程耗时。
需要说明的是:上述实施例提供的类查询装置在类查询时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的类查询装置与类查询方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络或其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如:同轴电缆、光纤、数据用户线(Digital Subscriber Line,DSL))或无线(例如:红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质,或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如:软盘、硬盘、磁带)、光介质(例如:数字通用光盘(Digital Versatile Disc,DVD))或半导体介质(例如:固态硬盘(Solid State Disk,SSD))等。
以上所述为本申请提供的实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (12)
1.一种类查询方法,其特征在于,所述方法包括:
在运行已加载的库文件的过程中,在出现对表的一个表项的引用时,获取所述表项中的引用信息,所述对所述表项的引用是在编译生成所述库文件时将对类符号的引用进行修改得到,在编译生成所述库文件的过程中生成所述表项时所述表项中的所述类符号的引用信息被设置为指定信息,所述表项中存储有所述类符号的查询标识和引用信息,所述类符号的查询标识用于查询所述类符号的符号标识,所述类符号的符号标识用于获取所述类符号的已加载的类信息,所述类符号的引用信息用于触发获取所述类符号的已加载的类信息;
当所述表项中的引用信息是所述指定信息时,根据所述表项中的所述类符号的查询标识,将所述表项中的引用信息更新为所述类符号的符号标识;从所述表项中获取所述类符号的符号标识,根据所述类符号的符号标识获取所述类符号的已加载的类信息;
当所述表项中的引用信息是所述类符号的符号标识时,根据所述类符号的符号标识获取所述类符号的已加载的类信息。
2.如权利要求1所述的方法,其特征在于,所述在运行已加载的库文件的过程中,当出现对表项的引用时,获取所述表项中的引用信息之前,还包括:
在编译生成所述库文件的过程中,对于出现的任意一个类符号,将所述类符号的查询标识和引用信息存储到所述表的一个表项中,并将所述表项中的引用信息设置为指定信息;
将对所述类符号的引用修改为对所述表项的引用。
3.如权利要求1所述的方法,其特征在于,所述指定信息为指定内存地址,所述指定内存地址对应的内存区的保护属性为不可访问,所述当所述表项中的引用信息是指定信息时,根据所述表项中的所述类符号的查询标识,将所述表项中的引用信息更新为所述类符号的符号标识,包括:
当所述表项中的引用信息是所述指定内存地址时,请求访问所述指定内存地址对应的内存区,以触发中断处理,所述中断处理用于获取所述表项中的所述类符号的查询标识,并根据所述类符号的查询标识查询所述类符号的符号标识,将所述表项中的引用信息更新为查询到的所述类符号的符号标识;
相应地,所述从所述表项中获取所述类符号的符号标识,根据所述类符号的符号标识获取所述类符号的已加载的类信息,包括:
在所述中断处理完成后,返回所述获取所述表项中的引用信息的步骤。
4.如权利要求3所述的方法,其特征在于,所述中断处理为段内存错误中断SEGV处理。
5.如权利要求1所述的方法,其特征在于,所述方法还包括:
在编译生成所述库文件的过程中,当所述库文件中存在所述类符号的类信息时,将所述表项的索引添加到所述类符号的类信息中。
6.如权利要求5所述的方法,其特征在于,所述方法还包括:
在运行已加载的库文件的过程中,接收对所述类符号的查询请求,所述查询请求中携带所述类符号的查询标识;
根据所述类符号的查询标识查询所述类符号的符号标识;
根据所述类符号的符号标识获取所述类符号的已加载的类信息;
当所述类符号的已加载的类信息中包括所述表项的索引时,根据所述表项的索引查找所述表项;
将所述表项中的引用信息更新为所述类符号的符号标识。
7.一种类查询装置,其特征在于,所述装置包括:
第一获取模块,用于在运行已加载的库文件的过程中,在出现对表的一个表项的引用时,获取所述表项中的引用信息,所述对所述表项的引用是在编译生成所述库文件时将对类符号的引用进行修改得到,在编译生成所述库文件的过程中生成所述表项时所述表项中的所述类符号的引用信息被设置为指定信息,所述表项中存储有所述类符号的查询标识和引用信息,所述类符号的查询标识用于查询所述类符号的符号标识,所述类符号的符号标识用于获取所述类符号的已加载的类信息,所述类符号的引用信息用于触发获取所述类符号的已加载的类信息;
第二获取模块,用于当所述表项中的引用信息是所述指定信息时,根据所述表项中的所述类符号的查询标识,将所述表项中的引用信息更新为所述类符号的符号标识;从所述表项中获取所述类符号的符号标识,根据所述类符号的符号标识获取所述类符号的已加载的类信息;
第三获取模块,用于当所述表项中的引用信息是所述类符号的符号标识时,根据所述类符号的符号标识获取所述类符号的已加载的类信息。
8.如权利要求7所述的装置,其特征在于,所述装置还包括:
存储模块,用于在编译生成所述库文件的过程中,对于出现的任意一个类符号,将所述类符号的查询标识和引用信息存储到所述表的一个表项中,并将所述表项中的引用信息设置为指定信息;
修改模块,用于将对所述类符号的引用修改为对所述表项的引用。
9.如权利要求7所述的装置,其特征在于,所述指定信息为指定内存地址,所述指定内存地址对应的内存区的保护属性为不可访问,所述第二获取模块包括:
第一触发单元,用于当所述表项中的引用信息是所述指定内存地址时,请求访问所述指定内存地址对应的内存区,以触发中断处理,所述中断处理用于获取所述表项中的所述类符号的查询标识,并根据所述类符号的查询标识查询所述类符号的符号标识,将所述表项中的引用信息更新为查询到的所述类符号的符号标识;
第二触发单元,用于在所述中断处理完成后,触发所述第一获取模块获取所述表项中的引用信息。
10.如权利要求9所述的装置,其特征在于,所述中断处理为段内存错误中断SEGV处理。
11.如权利要求7所述的装置,其特征在于,所述装置还包括:
添加模块,用于在编译生成所述库文件的过程中,当所述库文件中存在所述类符号的类信息时,将所述表项的索引添加到所述类符号的类信息中。
12.如权利要求11所述的装置,其特征在于,所述装置还包括:
接收模块,用于在运行已加载的库文件的过程中,接收对所述类符号的查询请求,所述查询请求中携带所述类符号的查询标识;
查询模块,用于根据所述类符号的查询标识查询所述类符号的符号标识;
第四获取模块,用于根据所述类符号的符号标识获取所述类符号的已加载的类信息;
查找模块,用于当所述类符号的已加载的类信息中包括所述表项的索引时,根据所述表项的索引查找所述表项;
更新模块,用于将所述表项中的引用信息更新为所述类符号的符号标识。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910883259.8A CN112612530B (zh) | 2019-09-18 | 2019-09-18 | 类查询方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910883259.8A CN112612530B (zh) | 2019-09-18 | 2019-09-18 | 类查询方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112612530A CN112612530A (zh) | 2021-04-06 |
CN112612530B true CN112612530B (zh) | 2022-05-17 |
Family
ID=75224247
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910883259.8A Active CN112612530B (zh) | 2019-09-18 | 2019-09-18 | 类查询方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112612530B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113590187B (zh) * | 2021-07-13 | 2023-11-17 | 青岛海尔科技有限公司 | 用于获取代码的方法及装置、电子设备 |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103793249A (zh) * | 2014-01-24 | 2014-05-14 | 北京航空航天大学 | 一种Java虚拟机中类库的多线程预加载方法 |
CN106294565A (zh) * | 2016-07-27 | 2017-01-04 | 中国农业银行股份有限公司 | 一种数据库访问方法及系统 |
CN106610857A (zh) * | 2016-12-23 | 2017-05-03 | 上海优刻得信息科技有限公司 | 一种热补丁信息查询方法以及装置 |
CN106933611A (zh) * | 2015-12-31 | 2017-07-07 | 北京五八信息技术有限公司 | 类加载方法及类加载器 |
CN107895044A (zh) * | 2017-11-30 | 2018-04-10 | 锐捷网络股份有限公司 | 一种数据库数据处理方法、装置和系统 |
CN108021631A (zh) * | 2017-11-22 | 2018-05-11 | 努比亚技术有限公司 | 文件查询方法、系统及计算机可读存储介质 |
CN108446150A (zh) * | 2018-03-23 | 2018-08-24 | 武汉斗鱼网络科技有限公司 | 对象的重复使用方法、装置及终端设备 |
CN108595226A (zh) * | 2018-05-09 | 2018-09-28 | 腾讯科技(深圳)有限公司 | 动态加载方法、装置及计算机可读存储介质 |
CN109460255A (zh) * | 2018-11-13 | 2019-03-12 | 北京奇虎科技有限公司 | 内存地址的查询方法及装置 |
CN109710874A (zh) * | 2018-11-09 | 2019-05-03 | 深圳壹账通智能科技有限公司 | 页面数据的处理方法及装置、存储介质、计算机设备 |
CN109814939A (zh) * | 2017-11-20 | 2019-05-28 | 华为技术有限公司 | 一种动态加载方法、目标文件的制作方法及装置 |
CN109992581A (zh) * | 2019-02-20 | 2019-07-09 | 平安科技(深圳)有限公司 | 基于HashMap的数据获取方法、装置、计算机设备和存储介质 |
CN110231964A (zh) * | 2019-06-12 | 2019-09-13 | 四川长虹电器股份有限公司 | 一种动态加载js资源时防止重复请求的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10303498B2 (en) * | 2015-10-01 | 2019-05-28 | Microsoft Technology Licensing, Llc | Performance optimizations for emulators |
-
2019
- 2019-09-18 CN CN201910883259.8A patent/CN112612530B/zh active Active
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103793249A (zh) * | 2014-01-24 | 2014-05-14 | 北京航空航天大学 | 一种Java虚拟机中类库的多线程预加载方法 |
CN106933611A (zh) * | 2015-12-31 | 2017-07-07 | 北京五八信息技术有限公司 | 类加载方法及类加载器 |
CN106294565A (zh) * | 2016-07-27 | 2017-01-04 | 中国农业银行股份有限公司 | 一种数据库访问方法及系统 |
CN106610857A (zh) * | 2016-12-23 | 2017-05-03 | 上海优刻得信息科技有限公司 | 一种热补丁信息查询方法以及装置 |
CN109814939A (zh) * | 2017-11-20 | 2019-05-28 | 华为技术有限公司 | 一种动态加载方法、目标文件的制作方法及装置 |
CN108021631A (zh) * | 2017-11-22 | 2018-05-11 | 努比亚技术有限公司 | 文件查询方法、系统及计算机可读存储介质 |
CN107895044A (zh) * | 2017-11-30 | 2018-04-10 | 锐捷网络股份有限公司 | 一种数据库数据处理方法、装置和系统 |
CN108446150A (zh) * | 2018-03-23 | 2018-08-24 | 武汉斗鱼网络科技有限公司 | 对象的重复使用方法、装置及终端设备 |
CN108595226A (zh) * | 2018-05-09 | 2018-09-28 | 腾讯科技(深圳)有限公司 | 动态加载方法、装置及计算机可读存储介质 |
CN109710874A (zh) * | 2018-11-09 | 2019-05-03 | 深圳壹账通智能科技有限公司 | 页面数据的处理方法及装置、存储介质、计算机设备 |
CN109460255A (zh) * | 2018-11-13 | 2019-03-12 | 北京奇虎科技有限公司 | 内存地址的查询方法及装置 |
CN109992581A (zh) * | 2019-02-20 | 2019-07-09 | 平安科技(深圳)有限公司 | 基于HashMap的数据获取方法、装置、计算机设备和存储介质 |
CN110231964A (zh) * | 2019-06-12 | 2019-09-13 | 四川长虹电器股份有限公司 | 一种动态加载js资源时防止重复请求的方法 |
Non-Patent Citations (1)
Title |
---|
ARM中关于绝对寻址相对寻址LDR,ADR的理解;Lq_automatic;《https://blog.csdn.net/Lq_automatic/article/details/7012308》;20111125;第1页 * |
Also Published As
Publication number | Publication date |
---|---|
CN112612530A (zh) | 2021-04-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11281445B2 (en) | Method, apparatus, device and storage medium for upgrading application | |
US11106816B2 (en) | Database public interface | |
CN108228817B (zh) | 数据处理方法、装置和系统 | |
CN110297689B (zh) | 智能合约执行方法、装置、设备及介质 | |
US11341061B2 (en) | Address translation method, apparatus, and system | |
US20170161511A1 (en) | Database public interface | |
CN107885540A (zh) | 一种加载应用程序静态资源的方法、装置及终端 | |
US10635666B2 (en) | System, method and device for index compilation to optimize index usage | |
US11755341B2 (en) | Class loading method and apparatus | |
CN111737564B (zh) | 一种信息查询方法、装置、设备及介质 | |
CN110688096B (zh) | 包含插件的应用程序的构建方法、装置、介质及电子设备 | |
CN113220669B (zh) | 业务数据的处理方法、装置及电子设备 | |
CN112182037A (zh) | 数据校验方法、装置、设备以及存储介质 | |
CN108959294B (zh) | 一种访问搜索引擎的方法和装置 | |
CN115599386A (zh) | 代码生成方法、装置、设备及存储介质 | |
CN112115150A (zh) | 嵌入式内存数据库的数据管理方法、终端设备及介质 | |
CN109558121B (zh) | 接口驱动程序的开发方法、装置、设备及存储介质 | |
CN112612530B (zh) | 类查询方法及装置 | |
CN113625998A (zh) | 一种请求处理方法和装置 | |
CN112434037A (zh) | 数据处理方法、处理装置、数据处理设备和存储介质 | |
US20240126627A1 (en) | Method and apparatus for obtaining information of stack frame in call stack, device, and medium | |
US10430167B2 (en) | Redistribution of data processing tasks | |
CN113157722B (zh) | 一种数据处理方法、装置、服务器、系统及存储介质 | |
CN114510334A (zh) | 类实例的调用方法、装置、电子设备及自动驾驶车辆 | |
CN113760274A (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 |