当前位置: 首页 > news >正文

JVM 类加载机制

类加载器

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下的类和扩展包下的类,允许用户为自己的应用增加新的安全特性。


http://www.mrgr.cn/news/921.html

相关文章:

  • JavaScript初级——对象和函数
  • 详细了解JavaScript中的原型链和继承机制
  • 我遇到的flutter问题以及答案(一)
  • windows调试ios记录
  • 深度学习--tensorflow/keras出现各种维度不匹配问题解决
  • STM32之MPU6050实战
  • MiniCPM-V: A GPT-4V Level MLLM on Your Phone论文阅读
  • 所生成项目的处理器架构“MSIL”与引用“***”的处理器架构“x86”不匹配。
  • Android 使用`layer-list`打造精美的背景
  • docker数据卷
  • Vue.js中的v-once指令:全面解析与应用指南
  • django之BaseSerializer
  • 王老师 linux c++ 通信架构 笔记(五)编译后生成的 nginx 可执行程序的启动
  • 掌握Jenkins自动化部署:从代码提交到自动上线的全流程揭秘
  • Qt:exit,quit,close的用法及区别
  • Windows Visual Studio 指定应用程序的执行环境
  • 使用 LlamaIndex 中的 Relik 进行实体链接和关系提取
  • SSL Pining 问题解决方案
  • 【机器学习西瓜书学习笔记——规则学习】
  • Android常用控件Button