JVM类加载、类变量初始化顺序

news2024/9/22 15:51:54

题目

先来看一个题目,以下程序的输出结果是什么

运行结果

关于类加载机制

关于JVM的类加载
《深入理解Java虚拟机》中关于类加载是这样说的:
Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程称作虚拟机的类加载机制
看图:

加载、验证、准备、初始化、卸载 这五个阶段的顺序是确定的,而解析阶段则不一定

  1. 加载
    “加载”是整个“类加载”的第一个阶段,这个阶段虚拟机需要完成的事情是:
    1.1 通过类的全限定名来获取此Class文件的二进制字节流
    1.2 将这个字节流所代表的静态存储结构转换为方法区的运行时数据结构
    1.3 在内存中生成一个代表此类的 java.lang.Class度相关,作为方法区数据结构的访问入口
    这个加载阶段一般是通过“双亲委派模型”来实现

  2. 验证
    “验证"是连接阶段的第一步,这个阶段的目的是确保Class文件中的信息合法

  3. 准备
    准备阶段正式为类中的变量分配内存并设置类变量初始值的阶段
    类变量,即类的静态成员属性,被static修饰的类属性,即静态成员属性
    这些变量所使用的内存分配在方法区
    “准备”完成的事情:
    为类变量分配内存,并设置零值,此时静态变量并没有真正的赋值(此处的零值并不都是null,每种数据类型都有零值,例如int类型的零值是0,boolean类型的零值是false)

注意:“准备”阶段是对类变量,即静态变量进行内存分配,不是实例变量,实例变量是与对象一同初始化并分配在堆中的

  1. 解析
    把常量池中的符号引用解析为直接引用

  2. 初始化
    “初始化”阶段是类加载过程的最后一个步骤,
    在此阶段,初始化类变量和其他资源,此阶段会自动收集类变量的赋值动作和静态代码块
    JVM按照类变量和静态代码块中的在文件中定义的顺序依次执行,这就解释了上面的那个题目。

  3. 使用
    此时,JVM就将类中编写的Java代码的主导权交给应用程序了。

题目解析

关于上面的那道题目,现在再来看

  1. 当在main方法中执行new B()时,触发类加载机制
  2. 经过加载、验证之后,到达准备阶段,在此阶段,为类变量分配内存到方法区,为每一个静态变量附零值。
  3. 来到初始化阶段,为类变量赋值,从前往后的顺序,首先是为b1赋值,会调用构造方法,但是实例代码块会在构造方法之前执行
  4. 经过两个类变量赋值之后,来到静态代码块,执行静态代码块中的顺序

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

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

相关文章

【SLAM学习】基于Pangolin绘制运动轨迹

Pangolin是一个轻量级的跨平台视图控制库,主要用于可视化、交互和调试三维数据。该库提供了一系列图形界面工具,包括窗口、OpenGL渲染器、3D相机、图像显示等,可以方便地进行三维数据可视化和交互。 Pangolin库的主要特点如下: 轻…

SpringBoot的多配置文件

文章目录 1.配置文件的命名规则2.配置文件选择3.配置文件的优先级 1.配置文件的命名规则 配置文件一般要求以application开头,可以是.yml结尾的文件,也可以是.properties结尾的文件。 2.配置文件选择 当有多个配置文件,需要指定其中一个生…

关于C语言取余运算的那些大坑

