JVM系列(之ClassLoader)
2014-11-19 16:22
169 查看
Class Loader
Java运作流程
内部class loader
bootstrap class loader --引导类加载器,它负责加载Java的核心类【java.* 】(如classpath下面的类库),不是 java.lang.ClassLoader的子类,而是由JVM自身实现的。Code . URL[] urls=sun.misc.Launcher.getBootstrapClassPath().getURLs();extension classloader -扩展类加载器,它负责加载JRE的扩展目录【javax.* 】(JAVA_HOME/jre/lib/ext或者由java.ext.dirs系统属性指定的)中JAR的类包。
system classloader -系统(也称为应用)类加载器,它负责加载系统或用户实现的类,在JVM被启动时,加载来自在命令java中的-classpath或者java.class.path系统属性或者 CLASSPATH操作系统属性所指定的JAR类包和类路径,如果没有特别指定,则用户自定义的任何类加载器都将该类加载器作为它的父加载器。ClassLoader.getSystemClassLoader()获取。
ClassLoader加载过程
classloader 加载类用的是全盘负责委托机制。所谓全盘负责,即是当一个classloader加载一个Class的时候,这个Class所依赖的和引用的所有 Class也由这个classloader负责载入,除非是显式的使用另外一个classloader载入;委托机制则是先让parent(父)类加载器 (而不是super,它与parent classloader类不是继承关系)寻找,只有在parent找不到的时候才从自己的类路径中去寻找。按Loader的应用场景分类
系统class loader调用者 class loader
加载当前类,可以是SystemClassLoader,通过getClass().getClassLoader()来得到
Output
线程上下文class loader
每一个线程都有一个关联的上下文ClassLoader.如果使用new Thread()方式生成新的线程,新线程将继承其父线程的上下文ClassLoader.
Output
相关文章推荐
- jvm系列之classLoader
- [jvm解析系列][九]类的加载过程和类的初始化。你的类该怎么执行?为什么需要ClassLoader?
- JVM中ClassLoader的工作机制
- jvm classLoader architecture
- jvm classLoader architecture :
- JVM ClassLoader
- JVM系列之Class文件(三)
- JVM基础(二) 实现自己的ClassLoader
- JVM-ClassLoader装载class的流程
- jvm classloader 原理
- java虚拟机学习-慢慢琢磨JVM(2-1)ClassLoader的工作机制
- JVM ClassLoader (java虚拟机类加载器)
- 《Java平台体系》——第二章 JVM——实战:ClassLoader的应用
- JVM-ClassLoader装载class的流程
- JVM基础(二) 实现自己的ClassLoader
- jvm classLoader architecture:
- JVM classloader
- 《Java平台体系》——第二章 JVM——实战:ClassLoader的应用
- JVM系列文章(三):Class文件内容解析
- JVM思考-ClassLoader.loadClasshe和Class.forName区别