Java 反射机制(一)

122 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

Java 官方的介绍

对于反射,Java在官方文档中有介绍,具体链接是docs.oracle.com/javase/8/do…

下面的三张图有大概介绍反射的流程。

image.png

image.png

image.png

  • 反射调用会进行一系列的安全性校验
  • 反射需要调用一系列的native方法来实现
  • 寻找Class字节码的过程,比如通过ClassName找到对应的字 节码Class,然后进行加载、解析,也会比较慢,而new的方 式则无需寻找,因为在Linking的解析阶段已经将符号引用 转为了直接引用
  • 入参校验

类的加载机制

image.png

如下图所示: 类装载的三部曲,包括加载、连接、初始化 加载

加载.class文件,主要有以下几个途径:

  1. 从本地的文件系统中加载 • 通过网络下载
  2. 从zip.jar包加载.class文件
  3. 从存储中间件中加载(数据库、缓存…)
  4. 在JVM运行期间通过动态字节码重组的方式 (ASM)

image.png

连接
连接就是将已经读入到内存的类的二进制数据合并到JVM 的运行时环境中,连接过程主要有三个阶段,包括:

  • 类的验证,对类的文件进行检查(版本号、模数)以保 证.class符合JVM规范
  • 类的准备,分配常量池空间,解析常量池,静态变量的分 配,但不会初始化,只会给默认值
  • 类的解析,解析父类,解析接口,解析Filed,解析方法列 表(包含栈、字节码表、异常表、局部变量表、运行指 针),把类二进制的符号引用转变为直接引用