文档章节

Java 类加载以及类加载器

大山_
 大山_
发布于 2016/11/03 23:23
字数 725
阅读 20
收藏 2
  1. 类加载 我们都知道,JVM里一般有多个类加载器:
    1. 启动类加载器(加载rt.jar,且只负责这个范围,避免用户自己定义一个java.lang.Object类并加载),此类加载器无法被Java程序直接引用。
    2. 扩展类加载器 (加载 JAVA_HOME/lib/ext目录中的jar) ,可以直接使用。
    3. 应用程序类加载器 (负责加载ClassPath路径的类),通过ClassLoader.getSystemClassLoader()返回引用。
    4. 自定义的类加载器。
    • JVM中类加载的顺序:如果一个类加载器收到了类加载请求,它先是把加载请求委派给父类加载器去完成,依次递归到启动类加载器。。。所以所有的加载请求最终都会传送到启动类加载器中去,但不一定会由启动类加载器完成加载(比如加载com.ali.Dog)。只有当父加载器无法完成该加载请求时(类加载器负责加载的范围找不到),子加载器才会去尝试加载。这个加载模型也称为“双亲委派加载模型”。
  2. 自定义类加载器 我们为什么需要自定义的类加载器?答:当你开发一个框架工具时,很可能要加载框架中的某些类。
    1. 如何定义自己的类加载器?首先你自己定义的类加载器,也要符合“双亲委派加载模型”。其次,你要理解ClassLoader类中的方法,推荐看源码。
      1. ClassLoader中的构造
      2. loadClass(String name, boolean resolve),第二个参数:是否在加载时linking。(连接是类加载步骤中的一步,是初始化的必要条件。即:类初始化了,必定经过连接。。而连接了,未必初始化了),补充一下类加载的流程:加载 -> (验证 -> 准备 -> 解析) -> 初始化 -> 使用 ->卸载。(验证 -> 准备 -> 解析 三个步骤合称连接),此方法的实现:a.查找是否加载过name类 b.如果没有加载过且有父加载器,则让父加载器去加载,如果没有父类加载器,则直接使用启动类加载器加载name类。c.如果经过上述两步,还没有加载到类name,那么再调用findClass(name)方法,此方法的ClassLoader类实现是抛出异常。。所以当你自定义一个类加载时,要复写该方法。
      3. defineClass(String name, byte[] b, int off, int len)方法,是用你自己类加载器实现“加载”这个动作的主要方法,个人感觉,你肯定不会真正的用C语言实现一下类加载的过程,无非是调用已有的“加载”方法。
  3. 《深入理解Java虚拟机》 P228的代码demo分析,待续。。。有些困了,回头继续

[IBM wiki-Java虚拟机加载(https://www.ibm.com/developerworks/cn/java/j-lo-classloader/)

© 著作权归作者所有

大山_
粉丝 6
博文 19
码字总数 6609
作品 0
石景山
私信 提问
浅谈java classloader

本文由作者张远道授权网易云社区发布。 类加载器三杰 jvm有三类classloader,分别是bootstrap classloader,extended classloader以及system classloader。 bootstrap classloader是系统在启动...

网易云
2018/12/14
0
0
03-《深度拆解JVM》之Java虚拟机是如何加载Java类的?

一、JVM的类加载 Java 虚拟机中的类加载,从 class 字节码文件到内存中的类,按先后顺序需要经过加载、链接以及初始化三大步骤。其中,链接过程中同样需要验证;而内存中的类没有经过初始化,...

飞鱼说编程
2018/09/13
0
0
Java Classloader机制解析

做Java开发,对于ClassLoader的机制是必须要熟悉的基础知识,本文针对Java ClassLoader的机制做一个简要的总结。因为不同的JVM的实现不同,本文所描述的内容均只限于Hotspot Jvm. 本文将会从...

aminqiao
2014/05/09
0
2
Java核心机制:反射机制的原理及应用方法

一、java的核心机制 java有两种核心机制:java虚拟机(JavaVirtual Machine)与垃圾收集机制(Garbage collection): 1、Java虚拟机:是运行所有Java程序的抽象计算机,是Java语言的运行环境,在...

Java架构资源分享
2018/11/25
0
0
JVM 虚拟机(对象创建,类加载器,执行引擎等),

1.揭开 Java 对象创建的奥秘? 2.class 文件结构详解? 3.详解 Java 类的加载过程? > Java 对象创建,class 文件结构 Java对象模型 。Java对象保存在堆内存中。在内存中,一个Java对象包含三...

desaco
2018/08/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot 整合redis

springboot整合redis官方是有文档的: 英文看不懂可以翻译,代码应该看得懂, 这个是自动注入的。当然也可以xml注入,手动配置。 整合步骤: pom文件: <!-- spring boot web --> ...

jason_kiss
22分钟前
2
0
手机耗电问题,大部分是没有正确使用这个“锁”

当安卓设备闲置时,设备很快会进入休眠状态,以达到省电和减少CPU占用的目的。但有些应用在手机灭屏甚至系统休眠时,依然频繁占用CPU处理事件或唤醒屏幕提示用户消息,这类行为会导致手机耗电...

安卓绿色联盟
24分钟前
1
0
UI 设计中的渐变

>**简评:**渐变是通过两种或多种不同的色彩来绘制一个元素,同时在颜色的交界处进行衰减变化的一种设计。从拟物到扁平再到渐变,人们慢慢发现它能创造出从未有过的一种色彩感觉 —— 独特、...

极光推送
29分钟前
2
0
powerdesigner name 转注释vb脚本

Option Explicit ValidationMode = True InteractiveMode = im_BatchDim mdl ' the current model' get the current active model Set mdl = ......

zhu97
34分钟前
2
0
V2Ray的安装与使用

1 1. bash <(curl -s -L https://git.io/v2ray.sh)yum update -y && yum install curl -y安装好 curl 之后就能安装脚本了输入快捷管理命令v2ray后,开始进行v2ray服务端配置...

吕湘颖
36分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部