0.前言 您好,这里是limou3434的一篇个人博文,感兴趣的话您也可以看看我的其他文章,本次我想给您带来的是关于C语言操作符‘%’的一些奇怪现象以及背后的原理解释,本章用了一点点python语法(比如在python中“//”是整除…

C++开发环境的搭建-Windows:VSCode+mingw64+CMake

文章目录 一、软件安装1. 网址及下载的软件2. VSCode中配置关于C的最简插件: 二、C调试环境的编译要求1. 在编译时要带-g参数2. 多文件编译需要分步编译 三、VSCode的调试配置如下:1. 单文件调试设置4. 多文件调试设置 一、软件安装 1. 网址及下载的软件…

【JavaEE进阶】——第六节.第一个MyBatis程序

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:JavaEE进阶 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!! 文章目录 前…

计算机视觉(5)—— 图像分类

目录 五、图像分类 5.1 AlexNet 5.2 VGG 5.3 GoogLeNet、Inception 5.3.1 Inception V1 5.3.2 Inception V2 5.3.3 Inception V3 5.3.4 Inception V4 5.4 ResNet 残差网络 5.4.1 ResNet 5.4.2 ResNeXt 5.5 CNN设计准则 五、图像分类 5.1 AlexNet 5.2 VGG 5.3 Go…

【剑指 Offer】05,替换字符创中的空格;难度等级:简单。易错点:C++中 char 和 string 类型的转换

【剑指 Offer】05,替换字符创中的空格;难度等级:简单。 文章目录 一、题目二、题目背景三、我的解答四、易错点五、知识点:char 和 string 类型的转换 一、题目 二、题目背景 在网络编程中,如果 URL 参数中含有特殊字…

消息推送平台的实时数仓?!flink消费kafka消息入到hive

大家好,3y啊。好些天没更新了,并没有偷懒,只不过一直在安装环境,差点都想放弃了。 上一次比较大的更新是做了austin的预览地址,把企业微信的应用和机器人消息各种的消息类型和功能给完善了。上一篇文章也提到了&#…

windows安装Anaconda

Anacond是什么? 和Python有啥关系? 1、Anacond 是一个python的发行版,包括了python和很多常见的软件库, 和一个包管理器conda。常见的科学计算类的库都包含在里面了,使得安装比常规python安装要容易。 2、Anaconda是专注于数据分…

分布式系统概念和设计——时间和全局状态(分布式系统中的时间问题)

分布式系统概念和设计 时间和全局状态 全局物理时间的缺乏使我们很难查明分布式程序的执行时状态。 我们经常需要知道当进程B处在某种状态依赖进程是什么状态,但不能通过依靠物理时钟理解一个同一个时刻到底是什么情况。 维护分布数据一致性算法检查发送给服务器的…

数学(三) -- LC[1010][1015] 可被 K 整除的最小整数

1 可被 K 整除的最小整数 1.1 题目描述 题目链接:https://leetcode.cn/problems/smallest-integer-divisible-by-k/description/ 1.2 思路分析 模运算 如果让你计算 1234 ⋅ 6789 1234 \cdot 6789 1234⋅6789 的个位数,你会如何计算? 由于…

c高级day2

#include <stdio.h> #include <stdlib.h> #include <string.h>int arrMAX_1(void *p,int n,int m,int x,int y); int arrMAX_2(void *p,int n,int m,int x,int y); int main(int argc, const char *argv[]) {int n0,m0;printf("请输入行数i 列数j\n&quo…

Baumer工业相机堡盟工业相机如何进行多个工业相机IP地址配置

Baumer工业相机堡盟工业相机如何进行多个工业相机IP地址配置 Baumer工业相机Baumer工业相机进行多相机IP配置的技术背景Baumer工业相机如何进行多相机IP配置1.配置Baumer工业相机连接的PC端IP地址2.配置Baumer工业相机的IP地址 Baumer工业相机 Baumer工业相机堡盟相机是一种高…

R 中的探索性相关分析

动动发财的小手&#xff0c;点个赞吧&#xff01; 本文[1] 相关分析是探索两个或多个变量之间关系的最基本和最基础的方法之一。您可能已经在某个时候使用 R 执行过相关分析&#xff0c;它可能看起来像这样&#xff1a; cor_results <- cor.test(my_data$x, my_data$y, …

手机上调试pc端电脑上的项目

文章目录 前言1、window r 打开电脑命令窗口并输入cmd点击确定或者敲击回车键2、在cmd命令行面板上输入ipconfig获取本电脑的ip地址3、在手机浏览器中输入http://192.168.XX.XX:8080 即可 前言 手机上调试电脑运行的项目的前提条件是手机和电脑公用一个局域网&#xff08;也就…

APP 性能优化你掌握的怎么样?简单聊聊?

产品性能是每个技术团队比较关心的一件事&#xff0c;不管是产品上线前到上线后&#xff0c;都需要对产品进行性能监控和优化&#xff0c;如果产品在运行过程中出现了问题&#xff0c;是很影响用户的体验感受。 所以在一些大厂技术团队中&#xff0c;是非常看重个人性能优化的…

面向开发人员的 ChatGPT 提示词教程中文版

面向开发人员的 ChatGPT 提示词教程中文版 1. 指南1-1. 提示的指南1-2. 配置1-3. 提示语原则原则 1: 写出清晰而具体的指示技巧 1: 使用分隔符来清楚地表明输入的不同部分技巧 2: 要求提供结构化的输出技巧 3: 要求模型检查条件是否得到满足技巧 4: "少许样本"提示 原…

为你推荐一款最好用的免费截图工具-Snipaste,截图高清、智能模糊还支持滚动长截图!!!

写文章经常需要插入截图&#xff0c; 但是常常很难有顺手的截图工具&#xff0c; 常见的难题是&#xff1a; 很难滚动长屏截图&#xff0c; 截图中马赛克处理很麻烦&#xff0c; 输出的截图图像质量差。 经过大量的工具使用对比&#xff0c; 这里推荐一个最好用的截图工具。 Sn…

Fotran学习:chapter8函数

1.子程序(subrountine)的使用 把常常用于使用、具有特定功能的程序代码独立出来&#xff0c;封装程子程序&#xff0c;以后调用使用call即可。 program chapter4_exercise !主程序implicit nonecall sub1()call sub2()pauseend program chapter4_exercisesubroutine sub1() !子…

产品经理制,互联网公司发扬光大的

产品经理制&#xff0c;在互联网公司发扬光大 张小龙被称作&#xff1a;七星产品经理 其实&#xff0c;中小企业老板基本是首席产品经理 趣讲大白话&#xff1a;像带孩子一样做产品 【趣讲信息科技160期】 **************************** 产品经理制核心问题解决的是&#xff1a…