CN108920179A - Java反射实现方法、装置和系统 - Google Patents

Java反射实现方法、装置和系统 Download PDF

Info

Publication number
CN108920179A
CN108920179A CN201710236593.5A CN201710236593A CN108920179A CN 108920179 A CN108920179 A CN 108920179A CN 201710236593 A CN201710236593 A CN 201710236593A CN 108920179 A CN108920179 A CN 108920179A
Authority
CN
China
Prior art keywords
class
reflection
java
index value
caching
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
Application number
CN201710236593.5A
Other languages
English (en)
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.)
China Mobile Communications Group Co Ltd
China Mobile Group Fujian Co Ltd
Original Assignee
China Mobile Communications Group Co Ltd
China Mobile Group Fujian 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 China Mobile Communications Group Co Ltd, China Mobile Group Fujian Co Ltd filed Critical China Mobile Communications Group Co Ltd
Priority to CN201710236593.5A priority Critical patent/CN108920179A/zh
Publication of CN108920179A publication Critical patent/CN108920179A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/72Code refactoring
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种Java反射实现方法、装置和系统。该反射实现方法包括:Java虚拟机启动类加载时,利用Java字节码框架ASM为Java类生成反射处理类;从反射处理类中获取Java类的方法的索引值;将反射处理类和索引值存入缓存,反射处理类和索引值通过缓存与Java类绑定;基于缓存中的反射处理类和索引值,反射调用Java类的方法。根据本发明实施例提供的Java反射实现方法,采用基于Java字节码框架ASM和缓存的反射实现方法,可以提升Java反射的性能和效率。

Description

