1、类加载子系统中有哪些常用类加载器?

1、BootStrapClassLoader(负责加载基础类库中的类,例如Object,String....)

2、ExtClassLoader(负责加载扩展类库中的类 ext/...)

3、AppClassLoader(负责加载classpath路径下我们自己定义的类)

4、自定义ClassLoader(可以指定自己要加载的路径或加载方式)

2、如何获取常用的类加载器?

1.AppClassLoader (应用加载器,默认加载ClassPath路径中的类-大部分是我们自己写的类)
ClassLoader appClassLoader = ClassLoader.getSystemClassLoader();
2.ExtClassLoader(扩展类加载器,负责加载ext包中的类)
ClassLoader extClassLoader = appClassLoader.getParent();
3.BootStrapClassLoader(根类加载器,负责加载基础类库中的类-rt.jar)
ClassLoader bootStrapClassLoader=extClassLoader.getParent();
String类的类加载器是什么?
ClassLoader classLoader = String.class.getClassLoader();
获取当类ClassLoaderTests的类加载器
classLoader = ClassLoaderTest.class.getClassLoader();

3、什么是双亲委派类加载模型?

双亲委派可以简单的理解为依次向上询问类是否已经加载过,假如类加载过则无需再次加载。假设没有加载过,则从顶层(BootStrapClassLoader)向下依次尝试是否可以加载此类,假设可以则对类进行加载。

4、为什么使用双亲委派加载模型?

通过这种机制可以更好的保证一个类在内存中只被加载一次,例如:java.lang.Object这个基础类库中的类不需要反复加载

5、双亲委派加载模型有什么弊端吗?

假如不同项目部署到了同一个web服务中,但是不同项目中同包名、类名相同的类(内容不同),这样可能会导致一个类不会被加载。假如要想解决这个问题可以自己定义类加载规则,但是你无论怎么定义,建议基础类库还是要使用双亲委派方式进行加载。

6、你能说说类加载的基本步骤吗?

1、查找类(例如从指定路径找到包名+类名对应的文件)

2、读取类(通过字节输入流对类进行读取)

3、校验类(对内存中读取到的类信息进行校验,默认初始化等)

4、创建字节码对象(java.lang.Class)

7、什么情况下会触发类的加载?

1、直接通过类加载器(ClassLoader)的loadClass去加载

2、基于Class.forName(“包名.类名”)方式去加载

3、直接访问类的属性,方法,构建类的对象

8、类加载时一定会执行静态代码块吗?

不一定,静态代码块是否执行取决于类加载时是否执行了类的初始化。

9、如何理解类的主动加载和被动加载?

1、主动加载:访问本类属性或方法时触发的类的加载

2、被动加载:通过本类访问对应的父类属性、方法时,本类属于被动加载,父类属于主动加载。被动加载的类不会进行初始化

10、什么场景下需要自己定义类加载器?

1、指定加载源头(例如从数据库中读取类)

2、保证类的安全(例如可以在类编译时加密,加载时解密)

3、打破双亲委派模型(对自己写的类不想使用双亲委派机制了)

11、内存中的一个类的字节码对象(Class)可以有多个吗?

可以,即使是同一个类,但是他的类加载器不同,生成的字节码对象也可以不同。

