深入理解Java

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)消除编译器和处理器的优化影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值