Java反射实现方法、装置和系统
技术领域
本发明涉及计算机技术领域,尤其涉及Java反射实现方法、装置和系统。
背景技术
Java反射机制主要是指程序运行时,允许访问、检测和修改自身状态或行为的一种能力。在Java项目开发过程中,为了程序的灵活性经常会用到Java反射机制,它能够方便程序员创建灵活的代码,这些代码可以在运行时装配,而无需重新修改代码并重新编译。
Java反射机制的优点主要体现在它的动态性方面,并且可以降低类之间的藕合性,大大提高系统的灵活性和扩展性,同时与Java动态编译相结合,可以实现强大的功能。
通常,运行一个Java程序,首先Java类必须被Java虚拟机加载,运行程序都是在编译时就已经加载了所需要的类。“编译时”是指编译器把Java代码翻译成设备可以识别的代码,编译器在编译时会检查语法有无错误、关键字或者名称书写有无错误,然后加载类;“运行时”是指程序开始,代码被装载到内存中后,运行时检查就是在内存中做相关检查与判断。
Java的反射机制在编译时并不确定是哪个类被加载了,而是在程序运行时才加载和使用。Java反射过程需要在运行时做一些编译的工作和解释操作,如语法检查、解析字节码、将内存中的对象进行解析等,Java虚拟机无法对代码进行优化,因此通过Java反射调用类的方法的效率要比直接调用低,性能比直接调用慢。
发明内容
本发明实施例提供Java反射实现方法、装置和系统,可以提高Java反射调用的效率和性能。
根据本发明实施例的一方面,提供一种Java反射实现方法,包括:Java虚拟机启动类加载时,利用Java字节码框架ASM为Java类生成反射处理类;从反射处理类中获取Java类的方法的索引值;将反射处理类和索引值存入缓存,反射处理类和索引值通过缓存与Java类绑定;基于缓存中的反射处理类和索引值,反射调用Java类的方法。
根据本发明实施例的另一方面,提供一种Java反射实现装置,包括:反射处理类生成模块,用于Java虚拟机启动类加载时,利用Java字节码框架ASM为Java类生成反射处理类;方法索引值获取模块,用于从反射处理类中获取Java类的方法的索引值;缓存模块,用于将反射处理类和索引值存入缓存,反射处理类和索引值通过缓存与Java类绑定;反射调用模块,用于基于缓存中的反射处理类和索引值,反射调用Java类的方法。
根据本发明实施例的再一方面,提供一种Java反射实现系统,包括:存储器、处理器、通信接口和总线;存储器、处理器和通信接口通过总线连接并完成相互间的通信;存储器用于存储程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,以用于执行一种Java反射实现方法,其中,Java反射实现方法包括:Java虚拟机启动类加载时,利用Java字节码框架ASM为Java类生成反射处理类;从反射处理类中获取Java类的方法的索引值;将反射处理类和索引值存入缓存,反射处理类和索引值通过缓存与Java类绑定;基于缓存中的反射处理类和索引值,反射调用Java类的方法。
根据本发明实施例中的Java反射实现方法、装置和系统,采用基于Java字节码框架ASM以及缓存Cache的反射实现方法,可以大大提升反射的效率。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是示出根据本发明一实施例的Java反射实现方法的流程图;
图2是图1中将反射处理类和索引值存入缓存的第一示例流程图;
图3是图1中将反射处理类和索引值存入缓存的第二示例流程图;
图4是示出图1中基于缓存中的反射处理类和索引值反射调用Java类的方法的第一示例流程图;
图5是图1中基于缓存中的反射处理类和索引值反射调用Java类的方法的第二示例流程图;
图6是示出根据本发明一实施例的Java反射实现装置的结构示意图;
图7是图6中缓存模块的具体的结构示意图;
图8是图6中反射调用模块的具体的结构示意图;
图9是示出了根据本发明实施例的Java反射实现系统的示例性硬件架构的结构图。
具体实施方式
下面将详细描述本发明的各个方面的特征和示例性实施例,为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细描述。应理解,此处所描述的具体实施例仅被配置为解释本发明,并不被配置为限定本发明。对于本领域技术人员来说,本发明可以在不需要这些具体细节中的一些细节的情况下实施。下面对实施例的描述仅仅是为了通过示出本发明的示例来提供对本发明更好的理解。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
在本发明实施例中,ASM是ASSEMBLY的缩写,可以解释为汇编。对于爪哇(Java)语言而言,ASM就是字节码级别的编程。
ASM是一个Java字节码操纵框架,它可以用于动态生成类Class或者增强既有类的功能。ASM可以直接产生二进制Class文件,也可以在类被加载入Java虚拟机之前动态改变类行为。Java Class被存储在严格格式定义的类文件里,这些类文件拥有足够的元数据来解析类中的所有元素:例如类名称、方法、属性以及Java字节码(指令)。ASM从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。也就是说,ASM可以动态生成二进制格式的存根类STUB或其它代理类,或者在类被Java虚拟机装入内存之前,动态修改类。
ASM框架中的核心类包括用于ClassReader类、ClassWriter类和ClassAdapter类。其中,ClassReader类用来读取和解析编译过的class字节码文件;ClassWriter类用来重新构建编译后的类,比如说修改类名、属性以及方法,甚至可以生成新的类的字节码文件;ClassAdapter类实现了ClassVisitor接口,ClassAdapter类中提到的ClassVisitor接口,可以用于定义在读取Class字节码时会触发的事件,如类头解析完成、注解解析、字段解析、方法解析等。
为了更好的理解本发明,下面将结合附图,详细描述根据本发明实施例的Java反射实现方法、装置和系统,应注意,这些实施例并不是用来限制本发明公开的范围。
图1是示出根据本发明实施例的Java反射实现方法的流程图。如图1所示,本实施例中的Java反射实现方法100包括以下步骤:
步骤S110,Java虚拟机启动类加载时,利用Java字节码框架ASM为Java类生成反射处理类。
步骤S120,从反射处理类中获取Java类的方法的索引值。
步骤S130,将反射处理类和索引值存入缓存,反射处理类和索引值通过缓存与Java类绑定。
步骤S140,基于缓存中的反射处理类和索引值,反射调用Java类的方法。
在该实施例中,利用ASM动态产生的反射处理类MethodAccess的抽象底层基类,该抽象底层基类可以用于生成Class的方法调用。并且,由ASM核心类ClassWriter操纵原生Class字节码,实现通过Class的方法索引映射到Class的具体方法。
根据本发明实施例的Java反射实现方法,由ASM在类加载的同时动态生成Class的反射处理类,并将反射处理类和Java类的方法的索引值通过缓存绑定在具体的Class上;在进行反射调用时,通过方法的索引值和反射处理类调用Class具体的方法。
图2示出了图1中将反射处理类和索引值存入缓存的第一示例流程图,图2与图1相同或等同的步骤使用相同的标号。如图2所示,在一些实施例中,步骤S130中将反射方法对象存入缓存具体可以包括:
步骤S131,生成与Java类的方法对应的反射方法对象。
步骤S132,在反射方法对象中封装反射处理类和索引值。
步骤S133,将反射方法对象存入缓存。
在该实施例中,具有ASM特性的反射方法对象ASMMethod,封装了两个核心属性,一是反射处理类MethodAccess,二是反射方法在Class中的索引值MethodIndex。反射方法对象ASMMethod与Class中的方法对应,记录了方法在Class中的索引MethodIndex和该Class的反射处理类MethodAccess。
图3示出了图1中将反射处理类和索引值存入缓存的第二示例流程图。图3与图2中相同的步骤使用相同的标号。图3与图2的不同之处在于,在一些实施例中,步骤S133可以进一步包括:
步骤S1331,创建Java类的反射方法缓存对象,在反射方法缓存对象中保存反射方法对象。
步骤S1332,将反射方法缓存对象存入缓存。
在该实施例中,反射方法缓存对象ASMMethodCache,用于保存Class中方法所对应的ASMMethod对象,在反射方法缓存对象ASMMethodCache中,可以通过Class名称可以获取该Class的ASMMethod列表。
图4示出了图1中基于缓存中的反射处理类和索引值反射调用Java类的方法的第一示例流程图。如图4所示,在一些实施例中,步骤S140具体可以包括:
步骤S141,根据Java类的类名从缓存中提取反射处理类和索引值。
步骤S142,通过索引值定位反射处理类中的Java类的方法。
在该步骤中,在反射处理类MethodAccess中通过索引值MethodIndex映射到该Java类的具体方法上,并进行调用以达到反射的效果。
图5示出了图1中基于缓存中的反射处理类和索引值反射调用Java类的方法的第二示例流程图。在一些实施例中,如图5所示,步骤S141具体可以包括:
步骤S1411,通过Java类的类名获取缓存中与Java类对应的反射方法缓存对象。
在该步骤中,反射调用时,通过Class名称获取缓存中对应的反射方法缓存对象ASMMethodCache。
步骤S1412,根据Java类的方法的方法名从反射方法缓存对象中获取与Java类的方法对应的反射方法对象。
在该步骤中,使用反射调用的Class的方法的方法名MethodName从反射方法缓存对象ASMMethodCache中获取方法对应的ASMMethod对象。
步骤S1413,从反射方法对象中提取反射处理类和索引值。
在该步骤中,从反射方法对象ASMMethod中提取反射方法的索引值MethodIndex和Java类的反射处理类MethodAccess。
根据上述本发明实施例的Java反射实现方法,反射不需要再进行解析字节码,也不需要Java虚拟机对这些代码进行优化,而是通过ASM动态产生的反射处理类间接调用Class的具体实现方法,从而大大提升了Java反射调用的性能。
下面结合附图,详细介绍根据本发明实施例的Java反射实现装置。
图6示出了根据本发明一实施例提供的Java反射实现装置的结构示意图。如图6所示,Java反射实现装置600包括:
反射处理类生成模块610,用于Java虚拟机启动类加载时,利用Java字节码框架ASM为Java类生成反射处理类。
方法索引值获取模块620,用于从反射处理类中获取Java类的方法的索引值。
缓存模块630,用于将反射处理类和索引值存入缓存,反射处理类和索引值通过缓存与Java类绑定。
反射调用模块640,用于基于缓存中的反射处理类和索引值,反射调用Java类的方法。
根据本发明实施例的Java反射实现装置,由ASM在类加载时动态生成Class的反射处理类和Java类的方法的索引值,并将反射处理类和Java类的方法的索引值通过缓存绑定在具体的Class上。从而在进行反射调用时,实现通过Class的方法索引映射到Java类的方法。
图7示出了图6中缓存模块的具体结构的结构示意图。如图7所示,在一些实施例中,缓存模块630具体可以包括:
反射方法对象生成单元631,用于生成与Java类的方法对应的反射方法对象;封装单元632,用于在反射方法对象中封装反射处理类和索引值;缓存模块630可以用于将反射方法对象存入缓存。
在该实施例中,将反射处理类MethodAccess和索引值MethodIndex封装在反射方法对象中ASMMethod,在后续反射调用时,通过MethodIndex可以映射到MethodAccess中Java类的具体方法。
继续参考图7,在另一些实施例中,如图7所示,缓存模块630具体还可以包括:反射方法缓存对象创建单元633,用于创建Java类的反射方法缓存对象,在反射方法缓存对象中保存反射方法对象。
缓存模块630还可以用于将反射方法缓存对象存入缓存。
在该实施例中,创建的Java类的反射方法缓存对象ASMMethodCache保存有Class中方法对应的ASMMethod对象,在类加载时,将封装了反射处理类MethodAccess和索引值MethodIndex的反射方法对象通过缓存Cache捆绑在具体的类上。
在一些实施例中,反射调用模块640具体用于根据Java类的类名从缓存中提取反射处理类和索引值,通过索引值定位反射处理类中的Java类的方法。
图8示出了图6中反射调用模块的具体结构的结构示意图。如图8所示,在一些实施例中,反射调用模块640具体可以包括:
反射方法缓存对象获取单元641,用于根据Java类的类名获取缓存中与Java类对应的反射方法缓存对象。
反射方法对象获取单元642,用于根据Java类的方法的方法名从反射方法缓存对象中获取与Java类的方法对应的反射方法对象。
反射处理类和索引值提取单元643,用于从反射方法对象中提取反射处理类和索引值。
方法对象定位单元644,用于由索引值定位反射处理类中的Java类的方法。
在该实施例中,反射调用通Java类的方法名在缓存Cache中查找反射方法对象ASMMethod,并通过索引值MethodIndex和该Java类的反射处理类MethodAccess调用Java类的具体的方法
根据本发明实施例的Java反射实现装置,通过ASM动态产生的反射处理类间接调用Class的具体实现方法,从而大大提升了Java反射调用的性能。
根据本发明实施例的Java反射实现装置的其他细节与以上结合图1至图5描述的根据本发明实施例的Java反射实现方法类似,在此不再赘述。
结合图1至图8描述的根据本发明实施例的Java反射实现方法和装置可以由Java反射实现系统来实现。图9是示出根据发明实施例的Java反射实现系统的硬件结构示意图。
如图9所示,本实施例中的Java反射实现系统900包括:处理器901、存储器902、通信接口903和总线910,其中,处理器901、存储器902、通信接口903通过总线910连接并完成相互间的通信。
具体地,上述处理器901可以包括中央处理器(CPU),或者特定集成电路(ASIC),或者可以被配置成实施本发明实施例的一个或多个集成电路。
存储器902可以包括用于数据或指令的大容量存储器。举例来说而非限制,存储器902可包括HDD、软盘驱动器、闪存、光盘、磁光盘、磁带或通用串行总线(USB)驱动器或者两个或更多个以上这些的组合。在合适的情况下,存储器902可包括可移除或不可移除(或固定)的介质。在合适的情况下,存储器902可在Java反射实现系统900的内部或外部。在特定实施例中,存储器902是非易失性固态存储器。在特定实施例中,存储器902包括只读存储器(ROM)。在合适的情况下,该ROM可以是掩模编程的ROM、可编程ROM(PROM)、可擦除PROM(EPROM)、电可擦除PROM(EEPROM)、电可改写ROM(EAROM)或闪存或者两个或更多个以上这些的组合。
通信接口903,主要用于实现本发明实施例中各模块、装置、单元和/或设备之间的通信。
总线910包括硬件、软件或两者,将Java反射实现系统900的部件彼此耦接在一起。举例来说而非限制,总线可包括加速图形端口(AGP)或其他图形总线、增强工业标准架构(EISA)总线、前端总线(FSB)、超传输(HT)互连、工业标准架构(ISA)总线、无限带宽互连、低引脚数(LPC)总线、存储器总线、微信道架构(MCA)总线、外围组件互连(PCI)总线、PCI-Express(PCI-X)总线、串行高级技术附件(SATA)总线、视频电子标准协会局部(VLB)总线或其他合适的总线或者两个或更多个以上这些的组合。在合适的情况下,总线910可包括一个或多个总线。尽管本发明实施例描述和示出了特定的总线,但本发明考虑任何合适的总线或互连。
也就是说,图9所示的Java反射实现系统900可以被实现为包括:处理器901、存储器902、通信接口903和总线910。处理器901、存储器902和通信接口903通过总线910连接并完成相互间的通信。存储器902用于存储程序代码;处理器901通过读取存储器902中存储的可执行程序代码来运行与可执行程序代码对应的程序,以用于执行一种Java反射实现方法,其中,该Java反射实现方法包括:Java虚拟机启动类加载时,利用Java字节码框架ASM为Java类生成反射处理类;从反射处理类中获取Java类的方法的索引值;将反射处理类和索引值存入缓存,反射处理类和索引值通过缓存与Java类绑定;基于缓存中的反射处理类和索引值,反射调用Java类的方法。
该Java反射实现系统900可以实现结合图1至图8描述的Java反射实现方法和装置,并执行本发明上述实施例中的Java反射实现方法中的步骤S110-S140、步骤S131-S133、S1331-S1332、步骤S141-S142以及步骤S1411-S1413。
根据本发明的Java反射实现系统,Java反射实现过程不需要Java虚拟机对这些代码进行优化,而是通过ASM动态产生的反射处理类间接调用Class的具体实现方法,从而大大提升了Java反射调用的性能。
需要明确的是,本发明并不局限于上文所描述并在图中示出的特定配置和处理。为了简明起见,这里省略了对已知方法的详细描述。在上述实施例中,描述和示出了若干具体的步骤作为示例。但是,本发明的方法过程并不限于所描述和示出的具体步骤,本领域的技术人员可以在领会本发明的精神后,作出各种改变、修改和添加,或者改变步骤之间的顺序。
以上所述的结构框图中所示的功能块可以实现为硬件、软件、固件或者它们的组合。当以硬件方式实现时,其可以例如是电子电路、专用集成电路(ASIC)、适当的固件、插件、功能卡等等。当以软件方式实现时,本发明的元素是被用于执行所需任务的程序或者代码段。程序或者代码段可以存储在机器可读介质中,或者通过载波中携带的数据信号在传输介质或者通信链路上传送。“机器可读介质”可以包括能够存储或传输信息的任何介质。机器可读介质的例子包括电子电路、半导体存储器设备、ROM、闪存、可擦除ROM(EROM)、软盘、CD-ROM、光盘、硬盘、光纤介质、射频(RF)链路,等等。代码段可以经由诸如因特网、内联网等的计算机网络被下载。
还需要说明的是,本发明中提及的示例性实施例,基于一系列的步骤或者装置描述一些方法或系统。但是,本发明不局限于上述步骤的顺序,也就是说,可以按照实施例中提及的顺序执行步骤,也可以不同于实施例中的顺序,或者若干步骤同时执行。
以上所述,仅为本发明的具体实施方式,所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、模块和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。应理解,本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。

