类加载器ClassLoader

类加载器子系统作用

  • 类加载器子系统负责从文件系统或者网络中加载class文件的加载,至于是否运行是由执行引擎决定的。
  • 加载的类的信息存在方法区中,还有常量池

类的加载过程

  • 加载:通过一个类的全类名获取此类的二进制字节流,在方法区存放该字节流代表的静态存储结构,然后生成一个Class对象,作为方法区各种数据的访问入口
  • 链接
  1. 验证:保证字节码的合法性
  2. 准备:为类变量分配内存,并赋初始值,注意不包含final修饰的static,因为final在编译的时候就分配了,准备阶段会显式初始化,不会为实例变量分配初始化
  3. 解析:将常量池的符号引用转变为直接引用的过程
  • 初始化:初始化就是执行clinit方法的过程,此方法不需要定义,是javac编译器自动收集类中的所有类变量的赋值动作和静态代码块的语句合并而来,如果没有这些操作则不会有该方法。

类加载器分类

  • 引导类加载器(bootstrap classloader)是用c/c++实现的,用来加载java的核心类库 jre/lib/rt.jar 加载扩展类加载器和系统类加载器 只能加载java,javax,sun开头的类
  • 扩展类加载器(extend classloader)加载jre/lib/ext下的包,java写的,由launcher实现,如果用户自己的jar放在此目录下,也会加载
  • 系统类加载器(app classloader)java写的,有sun.misc.launcher实现,负责加载环境变量或系统属性java.class.path指定路径下的类,程序中的默认加载器,一般来说,java的类都是由该加载器加载,可以通过classloader.getsystemclasslo方法获取到该加载器
  • 为什么要有自定义类加载器呢:1.隔离加载类 2.修改类加载的方式 3. 扩展加载源 4. 防止源码泄漏 继承classloader

双亲委派机制

  • 如果一个类需要加载,他并不会直接加载,而是委托给父类的加载器,如果父类的加载器还存在父类,则继续委托,知道最终层的启动类加载器,如果父类加载器可以加载,就会加载,否则子类加载器才会尝试加载,这就是双亲委派机制
  • 为什么?1. 避免重复加载 2.保护程序安全,防止核心api被篡改

沙箱安全机制

  • 防止恶意代码污染java源代码,沙箱,其实就是限制环境,比如我定义了一个类名为String所在包为java.lang,因为这个类本来是属于jdk的,如果没有沙箱安全机制的话,这个类将会污染到我所有的String,但是由于沙箱安全机制,所以就委托顶层的bootstrap加载器查找这个类,如果没有的话就委托extsion,extsion没有就到aapclassloader,但是由于String就是jdk的源代码,所以在bootstrap那里就加载到了,先找到先使用,所以就使用bootstrap里面的String,后面的一概不能使用,这就保证了不被恶意代码污染,限制了string类是由bootstrap加载

## 类加载器ClassLoader相关推荐

  1. Java虚拟机学习 - 类加载器(ClassLoader)

    类加载器 类加载器(ClassLoader)用来加载 class字节码到 Java 虚拟机中.一般来说,Java 虚拟机使用 Java 类的方式如下:Java 源文件在经过 Javac之后就被转换成 ...

  2. 【Android 逆向】类加载器 ClassLoader ( 使用 DexClassLoader 动态加载字节码文件 | 拷贝 DEX 文件到内置存储 | 加载并执行 DEX 字节码文件 )

    文章目录 一.拷贝 Assets 目录下的 classes.dex 字节码文件到内置存储区 二.加载 DEX 文件并执行其中的方法 三.MainActivity 及执行结果 四.博客资源 一.拷贝 A ...

  3. 【Android 逆向】类加载器 ClassLoader ( Android 的八种类加载器 | ClassLoader | BaseDexClassLoader | DexClassLoader )

    文章目录 一.Android 类加载器 1.ClassLoader 抽象类 2.BootClassLoader 3.BaseDexClassLoader 4.PathClassLoader 5.Dex ...

  4. 【Android 逆向】类加载器 ClassLoader ( 启动类加载器 | 扩展类加载器 | 应用类加载器 | 类加载的双亲委托机制 )

    文章目录 一.类加载器 二.类加载的双亲委托机制 一.类加载器 Java 虚拟机 ClassLoader 类加载器 : Bootstrap ClassLoader : 启动类加载器 , 该 加载器由 ...

  5. java类加载器_类加载器ClassLoader

    上篇文章说到,Class类可以通过一个类的全限定名去加载类,那么底层是如何去加载的呢?这就是我们今天要聊的类加载器ClassLoader,其可以通过一个类的全限定名来获取描述此类的二进制字节流,也即是 ...

  6. JVM之类加载器ClassLoader

    JVM之类加载器ClassLoader 本文目录 JVM简介 类加载器解析 1. JVM简介 ①. JVM是运行在操作系统之上的,它与硬件没有直接的交互 ②. JVM体系结构概览 注: 2. 类装载器 ...

  7. 类加载器ClassLoader的角色

    类加载器ClassLoader的角色

  8. Java 程序执行过程的内存流程图(结合类加载器 ClassLoader 讲解)

    Student s = new Student(); s.play(); Student s2 = new Student(); 以上代码的执行流程如下: JVM 作为操作系统的一个迚程在系统中执行, ...

  9. 类加载器ClassLoader

    类加载器ClassLoader 基本介绍 与普通程序不同的是.Java程序(class文件)并不是本地的可执行程序.当运行Java程序时,首先运行JVM(Java虚拟机),然后再把Java class ...

  10. java的类加载器ClassLoader

    类在执行之前会执行三个步骤:加载 ->   连接  -> 初始化 1.java中类的加载 java 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方 ...

最新文章

  1. 零知识证明实践教程,第一部分
  2. 下载离线插件包 谷歌浏览器的方法
  3. svn: Can't find a temporary directory 问题解决
  4. SAP UI5 Web Component里如何自定义CSS style
  5. 命令行参数怎么输入_太好用了!谷歌开源的命令行接口工具fire
  6. 股票开盘的最大成交额-----一道不错的贪心算法题目
  7. [结构力学] 几何构造分析的技巧
  8. Kali Linux 秘籍 第六章 漏洞利用
  9. 请给 SpringBoot 多一些内存
  10. tail Linux 指令
  11. tensorflow2.0内存溢出解决办法
  12. 软件项目管理期末复习(看这一篇就够了)
  13. web逻辑思维题目_学编程必看:10道逻辑思维测试题(附答案)
  14. 如何用计算机基础知识提问,职业学校《计算机应用基础》课的提问策略
  15. PASCAL VOC 数据集详解与MS COCO组合方式
  16. 网站备案信息查询,网站备案号在哪里查询
  17. 导出DNS服务器上的记录
  18. 加密世界“众生相”:僧侣、信徒和骗子
  19. PDF预览完整解决方案及各种兼容(VUE版)
  20. Mac电脑如何给Finder文件夹更换背景?

热门文章

  1. chrome清除缓存、不使用缓存而刷新快捷键
  2. python list删除元素是要注意的坑点
  3. 工商银行分布式服务C10K场景的解决方案
  4. 领域建模——四色建模
  5. 偶像失踪了,牛人去世了
  6. Java编程高级教程,这些数据库索引的高频面试题,你都掌握了多少
  7. python弹幕点歌_直播续章:用树莓派搭建B站直播“点歌台”
  8. linux curl证书错误,curl服务器证书验证失败
  9. 高通QMI IDL格式介绍,方便增加QMI message
  10. VMware安装Kali操作系统(全网最详细不接受任何反驳)