jvm相关,java类加载机制及双亲委派机制---笔记

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

类加载过程加载——链接——初始化——使用——卸载

类的加载详细过程
加载——验证——准备——解析——初始化——使用——卸载
1.加载【将硬盘中的classpath路径下的class文件以及jar包以及指定的class文件的class二进制字节流读取进来在内从重生成一个代表这个类的java.lang.class对象放入元空间metaspace此阶段可使用自定义类加载器来进行人工干预
2.验证【验证class文件的字节流文件是否符合《java虚拟机规范》保证虚拟机的安全】
3.准备【类变量赋初始值比如int赋值为0long为0L,boolean为false引用类型为null但是常量是在此准备阶段就赋正式的值静态变量和实例变量都只赋初始值此处要与类的初始化做区别
4.解析【把符号应用翻译为直接引用】
5.初始化【当new一个类的对象访问类的静态属性修改类的静态属性调用类的静态方法用反射API对类进行调用初始化当前类时当前类的父类也会被初始化父类先初始化在初始化当前类上述这些场景都会触发类的初始化】
6.使用【使用这个类】
7.卸载【触发卸载的条件比较苛刻一般不会卸载类卸载的情况有1.该类所有的实例都已被GC回收2加载该类的classLoader已被回收3.该类的java.lang.Class对象没有任何引用不能在任何地方通过反射访问这个类】
其中第234步合并称为链接所以类加载机制一般都称为加载——链接——初始化——使用——卸载
类的准备阶段,常量static final修饰赋实际值,其他属性都只赋初始值
类的初始化阶段时静态变量static修饰赋实际值执行静态代码块static{####业务逻辑代码####})
创建实例对象时执行构造方法执行普通代码块类的普通变量没有 static和final修饰的赋实际值

继承时父子类的初始化顺序
父类——静态变量
父类——静态代码块
子类——静态变量
子类——静态代码块
父类——普通变量
父类——普通代码块
父类——构造方法
子类—。。。。。

类加载机制

什么是类加载器

在类的加载阶段执行通过类的全限定名获取描述类的二进制字节流的这个动作的代码被称为类加载器ClassLoader

jvm有哪些类加载器

子JDK1.2开始java一直保持这三层类加载器结构这三层类加载器并不是继承关系
1.启动类加载器Bootstrap ClassloaderC++实现的虚拟机的一部分最顶级的类加载器,负责加载
<JAVA_HOME>\jre\lib\rt.jar,resources.jar.charsets.jar以及被-Xbootclasspath参数指定的路径中存放的类库
2.扩展类加载器(ExtClassLoader) Extension ClassLoader
负责加载<JAVA_HOME>\jre\lib\ext,被java.ext.dirs系统变量所指定的路径中的所有类库
3.应用程序类加载器(AppClassLoader) Application ClassLoader,系统的类加载器负责加载classpath下的class文件也是比较常用的类加载器一般我们用的依赖包都是被它加载
查看类的是被哪个加载器加载的
调用类名.class.getClassLoader()

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Java