Claims (11)

1.一种Java反射实现方法,其特征在于,所述实现方法包括:
Java虚拟机启动类加载时,利用Java字节码框架ASM为Java类生成反射处理类;
从所述反射处理类中获取所述Java类的方法的索引值;
将所述反射处理类和所述索引值存入缓存,所述反射处理类和所述索引值通过所述缓存与所述Java类绑定;
基于所述缓存中的反射处理类和所述索引值,反射调用所述Java类的方法。
2.根据权利要求1所述的实现方法,其特征在于,所述将所述反射处理类和所述索引值存入缓存,包括:
生成与所述Java类的方法对应的反射方法对象;
在所述反射方法对象中封装所述反射处理类和所述索引值;
将所述反射方法对象存入所述缓存。
3.根据权利要求2所述的实现方法,其特征在于,所述将所述反射方法对象存入所述缓存,包括:
创建所述Java类的反射方法缓存对象,在所述反射方法缓存对象中保存所述反射方法对象;
将所述反射方法缓存对象存入所述缓存。
4.根据权利要求1所述的实现方法,其特征在于,所述基于所述缓存中的反射处理类和所述索引值,反射调用所述Java类的方法,包括:
根据所述Java类的类名从所述缓存中提取所述反射处理类和所述索引值;
通过所述索引值定位所述反射处理类中的所述Java类的方法。
5.根据权利要求4所述的实现方法,其特征在于,所述根据所述Java类的类名从所述缓存中提取所述反射处理类和所述索引值,包括:
通过所述Java类的类名获取所述缓存中与所述Java类对应的反射方法缓存对象;
根据所述Java类的方法的方法名从所述反射方法缓存对象中获取与所述Java类的方法对应的反射方法对象;
从所述反射方法对象中提取所述反射处理类和所述索引值。
6.一种Java反射实现装置,其特征在于,所述实现装置包括:
反射处理类生成模块,用于Java虚拟机启动类加载时,利用Java字节码框架ASM为Java类生成反射处理类;
方法索引值获取模块,用于从所述反射处理类中获取所述Java类的方法的索引值;
缓存模块,用于将所述反射处理类和所述索引值存入缓存,所述反射处理类和所述索引值通过所述缓存与所述Java类绑定;
反射调用模块,用于基于所述缓存中的反射处理类和所述索引值,反射调用所述Java类的方法。
7.根据权利要求6所述的实现装置,其特征在于,所述缓存模块包括:
反射方法对象生成单元,用于生成与所述Java类的方法对应的反射方法对象;
封装单元,用于在所述反射方法对象中封装所述反射处理类和所述索引值;
所述缓存模块还用于将所述反射方法对象存入所述缓存。
8.根据权利要求7所述的实现装置,其特征在于,所述缓存模块还包括:
反射方法缓存对象创建单元,用于创建所述Java类的反射方法缓存对象,在所述反射方法缓存对象中保存所述反射方法对象;
所述缓存模块还用于将所述反射方法缓存对象存入所述缓存。
9.根据权利要求6所述的实现装置,其特征在于,
所述反射调用模块具体用于根据所述Java类的类名从所述缓存中提取所述反射处理类和所述索引值,通过所述索引值定位所述反射处理类中的所述Java类的方法。
10.根据权利要求6所述的实现装置,其特征在于,所述反射调用模块包括:
反射方法缓存对象获取单元,用于根据所述Java类的类名获取所述缓存中与所述Java类对应的反射方法缓存对象;
反射方法对象获取单元,用于根据所述Java类的方法的方法名从所述反射方法缓存对象中获取与所述Java类的方法对应的反射方法对象;
反射处理类和索引值提取单元,用于从所述反射方法对象中提取所述反射处理类和所述索引值;
方法对象定位单元,用于由所述索引值定位所述反射处理类中的所述Java类的方法。
11.一种Java反射实现系统,其特征在于,所述实现系统包括:
存储器、处理器、通信接口和总线;
所述存储器、所述处理器和所述通信接口通过所述总线连接并完成相互间的通信;
所述存储器用于存储程序代码;
所述处理器通过读取所述存储器中存储的可执行程序代码来运行与所述可执行程序代码对应的程序,以用于执行一种Java反射实现方法,其中,所述Java反射实现方法包括:
Java虚拟机启动类加载时,利用Java字节码框架ASM为Java类生成反射处理类;
从所述反射处理类中获取所述Java类的方法的索引值;
将所述反射处理类和所述索引值存入缓存,所述反射处理类和所述索引值通过所述缓存与所述Java类绑定;
基于所述缓存中的反射处理类和所述索引值,反射调用所述Java类的方法。
CN201710236593.5A 2017-04-12 2017-04-12 Java反射实现方法、装置和系统 Pending CN108920179A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710236593.5A CN108920179A (zh) 2017-04-12 2017-04-12 Java反射实现方法、装置和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710236593.5A CN108920179A (zh) 2017-04-12 2017-04-12 Java反射实现方法、装置和系统

