JVM(一):类加载与类加载机制(双亲委派等)

JVM(一):类加载与类加载机制(双亲委派等)

首先看jvm的整体结构

在这里插入图片描述

类加载器的作用

将.class文件中描述类的数据加载到内存,并且对数据进行校验、转换、解析和初始化。

类加载的三个步骤

在这里插入图片描述

加载

加载指的是将类的class文件读入到内存,并为之创建一个java.lang.Class对象。

java有两种对象:实例对象和Class对象。每个类的运行时的类型信息就是用Class对象表示的。它包含了与类有关的信息。其实我们的实例对象就通过Class对象来创建的。Java使用Class对象执行其RTTI(运行时类型识别,Run-Time Type Identification),多态是基于RTTI实现的

链接

链接又分为三步:校验、准备、解析

  • 校验:为保证安全对加载的信息进行校验。

  • 准备:为类变量(static变量)分配内存并设置初始值(对final static变量赋值在编译期完成,对实例变量分配是在对象被实例化时)。

  • 解析:将常量池内符号引用转换为直接引用

    符号引用:符号引用是以一组符号来描述所引用的目标,符号可以是任何的字面形式的字面量,只要不会出现冲突能够定位到就行。布局和内存无关。直接引用:是指向目标的指针,偏移量或者能够直接定位的句柄。该引用是和内存中的布局有关的,并且一定加载进来的。

初始化

执行clinit()方法,为static变量赋予正确的值,例如static int a=10,在加载阶段a=0,初始化后a=10。

类加载器分类

在这里插入图片描述

BootstrapClassLoader加载核心类(java、javax。。)是用c/c++实现的

ExtensionClassLoader lib/ext或者由java.ext.dirs系统属性指定的目录中的JAR包的类。由Java语言实现,父加载器是null。

SystemClassLoader程序写的类都是靠它加载的。

它们是上下级关系。

而自定义类加载去是可以“破坏”双亲委派机制的。

双亲委派机制

目的是为了保证安全!

在这里插入图片描述

当一个类加载器收到加载类请求时首先它要把这个请求交给上级类加载器!!!一直到最顶级,如果这个类最顶级可以加载那就加载,加载不了返回给下级

优势

避免重复加载类

保证安全,防止核心jar被篡改

沙箱机制

对核心api保护,对于自定义的核心api,比如java.lang.*不允许加载或者加载的仍是核心api,可以理解为将自定义的会破坏双亲委派机制的类隔离。

类加载的机制

用时加载

参考

Java中Class对象详解

jvm整体架构图文详解

jvm之java类加载机制和类加载器(ClassLoader)的详解

Java类加载器–手写一个String类能否被类加载器加载?

深入理解Java虚拟机第三版第7章

视频:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值