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