1、Java反射原理
Java反射原理是基于Java虚拟机的类加载机制实现。类加载由ClassLoader完成,在运行时动态获取类的信息并对其操作的能力。Java反射API提供了运行时获取类、方法、字段的功能,还可以设置字段等。
2、Java类加载机制
2.1、类加载机制
类加载机制是指在Java程序运行时,将类的字节码加载到内存中,并转换为类的对象的过程,类加载机制是Java虚拟机(JVM)的重要组成部分,它负责加载、链接和初始化类。
包括以下三个阶段:
(1)加载:JVM通过类加载器将类的字节码文件加载到内存中
(2)链接:JVM会对加载的类进行验证、准备和解析三个步骤
(3)初始化:JVM会执行类的初始化代码,包括执行静态变量的赋值和静态代码块的执行等。类初始化时会按照父类-子类的层次逐个初始化,且在整个过程中会进行线程安全的控制。
2.2、类加载双亲委派模型
Java类加载器采用了双亲委派模型,这是一种用于组织类加载器之间关系的机制。当一个类加载器收到加载类的请求时,它会先将这个请求委托给它的父类加载器去完成。只有当父类加载器无法加载该类时,子类加载器才会尝试自己去加载。
优点:
可以保证Java核心库的类不会被自定义类加载器所覆盖,同时也可以避免重复加载。这种机制保证了类的统一性和一致性。
2.3、3种类加载器
(1)Bootstrap ClassLoader:它是虚拟机的内置类加载器,负责加载JRE核心库,它是由C++编写的,是虚拟机的一部分,不继承自jClassLoader。
(2)Extension ClassLoader:它负责加载JRE扩展目录中的jar包。
(3)Application ClassLoader:也称为系统类加载器,它负责加载应用程序classpath目录下的类。
当一个类需要被加载时,首先会由Application ClassLoader来尝试加载,如果加载失败,会继续由Extension ClassLoader来尝试加载,最终如果仍未加载成功,则由Bootstrap ClassLoader来尝试加载。如果Bootstrap ClassLoader也无法加载该类,会抛出ClassNotFoundException。
3、JVM
3.1、什么是JVM
JVM是Java虚拟机的缩写,它是Java程序运行的核心组件。JVM的主要作用是将Java源代码编译成字节码,然后在不同的操作系统上执行这些字节码。
总之,JVM的作用主要包括将Java程序编译成字节码、提供内存管理和垃圾回收、实现线程管理和安全控制,并且实现了Java的跨平台特性。
3.2、JVM组成部分
(1) 类加载器:负责将字节码文件加载到内存中,并生成对应的Class对象。
(2) 运行时数据区域:包括方法区、堆、栈、程序计数器等,用来存储程序运行时所需的数据。
(3) 执行引擎:负责执行字节码文件,包括解释器和即时编译器等。
(4)本地方法接口:用于调用本地方法库的接口。
(5)垃圾回收器:负责进行垃圾回收,释放不再使用的对象所占用的内存空间。
(6)Java本地接口:提供了Java调用本地代码(如C、C++)的接口。
3.3、JMM(Java内存模型)
JMM是一种规范,用于定义Java程序中的内存访问和多线程并发操作的行为,JMM规定了多线程程序中共享变量的访问方式,以及内存操作的可见性和顺序性等规则,确保多线程程序能够正确、可靠地运行。
主要作用:
(1)定义共享变量的访问规则
JMM规定了多线程程序中对共享变量进行读写操作的规则,包括对变量的原子性、可见性和有序性等要求
(2) 确保线程间通信的正确性
JMM规定了在多线程程序中,通过volatile关键字、synchronized关键字、Lock等机制来确保线程间通信的正确性。
(3)消除编译器和处理器的优化影响