JVM_02 类加载器子系统
①. 类的加载(掌握)
简述类的加载过程(掌握)
当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过类的加载、类的链接、类的初始化这三个步骤来对类进行初始化。 如果不出现意外,JVM将会连续完成这三个步骤,所以有时也把这三个步骤统称为类加载或者初始化
什么是类的加载(Loading)
类的加载指的是将类的.class文件中的二进制数据读取到内存中,存放在运行时数据区的方法区中,并创建一个大的Java.lang.Class对象,用来封装方法区内的数据结构链接(Linking)
①. 验证:确保Class文件的字节流中包含信息符合当前虚拟机要求,保证被加载类的正确性
②. 准备:为类变量分配内存并且设置该类变量的默认初始化值 不会为实例变量分配初始化
③. 解析: (将常量池中的符号引号转换为直接引用的过程)
解释什么是符号引号和直接引用
教室里有个空的位子没坐人,座位上边牌子写着小明的座位(符号引用),后来小明进来坐下去掉牌子(符号引用换成直接引用)
- 初始化(Initialization)
①. 为类变量赋予正确的初始化值
②. 初始化阶段就是执行类构造器方法< clinit >()的过程
③. 类的初始化阶段就是执行类的构造方法(clinit)的过程 (构造器方法中指令按语句在源文件中出现的顺序执行)
④. < clinit > 不同于类的构造器,有静态变量或static{ } 代码块 那么字节码文件就有这个方法
⑤. 若该类具有父类,Jvm会保证子类的< clinit >() 执行前,父类的< clinit >() 已经执行完成
②. 类加载器的介绍
①. JVM支持两种类型的类加载器,分别为引导类加载器(Bootstrap
ClassLoader)和自定义类加载器(User-Defined ClassLoader)②.从概念上来讲,自定义类加载器一般指的是程序中由开发人员自定义的一类类加载器,但是Java虚拟机规范并没有这么定义,而是将所有派生于抽象类ClassLoader的类加载器都划分为自定义类加载器
③. sum.misc.Launcher:它是一个java虚拟机的入口应用
④. 无论类加载器的类型如何划分,在程序中我们常见的类加载器始终只有3个,如下所示:
- 启动类加载器
①. 这个类加载使用C/C++语言实现的,嵌套在JVM内部
②.它用来加载Java的核心类库(JAVA_HOME/jre/lib/rt.jar、resource.jar或sum.boot.class.path路径下的内容),用于提供JVM自身需要的类
③. 并不继承自java.lang.ClassLoader,没有父加载器
④. 加载扩展类和应用程序类加载器,并指定为他们的父类加载器
⑤. 由于安全考虑,Bootstrap启动类加载器只加载包名为java、javax、sun等开头的类
- 扩展类加载器(Extension ClassLoader)
①. Java语言编写,由sum.music.Launcher$ExtClassLoader实现
②. 派生于ClassLoader类
③.父类加载器为启动类加载器
④.从java.ext.dirs系统属性所指定的目录中加载类库,或从JDK的安装目录的jre/lib/ext子目录(扩展目录)下加载类库。如果用户创建的JAR放在此目录下,也贵自动由扩展类加载器加载
- 应用程序类加载器(系统类加载器)
①. java语言编写,由sum.misc.Launcher$AppClassLoader实现
②. 派生于ClassLoader类
③. 父类加载器为扩展类加载器
④. 它负责加载环境变量classpath或系统属性java.class.path指定路径下的类库
⑤.
该类加载是程序中默认的类加载器,一般来说
,Java应用的类都是由它来完成加载⑥. 通过ClassLoader#getSystemClassLoader()方法可以获取到该类加载器
- 用户自定义类加载器(了解)
①. 在Java的日常应用程序开发中,类的加载几乎是由上述3种类加载器相互配合执行的,在必要时,我们换可以自定义类加载器,来定制类的加载方式
②. 如果获取ClassLoader
- 双亲委派机制 (掌握)
①. 工作原理
②. 优势:
沙箱安全机制 (掌握)
如何判断两个Class对象是否相同
①. 相同必须的两个条件如下:
②. JVM必须知道一个类型是由启动加载器加载还是用户类加载器加载的。如果一个类型是又用户类加载器加载的,那么JVM会将这个类加载器的一个引用作为类型信息的一部分保存在方法区中。
- 主动使用和被动使用
JVM_02 类加载器子系统相关推荐
- JVM专题(2)-类加载器子系统
目前博主个人博客已经搭建发布,后期相关文章也会发布在上面,大家有兴趣可以去上面学习,点击即可前往文青乐园 1.内存结构概述 假设我们想自己手写一个Java虚拟机的话,必须考虑以下结构: 类加载器 执行 ...
- 类加载器子系统的作用
类加载器子系统的作用
- JVM 学习二:类加载器子系统
1 类加载器子系统的作用 类加载器子系统负责从文件系统或者网络中加载 Class 文件,Class 文件在文件开关有特定的文件标识 ClassLoader 只负责 Class 文件的加载,至于它是否可 ...
- JVM00_面试官对类加载器子系统、运行时数据区、内存分布、执行引擎的灵虚拷问,你能坚持到第几问?
因为热爱所以坚持,因为热爱所以等待.熬过漫长无戏可演的日子,终于换来了人生的春天.他逐渐被人熟知,被人喜爱 三年前,在苏州园区某个国企面试,第一道题目便是:JVM是什么吗?然后就是拿着笔试题目被面试官 ...
- 02 类加载器子系统
1. 内存结构概述 简图 详细图(英文) 详细图(中文) 如果自己手写一个Java虚拟机的话,主要考虑哪些结构呢? 类加载器和执行引擎 2. 类加载器与类的加载过程 2.1 类加载器子系统的作用 类加 ...
- jvm运行时类加载机制_JVM体系结构:JVM类加载器和运行时数据区
jvm运行时类加载机制 各位读者好! 在JVM系列的上一篇文章中,开发人员了解了Java虚拟机(JVM)及其体系结构. 本教程将帮助开发人员正确回答以下主题的问题: ClassLoader子系统 运行 ...
- JVM体系结构:JVM类加载器和运行时数据区
各位读者好! 在JVM系列的上一篇文章中,开发人员了解了Java虚拟机(JVM)及其体系结构. 本教程将帮助开发人员正确回答以下主题的问题: ClassLoader子系统 运行时数据区 1.简介 在继 ...
- JVM学习笔记【2】 类加载执行子系统
1.JVM的简图 简要版 中文的详细版(宋文康老师教学图) 注意:方法区只有HotSpot虚拟机有,J9,JRockit都没有 今天主要的是学习类加载执行子系统 2.类加载执行子系统的作用 类加载器子 ...
- 类加载器及其加载过程
一.内存结构概述 内存结构简图: 内存结构详细图: 中文: 英文: 二.类加载器与加载过程 类加载器子系统作用 图解: 描述: 1.类加载器子系统负责从文件系统或者网络中加载class文件,class ...
最新文章
- 学python是什么专业-小白学python是自学好,还是专业老师培训好?
- 小程序开发学习(1)---app.json详解篇
- oracle 表 视图 存储过程 序列 job
- 开拓新格局 共赢新 Power 2021浪潮商用机器新布局
- 剖析Caffe源码之Net类变量
- 关于nginx,你不可不知的几大特色功能
- 转 STL hash_map map
- 知己知彼:一篇来自前端同学对后端接口的吐槽!
- linux发邮件权限,Linux通过命令行发邮件的步骤
- SpringBoot工程中,如果不继承spring-boot-starter-parent ,还可以怎么做到的版本管理?
- jboss-remoting服务
- C4D快速入门教程——XPresso基本使用
- Chrome 自动播放m3u8
- 香港云服务器安全吗?
- 传送门骑士修改服务器数据,《传送门骑士》怎么刷资源 修改存档获取资源方法...
- 用styler更改样式后,解决数据框中数据无法保留四位小数
- 16S rDNA测序和宏基因组测序区别
- Maven分模块管理时com.xx.xx.service等找不到
- HEVC帧内预测参考像素检测获取和滤波
- 长沙“一江两岸”新网红,看铜官古镇的“文和游”
热门文章
- 可重入锁和不可重入锁
- [SQL] 查找数据库中含有某字段的所有表
- .NET C# 发送邮件内容嵌入图片
- 用.net4中的DynamicObject实现简单AOP
- C++ 方块游戏小更新
- 转载:matlab 字符串和变量名互换
- VTK序列图像的读取
- f2py支持在fortran语言中调用其他Fortran函数或C代码或Python代码
- LIBRARY_PATH和LD_LIBRARY_PATH环境变量的区别
- android listview 游标,Android Listview - 使用游标时无法选择多个项目