【类加载子系统】

news2024/11/16 21:43:58

文章目录

  • 1. 内存结构
  • 2. 类加载器与类的加载过程
  • 3. 类加载器分类
  • 4. 双亲委派机制

1. 内存结构

在这里插入图片描述

  • Class 文件
  • 类加载子系统
  • 运行时数据区
    • 方法区
    • 程序计数器
    • 虚拟机栈
    • 本地方法栈
  • 执行引擎
  • 本地方法接口
  • 本地方法库

在这里插入图片描述

2. 类加载器与类的加载过程

在这里插入图片描述

  • 类加载器子系统负责从文件系统或者网络中加载 Class 文件,class 文件在文件开头有特定的文件标识。
  • ClassLoader 只负责 class 文件的加载,至于它是否可以运行,则由 Execution Engine 决定。
  • 加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是 Class 文件中常量池部分的内存映射)

类的加载过程

  1. 加载阶段
  2. 链接阶段
  3. 初始化阶段
    在这里插入图片描述
    在这里插入图片描述

加载阶段在这里插入图片描述

    1. 通过一个类的全限定名获取定义此类的二进制字节流
    1. 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
    1. 在内存中生成一个代表这个类的 java.lang.Class 对象,作为方法区这个类的各种数据的访问入口

补充:加载 class 文件的方式

  • 本地系统中直接加载
  • 通过网络获取,典型场景:Web Applet
  • 从 zip压缩包中读取,成为日后 jar、war 格式的基础
  • 运行时计算生成,使用最多的是:动态代理技术
  • 由其他文件生成,典型场景:JSP 应用
  • 从专有数据库中提取.class 文件,比较少见
  • 加密文件中获取,典型的防 Class 文件被反编译的保护措施

链接阶段

  • 验证(Verify)
    • 目的在子确保 Class 文件的字节流中包含信息符合当前虚拟机要求,保证被加载类的正确性,不会危害虚拟机自身安全。
    • 主要包括四种验证,文件格式验证,元数据验证,字节码验证,符号引用验证。
  • 准备(Prepare)
    • 为类变量分配内存并且设置该类变量的默认初始值,即零值。
    • 这里不包含用 final 修饰的 static,因为 final 在编译的时候就会分配了,准备阶段会显式初始化
    • 这里不会为实例变量分配初始化,类变量会分配在方法区中,而实例变量是会随着对象一起分配到 Java 中。
  • 解析(Resolve)
    • 将常量池内的符号引用转换为直接引用的过程。
    • 事实上,解析操作往往会伴随着 JVM 在执行完初始化之后再执行。
    • 符号引用就是一组符号来描述所引用的目标。

初始化阶段:

  • 初始化阶段就是执行类构造器方法<clinit>()的过程。
  • 此方法不需定义,是 javac 编译器自动收集类中的所有类变量的赋值动作和静态代码块中的语句合并而来。
  • 构造器方法中指令按语句在源文件中出现的顺序执行。
  • <clinit>()不同于类的构造器。(构造器是虚拟机视角下的<init>())
  • 若该类具有父类,JVM 会保证子类的<clinit>()执行前,父类的<clinit>()已经执行完毕。
  • 虚拟机必须保证一个类的<clinit>()方法在多线程下被同步加锁

3. 类加载器分类

JVM 支持两种类型的类加载器 。分别为引导类加载器(Bootstrap ClassLoader)和自定义类加载器(User-Defined ClassLoader)。
将所有派生于抽象类 ClassLoader 的类加载器都划分为自定义类加载器 (除了bootstrap都是)。
在这里插入图片描述

获取 ClassLoader 的途径
在这里插入图片描述

4. 双亲委派机制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1065772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于树种优化的BP神经网络(分类应用) - 附代码

基于树种优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于树种优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.树种优化BP神经网络3.1 BP神经网络参数设置3.2 树种算法应用 4.测试结果&#xff1a;5.M…

旅美经济学家向凌云在美获对冲基金之父威廉·雅克颁授美国文化奖

2023年9月22日,第三届LABA偶像奖(LABA ICON AWARDS )「美国文化奖」颁奖典礼在美国洛杉矶比佛利山庄四季酒店举办。美国本土、欧洲、亚洲都有众多艺术家、经济学家和各行业优秀人才积极参与其中。 对冲基金之父威廉雅克(William Jacques)向经济学家Dr. Lingyun Xiang 向凌云颁发…

【进程管理】认识系统调用函数fork

目录 前言 一.查看进程的pid 二.父子进程 三.查看进程的第二种方式 四.代码创建进程——fork 1.fork的功能 2.fork的返回值 3.fork代码的一般写法 五.对于fork的理解 1.fork干了些什么&#xff1f; 2.fork为什么给子进程返回0&#xff0c;给父进程返回子进程的pid&…

大数据与Hadoop入门理论

一、大数据的3种数据类型 1、结构化数据 可定义&#xff0c;有类型、格式、结构的强制约束 如&#xff1a;RDBMS&#xff08;关系型数据库管理系统&#xff09; 2、非结构化数据 没有规律没有数据约束可言&#xff0c;很复杂难以解析 如&#xff1a;文本文件&#xff0c;视…

第86步 时间序列建模实战:Transformer回归建模

基于WIN10的64位系统演示 一、写在前面 这一期&#xff0c;我们介绍Transformer回归。 同样&#xff0c;这里使用这个数据&#xff1a; 《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal Sy…

Casdoor系统static任意文件读取漏洞