Publications (1)

Publication Number Publication Date
CN108920179A true CN108920179A (zh) 2018-11-30

Family

ID=64402543

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710236593.5A Pending CN108920179A (zh) 2017-04-12 2017-04-12 Java反射实现方法、装置和系统

Country Status (1)

Country Link
CN (1) CN108920179A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110764748A (zh) * 2019-10-23 2020-02-07 北京字节跳动网络技术有限公司 代码调用方法、装置、终端及存储介质
CN111625432A (zh) * 2019-02-28 2020-09-04 北京字节跳动网络技术有限公司 页面加载耗时确定方法、装置和计算机可读存储介质
CN113779078A (zh) * 2020-11-17 2021-12-10 北京沃东天骏信息技术有限公司 一种缓存数据的获取方法和装置
CN114996128A (zh) * 2022-05-19 2022-09-02 青矩技术股份有限公司 基于asm框架的脚本处理方法、装置、设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105260193A (zh) * 2015-11-03 2016-01-20 国云科技股份有限公司 一种大型软件自愈合框架及愈合方法
CN105335156A (zh) * 2015-10-22 2016-02-17 福建星网锐捷通讯股份有限公司 一种java对象序列化的方法以及系统
CN106502668A (zh) * 2016-10-20 2017-03-15 武汉斗鱼网络科技有限公司 一种实现Android JNI反射的接口封装方法及系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105335156A (zh) * 2015-10-22 2016-02-17 福建星网锐捷通讯股份有限公司 一种java对象序列化的方法以及系统
CN105260193A (zh) * 2015-11-03 2016-01-20 国云科技股份有限公司 一种大型软件自愈合框架及愈合方法
CN106502668A (zh) * 2016-10-20 2017-03-15 武汉斗鱼网络科技有限公司 一种实现Android JNI反射的接口封装方法及系统

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
HYEE: "ReflectASM", 《HTTPS://GITHUB.COM/HYEE/REFLECTASM/TREE/X1.2#README》 *
OKIDOGREEN: "Java 下高效的反射工具包 ReflectASM 使用例解", 《HTTPS://BLOG.CSDN.NET/Z69183787/ARTICLE/DETAILS/51657818?UTM_SOURCE=BLOGXGWZ3》 *
OKIDOGREEN: "ReflectASM,高性能的反射", 《HTTPS://BLOG.CSDN.NET/Z69183787/ARTICLE/DETAILS/51657771?LOCATIONNUM=14&FPS=1》 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111625432A (zh) * 2019-02-28 2020-09-04 北京字节跳动网络技术有限公司 页面加载耗时确定方法、装置和计算机可读存储介质
CN111625432B (zh) * 2019-02-28 2023-03-28 北京字节跳动网络技术有限公司 页面加载耗时确定方法、装置和计算机可读存储介质
CN110764748A (zh) * 2019-10-23 2020-02-07 北京字节跳动网络技术有限公司 代码调用方法、装置、终端及存储介质
CN113779078A (zh) * 2020-11-17 2021-12-10 北京沃东天骏信息技术有限公司 一种缓存数据的获取方法和装置
CN114996128A (zh) * 2022-05-19 2022-09-02 青矩技术股份有限公司 基于asm框架的脚本处理方法、装置、设备及存储介质
CN114996128B (zh) * 2022-05-19 2023-03-14 青矩技术股份有限公司 基于asm框架的脚本处理方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
CN108920179A (zh) Java反射实现方法、装置和系统
CN111061643B (zh) Sdk集群的兼容性检测方法、装置、电子设备及存储介质
CN108304175B (zh) 代码文件隔离打包方法及装置
CN112394942B (zh) 基于云计算的分布式软件开发编译方法及软件开发平台
CN110262783B (zh) 一种接口生成方法、装置及终端设备
CN110069259B (zh) 基于idl文件的解析方法、装置、电子设备和存储介质
CN107832059A (zh) 一种基于Makefile的代码静态分析方法和装置
CN112732321B (zh) 一种固件修改方法、装置、计算机可读存储介质和设备
CN113312108A (zh) Swift报文的校验方法、装置、电子设备及存储介质
CN111427583A (zh) 组件的编译方法、装置和电子设备及计算机可读存储介质
CN114327477A (zh) 智能合约执行方法、装置、电子装置和存储介质
CN110990001A (zh) Ivr流程执行方法及装置
CN114610640A (zh) 一种面向物联网可信执行环境的模糊测试方法和系统
CN112882732A (zh) 一种软件开发工具包sdk中功能代码的更新方法和装置
US10642714B2 (en) Mapping dynamic analysis data to source code
CN111045746A (zh) 代码扩展方法和框架
CN117873483A (zh) 一种编译智能合约的方法、装置、电子设备和存储介质
CN117008920A (zh) 引擎系统、请求处理方法、装置、计算机设备及存储介质
CN111158665B (zh) 代码生成方法及装置、电子设备和存储介质
CN110188071B (zh) 数据处理方法、装置、电子设备和计算机可读介质
US9021426B2 (en) Streamlining hardware initialization code
US10146529B2 (en) Monitoring rules declaration and automatic configuration of the monitoring rules
CN112379885B (zh) 小程序编译方法、装置、设备及可读存储介质
CN109408063B (zh) 基于虚拟机的指令插桩方法及装置
CN111273940B (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
RJ01 Rejection of invention patent application after publication

Application publication date: 20181130

RJ01 Rejection of invention patent application after publication