JVM java虚拟机学习(二)
来源:互联网 发布:上古卷轴4捏脸数据 编辑:程序博客网 时间:2024/06/06 03:02
类加载器
类加载器用来把类加载器到java虚拟机,从JDK1.2版本开始, 类的加载过程采用父亲委托机制,这种机制能更好的保证java平台的安全。在此委托机制中,除了java虚拟机自带的根类加载器以外,其余的类加载器都有且只有一个父加载器。当java程序请求加载器loader1加载sample类时,loader首先委托自己的父加载器去加载sample类,若父加载器能加载,则由父加载器完成加载任务,否则才由加载器loader1本身加载sample类。
若有一个类加载器能成功加载sample类,那么这个类加载器被称为定义类加载器,所有能成功返回Class对象的引用的类加载器(包括定义类加载器)都被称为初始类加载器。例如:loader1实际加载了sample类,则loader1为sample类定义类加载器,loader2和loader1为sample类的初始类加载器。
java虚拟机自带了以下几种加载器。
- 根(bootstrap)加载器:该加载器没有父加载器。它负责加载虚拟机的核心类库,如java.lang.*等。例如从下例可以看出,java.lang.Object就是由根类加载器加载的。根类加载器从系统属性sun.boot.class.path所指定的目录中加载类库。根类加载器的实现依赖于底层操作系统,属于虚拟机的实现部分,它并没有继承java.lang.ClassLoader类。
- 扩展类加载器:它的父加载器为根类加载器。它从java.ext.dirs系统属性所指定的目录中加载类库,或者从JDK的安装目录的jre/lib/ext子目录下加载类库,如果把用户创建的JAR文件放在这个目录下,也会自动由扩展类加载器加载。扩展类加载器是纯java类,是java.lang.ClassLoader类的子类。
- 系统类加载器:也称为应用类加载器,它的父加载器为扩展类加载器。它从环境变量classpath或者系统属性java.class.path所指定的目录中加载类,它是用户自定义的类加载器的默认父加载器。系统类加载器是纯java类,是java.lang.ClassLoader类的子类
除了以上虚拟机自带的加载器以外,用户还可以定制自己的类加载器。java提供了抽象类java .lang.ClassLoader,所有用户自定义的类加载器应该继承ClassLoader类
public class Test { public static void main(String[] args) throws ClassNotFoundException { // TODO Auto-generated method stub Class clazz=Class.forName("java.lang.String");//是根加载器加载 System.out.println(clazz.getClassLoader()); Class clazz1=Class.forName("org.C");//系统加载器加载 System.out.printl(clazz1.getClassLoader()); }}class C{}result:nullsun.misc.Launcher$AppClassLoader@53004901
0 0
- JVM java虚拟机学习(二)
- Java虚拟机JVM学习笔记
- java虚拟机学习-jvm体系结构
- Java虚拟机学习-JVM系统
- Java虚拟机(JVM)
- Java虚拟机(JVM)
- java虚拟机(JVM)
- Java 虚拟机(JVM)
- Java虚拟机(二)-JVM类加载机制
- Java虚拟机JVM性能优化(二):编译器
- Java虚拟机JVM性能优化(二):编译器
- JVM(二) java虚拟机与程序的生命周期
- [Java学习] Java虚拟机(JVM)参数简介
- java的JVM(java虚拟机)学习笔记
- Java学习笔记 --- JVM(Java虚拟机)
- jvm学习笔记(一)—Java虚拟机内存区域
- JAVA虚拟机(JVM)——虚拟机字节码执行引擎(二)
- Java虚拟机学习随笔(二)
- mysql中engine=innodb和engine=myisam的区别
- Java方法参数(一)
- HTTP1.0与HTTP1.1的区别
- array types are now written with the brackets around the element type
- java反射机制详解 及 Method.invoke解释
- JVM java虚拟机学习(二)
- 哲学家就餐问题
- java中遍历MAP的几种方法
- Android Studio 1.3.0 以上gradle proxy代理设置异常
- js 实现map集合
- 字符编码笔记:ASCII,Unicode和UTF-8
- [刷题]LRU Cache
- Android Studio 简单介绍和使用问题小结
- iOS GCD使用指南