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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Git的使用-初级
  • OJ-0819
  • C连接MySQL常用API
  • 【数据结构初阶】二叉树--基本概念
  • “解决Windows电脑无法投影到其他屏幕的问题:尝试更新驱动程序或更换视频卡“
  • Java--多线程(上)
  • 【OCPP】ocpp1.6协议第5.12章节Remote Stop Transaction的介绍及翻译
  • 这9个VXLAN术语还不精通?别干网工了
  • Ciallo~(∠・ω・ )⌒☆第二十一篇 入门re 正则表达式
  • 【设计模式】漫谈设计模式
  • 端点安全新纪元:EDR与XDR技术的融合应用
  • 洛谷 P6280 [USACO20OPEN] Exercise G
  • 【vue讲解:ref属性、动态组件、插槽、vue-cli创建项目、vue项目目录介绍、vue项目开发规范、es6导入导出语法】
  • Docker最佳实践进阶(二):Docker Compose容器编排
  • conda 常见使用命令详解
  • 【5+】跨webview多页面 触发事件(二)
  • Fabric架构演变之路
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Odoo domain写法及运用
  • PermissionScope Swift4 兼容问题
  • Vue小说阅读器(仿追书神器)
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 百度小程序遇到的问题
  • 闭包--闭包之tab栏切换(四)
  • 订阅Forge Viewer所有的事件
  • 二维平面内的碰撞检测【一】
  • 和 || 运算
  • 机器学习中为什么要做归一化normalization
  • 排序算法学习笔记
  • 盘点那些不知名却常用的 Git 操作
  • 前端学习笔记之观察者模式
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 你对linux中grep命令知道多少?
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • Hibernate主键生成策略及选择
  • 国内开源镜像站点
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​力扣解法汇总946-验证栈序列
  • #define,static,const,三种常量的区别
  • #Linux(帮助手册)
  • #宝哥教你#查看jquery绑定的事件函数
  • %check_box% in rails :coditions={:has_many , :through}
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (2)(2.10) LTM telemetry
  • (31)对象的克隆
  • (4)logging(日志模块)
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (Java入门)抽象类,接口,内部类
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (一)VirtualBox安装增强功能
  • ***监测系统的构建(chkrootkit )
  • .jks文件(JAVA KeyStore)
  • .NET 5种线程安全集合