JVM 类加载机制
分类说明启动类加载器负责加载目录中的核心类库,如等;负责加载被参数所指定的路径中的,并且是虚拟机识别的类库;这个加载器是C++编写的,随着JVM启动。扩展类加载器负责加载目录中的类库;也可以加载用系统变量来指定路径目录中的类库。系统类加载器负责加载用户类路径classpath上所有的jar包和.class文件。自定义类加载器可以支持一些个性化的扩展功能。
·
类加载器
2.1.1 简介
分类 | 说明 |
启动类加载器 |
|
扩展类加载器 |
|
系统类加载器 |
|
自定义类加载器 |
|
2.2.2 双亲委派机制
【概述】
为了避免类的重复加载,确保一个类的全局唯一性,以及保护程序安全,防止核心API被随意篡改,JVM会采用双亲委派模型进行加载,双亲委派模型要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器。
【工作过程】
- 类加载器收到某个类的加载请求,他不会自己去加载这个类;
- 他会将这个请求向上委托给父类加载器去完成,每一个加载器均是如此,直到启动类加载器;
- 启动类加载器检查自己是否能够加载当前这个类,能加载就结束,否则会抛出异常并通知子加载器进行加载;
- 子加载器重复步骤3,如果均无法加载则报异常
Class Not Found
。
【过程图解】
2.2.3 沙箱安全机制
【沙箱】
沙箱是一个限制程序运行的环境。
【沙箱机制】
沙箱机制就是将Java代码限定在JVM特定的运行范围中,并严格限制代码对本地系统资源的访问,以此来保证对代码的有效隔离、防止对本地系统造成破坏。不同级别的沙箱对本地系统资源的访问限制不同(CPU、内存、文件系统、网络)。
【沙箱的基本组件】
组件 | 说明 |
字节码校验器 | 确保字节码文件( 注:并非所有的字节码文件都会经过字节码校验,例如核心类的字节码文件 |
类加载器 |
|
存取控制器 | 控制核心API对操作系统的存取权限(控制策略可由用户设定)。 |
安全管理器 | 核心API和操作系统间的主要接口,实现权限控制,优先级高于存取控制器。 |
安全软件包 |
|
更多推荐
已为社区贡献2条内容
所有评论(0)