java 加载类文件精细版, 请仔细看
Java 技术提供三种确保安全机制
语言设计特性 (对数组的边界进行检查, 类型转换检查, 无指针算法)
安全的访问控制机制
代码签名
类加载器
先看一下虚拟机执行步骤
虚拟机有一个用于加载类文件的机制, 不管是从磁盘上读取文件还是请求 web 上的资源, 都使用该机制进行加载 myProgram 类文件的内容
如果 myProgram 类拥有另外一个类的域或者超类是另一个类, 那么另一个类文件会被加载 (此过程称之为解析)
然后虚拟机执行 myProgram 类中的 main 方法 (此类是静态的无需创建类的实例)
如果 main 方法或者 main 调用的方法要用到更多的类, 那么接下来将会加载更多的类
类加载机制并不是使用单个加载器, 至少拥有三个
引导类加载器: 负责加载系统类 (从 rt.jar 进行加载)
扩展类加载器: 负责扩展器类加载用于从 jre/lib/ext 目录加载
系统类加载器: 用于加载应用类 通过 classpath 执行加载
类加载器层次结构
类加载器存在父子关系
例如系统类加载器要加载 java.util.ArrayList, 首先要求扩展类进行加载, 然后扩展类加载器要求引导类加载器进行加载.
类加载器层次结构
什么是类加载器倒置
类加载器倒置
上下文类加载器
每一个线程对应一个类加载器的引用, 称之为上下文类加载器.
主线程的上下文类加载器是系统类加载器.
新线程创建的上下文类加载器被设置为创建该线程的上下文下载器
所以不做任何情况下新线程的类加载器默认是系统类加载器
thread.setContextClassLoader(loader) 设置新线程的上下文加载器
来源: http://www.jianshu.com/p/ff6378e19aa8