文章目录 Casdoor系统static任意文件读取漏洞复现0x01 前言0x02 漏洞描述0x03 影响平台0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 Casdoor系统static任意文件读取漏洞复现 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由…

郁金香2021年游戏辅助技术中级班(七)

郁金香2021年游戏辅助技术中级班&#xff08;七&#xff09; 058-C,C写代码HOOK分析封包数据格式A059-C,C写代码HOOK分析封包数据格式B-detours劫持060-C,C写代码HOOK分析封包数据格式C-过滤和格式化061-C,C写代码HOOK分析封包数据格式D-写入配置文件062-C,C写代码HOOK分析封包…

容器运行elasticsearch安装ik分词非root权限安装报错问题

有些应用默认不允许root用户运行&#xff0c;来确保应用的安全性&#xff0c;这也会导致我们使用docker run后一些操作问题&#xff0c;用es安装ik分词器举例&#xff08;es版本8.9.0&#xff0c;analysis-ik版本8.9.0&#xff09; 1. 容器启动elasticsearch 如挂载方式&…

第二证券:A股“业绩底”已现?两大板块被看好

9月&#xff0c;A股商场经历了一段明显的缩量下跌&#xff0c;成交量持续萎缩&#xff0c;增量资金不足&#xff0c;商场“痛感”激烈。跟着国庆十一长假结束&#xff0c;2023年四季度正式敞开&#xff0c;大都分析人士和私募安排都认为&#xff0c;国内经济预期转好将为A股商场…

蓝桥杯每日一题2023.10.7

跑步锻炼 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 简单枚举&#xff0c;对于2的情况特判即可 #include<bits/stdc.h> using namespace std; int num, ans, flag; int m[13] {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; bool is_ren(int n) {if((n %…

3d渲染农场全面升级,好用的渲染平台值得了解

什么是渲染农场&#xff1f; 渲染农场是专门从事 3D 渲染的大型机器集合&#xff0c;称为渲染节点&#xff0c;这些机器组合在一起执行一项任务&#xff08;渲染 3D 帧和动画&#xff09;。通过将渲染工作分配给数百台机器&#xff0c;可以显着减少渲染时间&#xff0c;从而使…

STM32F030在使用内部参考电压 (VREFINT)时与STM32G070的区别

背景&#xff1a; 之前使用过STM32G070的内部参考电压来提升ADC采集的准确度&#xff08;STM32使用内部参考电压提高ADC采集准确度&#xff09;&#xff0c;所以本次使用STM32F030的芯片时直接把之前G070的代码拿过来用了&#xff0c;但是出现了问题。 查找资料发现两者不同&am…

go语言判断管道是否关闭的误区

前言 本文是探讨的是"在Go语言中&#xff0c;我们是否可以使用读取管道时的第二个返回值来判断管道是否关闭?" 样例 在Go语言中&#xff0c;我们是否可以使用读取管道时的第二个返回值来判断管道是否关闭? 可以看下面的代码 package mainimport "fmt"…

步进电机S曲线驱动模块

一、电路 带有CAN及485接收&#xff0c;三个光耦接口&#xff0c;TMC2660电机驱动芯片&#xff0c;stm32f103的主控芯片 二、协议 一般来说&#xff0c;板子之间的通信协议格式通常为&#xff1a; 内容 帧头 长度 类型1 类型2 Data 校验 帧尾 字节数 1 1 1 1 N 2 1 帧头为0xB…

二叉树--二叉树最大深度

文章前言&#xff1a;如果有小白同学还是对于二叉树不太清楚&#xff0c;作者推荐&#xff1a;二叉树的初步认识_加瓦不加班的博客-CSDN博客 二叉树最大深度-力扣 104 题 &#xff08;不知道“后序遍历”的小白同学&#xff0c;请先看&#xff1a;二叉树的初步认识_加瓦不加班…

组件的挂载和渲染

React的挂载和渲染 React的生命周期中包括三个主要的阶段&#xff1a;挂载、渲染以及卸载。 很多小伙伴包括我自己可能对挂载和渲染的概念比较模糊&#xff0c;今天这篇文章主要的目的是为了解答我们的这个小疑惑~ 这张图是从其他地方搬运过来的&#xff0c;这张图中描述的主…

直播间自动点赞第一章:MouseEvent 实现根据坐标X,Y自动点击浏览器的效果

最终项目 制作一个自动点赞的浏览器插件&#xff0c;可以根据用户指定一个浏览器区域&#xff0c;进行自动化点击&#xff0c;其中可以设置参数&#xff1a;点击频率、指定区域。 本章节效果 指定了一块区域&#xff0c;进行点击&#xff0c;这边是模拟直播间实现自动化点击 …

【Java 进阶篇】JDBC数据库连接池Druid工具类详解

在Java应用程序中&#xff0c;数据库连接是一种重要的资源&#xff0c;因为每次创建和销毁数据库连接都会产生开销&#xff0c;降低了系统性能。为了高效地管理数据库连接&#xff0c;降低资源消耗&#xff0c;常常使用数据库连接池。Druid是一个功能强大的数据库连接池&#x…

成品短视频App源码:10个最热门的功能模块详解

作为成品短视频App源码领域的专家&#xff0c;我将为您揭开成品短视频App的神秘面纱。在这篇文章中&#xff0c;我将详细介绍这热门应用背后的10个最受欢迎的功能模块。无论您是想开发一款创新的短视频App&#xff0c;还是寻找适合您业务的现成解决方案&#xff0c;本文都会为您…

递归

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析&#xff08;3&#xff09; 目录 &#x1f449;&#x1f3fb;汉诺塔 &#x1f449;&…