类加载器

2.1.1 简介

分类

说明

启动类加载器

  1. 负责加载<JAVA_HOME>\lib目录中的核心类库,如resources.jar等;
  2. 负责加载被-Xbootclasspath参数所指定的路径中的,并且是虚拟机识别的类库;
  3. 这个加载器是C++编写的,随着JVM启动。

扩展类加载器

  1. 负责加载<JAVA_HOME>\lib\ext目录中的类库;
  2. 也可以加载用java.ext.dirs系统变量来指定路径目录中的类库。

系统类加载器

  1. 负责加载用户类路径classpath上所有的jar包和 .class 文件。

自定义类加载器

  1. 可以支持一些个性化的扩展功能。

2.2.2 双亲委派机制

【概述】

为了避免类的重复加载,确保一个类的全局唯一性,以及保护程序安全,防止核心API被随意篡改,JVM会采用双亲委派模型进行加载,双亲委派模型要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器。

【工作过程】

  1. 类加载器收到某个类的加载请求,他不会自己去加载这个类;
  2. 他会将这个请求向上委托给父类加载器去完成,每一个加载器均是如此,直到启动类加载器;
  3. 启动类加载器检查自己是否能够加载当前这个类,能加载就结束,否则会抛出异常并通知子加载器进行加载;
  4. 子加载器重复步骤3,如果均无法加载则报异常Class Not Found

【过程图解】

2.2.3 沙箱安全机制

【沙箱】

沙箱是一个限制程序运行的环境。

【沙箱机制】

沙箱机制就是将Java代码限定在JVM特定的运行范围中,并严格限制代码对本地系统资源的访问,以此来保证对代码的有效隔离、防止对本地系统造成破坏。不同级别的沙箱对本地系统资源的访问限制不同(CPU、内存、文件系统、网络)。

【沙箱的基本组件】

组件

说明

字节码校验器

确保字节码文件(.class文件)遵守Java语言规范,实现Java程序的内存保护

注:并非所有的字节码文件都会经过字节码校验,例如核心类的字节码文件

类加载器

  1. 防止恶意代码干涉善意代码;
  2. 守护了被信任的类库边界;
  3. 将代码归入不同的受保护域,限制了代码的权限。

存取控制器

控制核心API对操作系统的存取权限(控制策略可由用户设定)。

安全管理器

核心API和操作系统间的主要接口,实现权限控制,优先级高于存取控制器。

安全软件包

java.security下的类和扩展包下的类,允许用户为自己的应用增加新的安全特性。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