JVM中类加载子系统的更多相关文章

  1. JVM解毒——类加载子系统

    带着问题,尤其是面试问题的学习才是最高效的.加油,奥利给! 点赞+收藏 就学会系列,文章收录在 GitHub JavaEgg ,N线互联网开发必备技能兵器谱 直击面试 看你简历写得熟悉JVM,那你说说 ...

  2. 再谈JVM中类加载

    前言 由于本人参加面试,但是JVM这块回答的十分不好,问了面试官,面试官说我基础不行!我真的不行,所以看过的不一定能理解,感觉之前就是糊弄任务,然后这次等实训结束,啥都干完了,我就记录下,深入了解下面 ...

  3. JVM中类加载器的父委托机制

    类加载器 类加载器用来把类加载到Java虚拟机中. 类加载器的类型 有两种类型的类加载器: 1.JVM自带的加载器: 根类加载器(Bootstrap) 扩展类加载器(Extension) 系统类加载器 ...

  4. 对Java JVM中类加载几点解释

    1.用到类的时候,类加载到方法区,同时方法区会存放static的内容(包括静态方法和静态变量),随类的加载而加载 2当new的时候,会在堆中创建一个对象,在其中会开辟其中的实例变量内存并初始化,堆中变 ...

  5. jvm (一)jvm结构 & 类加载 & 双亲委托模型

    参考文档: jvm内幕-java虚拟机详解:http://www.importnew.com/17770.html 常量池:https://www.jianshu.com/p/c7f47de2ee80 ...

  6. JVM第二篇 类加载子系统

    1.内存结构概述 简图 ​ 详细 ​ ​ ​ 2.类加载器与类加载的过程 ​ 类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识[CA FE BA BY ...

  7. 【JVM之内存与垃圾回收篇】类加载子系统

    类加载子系统 概述 完整图如下: 如果自己想手写一个 Java 虚拟机的话,主要考虑哪些结构呢? 类加载器 执行引擎 类加载器子系统作用 类加载器子系统负责从文件系统或者网络中加载 Class 文件, ...

  8. Java JVM——2.类加载器子系统

    概述 类加载器子系统在Java JVM中的位置 类加载器子系统的具体实现 类加载器子系统的作用 ① 负责从文件系统或者网络中加载.class文件,Class 文件在文件开头有特定的文件标识. ② Cl ...

  9. JVM笔记 -- 来,教你类加载子系统

    类加载子系统 类文件首先需要经过类加载子系统,进行加载,进类信息等加载到运行时数据区,生成Klass的实例. 在类加载子系统中有以下3个阶段操作(广义上的加载): 加载阶段 Bootstrap Cla ...

  10. JVM上篇:类加载子系统

    JVM类加载 目录 JVM类加载 1.内存结构概述 2.类加载子系统概述 3.类的加载过程 2.1加载 2.2Linking 2.2.1验证(Verify) 2.2.2准备(Prepare) 2.2. ...

随机推荐

  1. Os-hackNos-3

    Os-hackNos-3 目录 Os-hackNos-3 1 信息收集 1.1 端口扫描 1.2 后台目录扫描 1.2.1 目录分析 2 爆破后台登录页面 2.1 BP爆破 2.2 hydra爆破 3 ...

  2. Socket.io + Knex 实现私聊聊天室

    前言 本文只介绍实现的核心代码,目的是记录和分享知识.若感兴趣可以往下看,在文章最后贴上了仓库地址.前端使用 Vite + Vue3:后端使用 Knex + Express. Room 的概念 私密 ...

  3. openwrt 网络检测脚本

    背景 openwrt 有些固件不太稳定,会时不时的断网,导致家里无法上网,遇到这种情况只能手动重启openwrt设备,该操作不方便,作为一个极客爱好者,那肯定是要实现自动化处理的了,写一个简单的脚本加 ...

  4. fabric学习笔记8

    fabric学习笔记8 20201303张奕博 2023.1.19 具体结构: Wallet中的X.509数字证书将组织和持有者联系起来,使得持有者能够有权限连接到网络,不同的持有者身份拥有不同的权限 ...

  5. 利用socket以及多线程、文件流等方法实现通信,互发文本信息以及文件

    服务器端: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data ...

  6. ubuntu18 电脑重启后登录后无法进入桌面

    ubuntu18 电脑重启后登录后无法进入桌面 应该是ubuntu桌面管理器gdm3和nvidia驱动冲突导致的 解决办法: 首先卸载已有的nvidia驱动 注意:在下载完驱动后,此时电脑没有驱动文件 ...

  7. Java面向对象之封装详解

    封装详解 封装 该露的露,该藏的藏 1.我们程序设计要追求"高内聚.低耦合".高内聚:类的内部数据操作细节自己完成,不允许外部干涉:低耦合:仅暴露少量的方法给外部使用. 封装(数据 ...

  8. 7.Object

    Object类 超类.基类,所以类的直接或间接父类,位于继承树的最顶层 任何类,如没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承 Object类中所定义的方法,是所 ...

  9. 使用JIMO ActionOne HongHu 及其他MR VR眼镜,将真实场景和游戏内场景混合渲染

    1. 在VR相机Head内创建一个 Camera 和两个RawImage(Camera 的参数和VRCamera的参数一致, 两个RawImage尺寸一致, 要把VRCamera的相机遮挡住 ) 2. ...

  10. Win10系统将bat文件注册成服务

    代码语法: sc create ServiceName binPath= 路径 start= auto 示例语句: sc create Tomcat binPath= F:/tomcat/bin/st ...