博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 类加载机制
阅读量:3518 次
发布时间:2019-05-20

本文共 983 字,大约阅读时间需要 3 分钟。

1.类加载器是什么?

类加载器负责将.class文件加载到内存中,并生成Class对象.

2.类加载器是如何工作的?

在java中有三种类加载器 :

Bootstrap ClassLoader(根类加载器) : 负责加载java核心类库.

Extention ClassLoader(扩展类加载器) : 负责加载jre的扩展目录中的jar包.为java扩展的新功能可以通过这种方式加载.需要将扩展的jar包放置在JAVA_HOME/jre/lib/ext目录下.

System ClassLoader(系统类加载器) : 也就是应用类加载器.他负责加载来自java命令的-classpath选项,java.class.path系统属性或CLASSPATH环境变量的所指定的JAR包和类路径.使用ClassLoader.getSystemClassLoader()方法可以获取系统类加载器.一般的用户自定义类加载器的父加载器都是系统加载器.

JVM类加载机制:

1.全盘负责 : 一个类加载器加载某个Class时,该Class依赖的所有Class都有此类加载器加载.除非显示的改变类加载器;

2.父类委托 : 类记载器在加载Class时,首先请求父加载器加载,当父加载器无法加载时才尝试从自己的加载路径加载类.[ 为什么要由父加载器先加载?在JVM中同一个类只有一个Class,它是被全限定名和类加载器所标识的,两个不同的类加载器加载的同一个类文件,产生的Class是不兼容的.为了避免这种情况出现,JVM遵从父类委托的机制.因为该类有可能已经由父类加载了.例如加载一个引用了核心类库的自定义类. ]

3.缓存机制 : 保证所有被加载的类都被缓存,再次加载时,会检查缓存,只有当缓存中没有时才会加载.也就是说如果更改了Class,必须重启JVM;

加载器加载实例次序的父子关系图(子->父):

用户自定义类加载器->系统类加载器->扩展类加载器->根类加载器.

3.如何自定义类加载器?

自定义一个简单的类加载器只需要继承ClassLoader,并覆盖其中的findClass().如果想实现更复杂的功能,覆盖其他方法.

4.URLClassLoader继承了ClassLoader,也是系统类加载器和扩展类加载器的父类.它可以从文件系统,或者远程主机加载Class.

转载地址:http://ovvqj.baihongyu.com/

你可能感兴趣的文章
JavaScript学习(new1)
查看>>
http GET 和 POST 请求的优缺点、区别以及误区
查看>>
JVM的4种垃圾回收算法、垃圾回收机制
查看>>
什么是分布式事务
查看>>
常用的分布式事务解决方案
查看>>
设计模式:单例模式 (关于饿汉式和懒汉式)
查看>>
一致性Hash算法
查看>>
更新Navicat Premium 后打开数据库出现1146 - Table 'performance_schema.session_variables' doesn't exist
查看>>
安装rabbitmq时踩的坑
查看>>
Eclipse如何设置自动提示?
查看>>
2021-06-09数据库添加多条数据
查看>>
简单的JAVA小作品
查看>>
一些方便的遍历方法
查看>>
CMake下载
查看>>
未调用fflush产生的图片文件无法打开问题
查看>>
SQL 约束(二)
查看>>
SQL ALTER用法(三)
查看>>
SQL where子句及查询条件语句(六)
查看>>
SQL 连接JOIN(九)
查看>>
linux VM虚拟机可以ping通主机,但主机无法ping通虚拟机
查看>>