深入类加载器-类加载器作用,类缓存、类加载器的层次结构、ClassLoader类介绍、代理模式之双亲委派机制
1、类加载器的作用
类加载器的作用是将class字节码文件加载到内存中,并将这些静态数据转化为方法区中的运行时数据结构,同时在堆中生成代表这个类的java.lang.Class对象,作为访问方法区中数据的入口。
2、类缓存
标准的Java SE类加载器可以按要求查找指定的类,但是一旦某个类被加载到指定的类加载器中,它将维持一段时间,不过,JVM垃圾回收机制可以回收这些Class对象,简单的说,类在被回收前,只被加载一次
3、类加载器的层次结构
*注意:
a、只有引导类加载器没有继承java.lang.ClassLoader
b、只有引导类加载器是用C++写的,其他的类加载都是用java写的
c、自定义类的加载器的父类是应用程序类加载器,应用程序类加载器的父类是拓展类类加载,拓展类类加载的父类是引导类加载器,引导类加载器没有父类
d、注意这里所说的父类并不是继承的关系,内部的采用的组合的方式实现的
————————————————————————————
1. 引导类加载器(bootstrap class loader)
作用:
1、加载Java的核心库(JAVA_HOME/jre/lib/rt.jar)或sun.boot.class.path路径下的内容
2、加载扩展类和应用程序类加载器,并指定他们的父类
3、它是由原生程序C++写的,并不继承java.lang.Classloader
通过程序获取sun.boot.class.path路径下的内容
@org.junit.Testpublic void test() {System.out.println(System.getProperty("sun.boot.class.path"));}
程序执行结果:
2、扩展类加载器(Extensions class loader)
1、用来加载java的扩展库(JAVA_HOME/jre/ext/*.jar)或java.ext.dirs路径下的内容,Java虚拟机会提供一个扩展库目录,该类加载器在这里查找并加载java类
2、由sun.misc.Launcher$ExtClassLoader实现
3、应用程序类加载器(application class loader)
1、根据Java应用的类路径来加载类,一般来说Java应用的类都是由它来加载的
2、由sun.misc.Launcher$AppClassLoader实现
4、自定义类加载器
1、开发人员可以通过继承java.lang.ClassLoader类来定义自己的类加载器已满足一些特殊的需求
4、ClassLoader类介绍
作用
加载字节码文件并生成对应的java.lang.Class对象
加载Java应用所需要的资源,如图像和配置文件
相关方法
方法 | 解释 |
---|---|
getParent() | 返回该类加载器的父类加载器 |
loadClass(String name) | 加载返回名称为name的java.lang.Class实例 |
findClass(String name) | 找到并返回名称为name的java.lang.Class实例 |
findLoadedClass(String name) | 查找并返回已经加载过的名称为name的java.lang.Class实例 |
defineClass(String name,byte[]b,int off,int len) | 方法为final不能被重写,通过byte字节数组生成并返回名称为name的java.lang.Class实例 |
*注意
- 上面方法参数中的name指定的是类的二进制名,需要注意的是内部类的表示,com.maple.example$Test表示内部类Test
5、代理机制之双亲委派机制
解释:
某个类加载执行类加载请求时,先将该请求交给父类,父类再交给父类的父类,知道最高级父类,到达最高级父类时,他会判断我能不能加载这个类,如果能,则加载成功返回,如果不能,则交给他的一级子类重复以上的操作,知道这个类最后被成功加载
作用:
保证了Java核心库的类型安全,这种机制也是java很重要的安全屏障
深入类加载器-类加载器作用,类缓存、类加载器的层次结构、ClassLoader类介绍、代理模式之双亲委派机制相关推荐
- 彻底弄懂类加载和JVM的双亲委派机制
类加载 类的生命周期会经历以下 7 个阶段: 加载阶段(Loading) 验证阶段(Verification) 准备阶段(Preparation) 解析阶段(Resolution) 初始化阶段(Ini ...
- java类加载过程(双亲委派机制)
类加载运行全过程 通过Java命令执行代码的大体流程如下: 其中loadClass的类加载过程有如下几步: 加载 >> 验证 >> 准备 >> 解析 >> ...
- 什么是双亲委派机制和其作用
什么是双亲委派机制和其作用 1.什么是类加载 通过javac将.java文件编译成.class字节码文件后,则需要将.class加载到JVM中运行,哪么是谁将.class加载到JVM的呢?那就是类加载 ...
- (二)JVM成神路之剖析Java类加载子系统、双亲委派机制及线程上下文类加载器
引言 上篇<初识Java虚拟机>文章中曾提及到:我们所编写的Java代码经过编译之后,会生成对应的class字节码文件,而在程序启动时会通过类加载子系统将这些字节码文件先装载进内存,然后再 ...
- JVM入门(位置、体系结构、类加载器、双亲委派机制、沙箱安全机制、Native、PC寄存器、方法区、堆(新生区{伊甸园区、幸存区}、养老区、永久区)、OOM、GC算法、JMM)
目录 一.JVM的位置 二.JVM的体系结构 三.类加载器 1.类加载器举例 2. JVM中提供了三层的ClassLoader 3. 双亲委派机制(重要) 3.1 工作原理 3.2.优点 四.沙箱安全 ...
- 深入JVM系列(三)之类加载、类加载器、双亲委派机制与常见问题
转载自 深入JVM系列(三)之类加载.类加载器.双亲委派机制与常见问题 一.概述 定义:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用 ...
- java 类加载 双亲委派_Java类加载器和双亲委派机制
前言 之前详细介绍了Java类的整个加载过程(类加载机制详解).虽然,篇幅较长,但是也不要被内容吓到了,其实每个阶段都可以用一句话来概括. 1)加载:查找并加载类的二进制字节流数据. 2)验证:保证被 ...
- 类加载机制、双亲委派机制深度解析以及如何自定义类加载器
文章目录 1.类加载运行的全过程 2. JVM类加载器的初始化 3.双亲委派机制 4.编写自定义类加载器 5.(Tomcat)如何打破双亲委派机制 当我们运行一个类的时候,首先要通过类加载机制把类加载 ...
- JAVA类加载器包括几种?它们之间的关系是怎么样的?双亲委派机制是什么意思?有什么好处?
JAVA类加载器包括几种? 引导类加载器 bootstrap class loader 启动类加载器主要加载的是JVM自身需要的类,这个类加载使用C++语言实现的,是虚拟机自身的一部分,它负责将 /l ...
最新文章
- ccombox获取选择的文本_PC端最好用的翻译软件,支持引擎切换、文本朗读
- Gradle 编译速度提升 70%!怎么做到的?
- 如何搞定putty乱码
- Qt 给应用程序添加图标
- 口述完SpringMVC执行流程,面试官就让同事回家等消息了
- 服务器网站链接ip限制,apache服务器对同一IP地址的连接限制
- 摄像机成像公式、外参、内参(转载)
- zabbix3.0.3-源码安装
- PHP类分享:session保存到数据库
- OpenStack常见命令与问题集合
- KETTLE 新建数据库连接窗口无法打开错误 提示 XUL Definition 错误
- 05_grep-搜索
- 德州农工大学计算机专业研究生,德州农工大学计算机工程(无论文)理学硕士研究生申请要求及申请材料要求清单...
- 知网论文caj怎么转化成word
- Supervisor 配置详解
- 空前绝后!PostgresConf.CNPGConf.Asia 2020大会闭幕
- es 指定排序字段_ElasticSearch按照指定字段排序 | 三分钟
- 儿童节 | 让你在“我的世界”,“添码”行空
- SpringBoot集成Dozer
- Mapper层访问不到:...required a bean of type '....TBaseAuthMapper' that could not be found.