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. OpenMediaVault5.6(OMV) 安装omv-extras - 2022.1.12

    openmediavault 5.6 安装 omv-extras 转载: csdn:https://blog.csdn.net/Yu1441/article/details/116140034 先ss ...

  2. PHP的25种框架

    本篇文章给大家分享的内容是25种PHP框架 -有着一定的参考价值,有需要的朋友可以参考一下. 世界流行框架汇总 在项目开发中,一些架构和代码都是重复的,为了避免重复劳动,于是各种各样的框架诞生了. 在 ...

  3. Vulhub 漏洞学习之:ActiveMQ

    Vulhub 漏洞学习之:ActiveMQ 目录 Vulhub 漏洞学习之:ActiveMQ 1 ActiveMQ反序列化漏洞(CVE-2015-5254): 1.1 漏洞利用过程 2 ActiveM ...

  4. Mbps 与 MBps

    bps 是速率单位,表示比特每秒(bit per second),单位也可以是 bit/s.1K = 103 bit/s:1M = 106 bit/s.Mbps 中的b不是字节 Byte,而是比特 b ...

  5. Vue mixin混入的介绍

    功能:可以把多个组件共用的配置提取成一个混入对象 使用方式: 1.第一步:定义混合,例如: 2.第二步:使用混合(全局混合和局部混合) (1)局部混合 mixins:['XXX'] (2)全局混合 V ...

  6. nginx反向代理hyperf

    location / {     #反向代理到 本地9501端口     proxy_pass http://127.0.0.1:9501;     proxy_redirect off;     p ...

  7. MySQL 8.0 新特性-原子DDL

    背景 MySQL 8.0 原子DDL 是一个复杂的过程,涉及比较多的模块,例如:MDL 锁,表定义缓存,行格式,Row Log,DDL Log,online 属性,表空间物理文件操作等.本文主要通过与 ...

  8. element ui 浏览器表单自动填充默认样式

    ::v-deep .el-input__inner {     -webkit-text-fill-color: #000000;     caret-color: #0a0a0a;     box- ...

  9. csp201503-1(矩阵逆时针九十度旋转)

    //矩阵变换的题,要找出两个矩阵各元素横纵坐标之间的关系 #include<bits/stdc++.h> using namespace std; int main() { int a[1 ...

  10. vue实现图片上传且实时预览

    <div class="up-img"> <div class="imgList"> <ul> <li v-for=& ...