JVM原理(十一):JVM虚拟机六种必需对类进行初始化的情况

        Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。Java天生可以动态扩展的语言特性就是依赖运行期间动态加载和动态链接这个特点实现的。

1. 类加载的时机

一个类型从被加载到虚拟机内存中开始,到卸载为止,它的整个生命周期将会经过 加载、验证、准备、解析、初始化、使用、卸载七个阶段。其中 验证、准备、解析三个部分统称为 连接

加载、验证、准备、初始化和卸载这五个步骤是不变的,但是解析却不一定:它在某些情况下可以在初始化阶段之后再开始,这是为了支持Java语言的运行是的绑定特性(动态绑定或者晚期绑定)。解析时间具体由虚拟机自己掌握

《Java虚拟机规范》严格规定有且只有六种情况必需对类进行初始化

  1. 遇到new、getstatic、 putstatic或invokestatic这 四条字节码指令时,如果类型没有进行过初始化,则需要先触发其初始化阶段。能够生成这四条指令的典型Java代码场景有:

    1. 使用new关键字实例化对象的时候。

    2. 读取或设置一个类型的静态字段(被fnal修饰、已在编译期把结果放入常量池的静态字段除外)的时候。

    3. 调用一个类型的静态方法的时候。

  2. 使用java. langeflect包的方法对类型进行反射调用的时候,如果类型没有进行过初始化,则需要先触发其初始化。

  3. 当初始化类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化。

  4. 当虚拟机启动时,用户需要指定一个要执行的主类( 包含main)方法的那个类),虚拟机会先初始化这个主类。

  5. 当使用JDK 7新加入的动态语言支持时,如果- - -个java. lang invoke. MethodHandle实例最后的解析结果为REF_ getStatic、 REF_ putStatic、 REF_ invokeStatic、 REF newInvokeSpecial四种 类型的方法句柄,并且这个方法句柄对应的类没有进行过初始化,则需要先触发其初始化。

  6. 当一个接口中定义了JDK 8新加入的默认方法(被default关键字修饰的接口方法)时,如果有这个接口的实现类发生了初始化,那该接口要在其之前被初始化。


简化:1.使用new关键字,调用类中的静态属性,调用类中到的静态方法 2.反射调用一个类 3.子类进行初始化 4.类为启动类 5.类的初始化导致实现的接口初始化 6.动态语言

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年爬取BOSS直聘的操作

SCrapy框架实现对BOSS直聘的爬取 文章目录 SCrapy框架实现对BOSS直聘的爬取对SCrapy框架的一个简单认识Scrapy 组件的作用Scrapy 数据流 1. 测试反爬2. 定义一个下载中间件类,截取spiders的请求(中间件直接截取请求,并且返回给Spider进行数据解析&#x…

动态住宅代理IP的优势是什么?什么地方用到?

在大数据时代的背景下,代理IP成为了很多企业顺利开展的重要工具。代理IP地址可以分为住宅代理IP地址和数据中心代理IP地址。选择住宅代理IP的好处是可以实现真正的高匿名性,而使用数据中心代理IP可能会暴露自己使用代理的情况。 住宅代理IP是指互联网服务…

Android存储权限梳理及api接口调用

Android存储权限梳理及api接口调用 背景 Android开发中需要了解android 存储权限管理和对应的api使用逻辑。 概述 Android系统的文件存储按存储介质类型分为内部存储和外部存储,按存储目录类型分为私有目录和公共目录;对于Android系统中的进程来说&a…

【力扣 - 每日一题】3099. 哈沙德数 | 模拟 (Go/C++)

题目内容 如果一个整数能够被其各个数位上的数字之和整除,则称之为 哈沙德数(Harshad number)。给你一个整数 x 。如果 x 是 哈沙德数 ,则返回 x 各个数位上的数字之和,否则,返回 -1 。 示例 1&#xff1…

修改CentOS7 yum源

修改CentOS默认yum源为阿里镜像源 备份系统自带yum源配置文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 下载ailiyun的yum源配置文件 CentOS7 yum源如下: wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun…

按是否手工执行测试的角度划分:手工测试、自动化测试

1.手工测试(Manual testing) 手工测试是由人一个一个的输入用例,然后观察结果,和机器测试相对应,属于比较原始但是必须的一个步骤。 由专门的测试人员从用户视角来验证软件是否满足设计要求的行为。 更适用针对深度…

如何批量创建、提取和重命名文件夹!!!

你是否还在一个一个手动创建文件名! 你是否还在一个一个手动提取文件名! 你是否还在一个一个手动修改文件名! 请随小生一起批量自动创建、提取、重命名! 1、批量创建文件夹 【案例】创建1日-31日共31个文件夹 【第一步】在A列…

Atom CMS v2.0 SQL 注入漏洞(CVE-2022-25488)

前言 CVE-2022-25488 是一个发现于 Telesquare SDT-CW3B1 设备中的命令注入漏洞。这一漏洞可以被未经认证的远程攻击者利用,通过特殊构造的 HTTP 请求在设备上执行任意命令。以下是关于该漏洞的详细信息: 漏洞详细信息 漏洞编号: CVE-2022-25488影响范…

统一开放平台实现方案(访微信SDK)

需求分析 在互联中,我们的服务是不对外开放的,但是有先场景下我们可以对外开放,但是必须是系统所允许的用户才可以,这样做一方面保证安全,另一方面可以提升平台的能力,比如调用微信的接口必须要进行微信开…

统计信号处理基础 习题解答11-11

题目 考虑矢量MAP估计量 证明这个估计量对于代价函数 使贝叶斯风险最小。其中:, ,且. 解答 贝叶斯风险函数: 基于概率密度的非负特性,上述对积分要求最小,那就需要内层积分达到最小。令内层积分为: 上述积…

为什么网上商店需要翻译成其他语言

网上商店不仅仅是一个可以买到商品的网站。它是一个完整的电子商务平台,为来自世界各地的用户提供购买所需物品的机会。但是,为了让这些用户舒适地使用网站,需要高质量的翻译和本地化。 本地化是指产品或服务适应特定文化或市场的过程。它包…

匠心独运:红酒与手工艺的很好结合

在岁月的长河中,红酒与手工艺都以其不同的魅力和技艺,书写着各自的故事。当这两者相遇,仿佛是一场跨越时空的对话,不仅展现了匠心独运的技艺之美,更在无声中诉说着对品质与生活的热爱。今天,就让我们一起探…

「算法题」二分查找算法演示

一个样式更加美观大方的HTML页面示例,其中包括了二分查找算法的演示。 布局描述 页面主体使用白色背景,加上轻微的阴影和圆角边框,使页面看起来更加精致。输入框和按钮使用了更加现代的样式,包括圆角边框和悬浮效果。按钮使用了鲜明的颜色,以吸引用户点击。搜索结果显示时…

html+js+css登录注册界面

拥有向服务器发送登录或注册数据并接收返回数据的功能 点赞关注 界面 源代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>Login and Registration Form</title> <style> * …

linux命令行操作

一、看二进制文件 od -t x1 1.txt | less 二、看信号 kill -l man 7 signal 三、查看当前进程的pid号 echo $$

44.实现管理HOOK点的链表对象

上一个内容&#xff1a;43.实现HOOK接管寄存器数据 以 43.实现HOOK接管寄存器数据 它的代码为基础进行修改 首先创建一个类 这里创建的名为HOOKPOINT.h HOOKPOINT.cpp文件里面的内容 #include "pch.h" #include "HOOKPOINT.h"HOOKPOINT::HOOKPOINT() {…

钉钉机器人接入Dify工作流

实现钉钉机器人接入dify工作流&#xff0c;完成ai 流式问答 代码地址 有用的话点个star github地址 效果 配置使用 修改.env_template文件 为.env 设置.env文件内的环境变量 API_KEY: dify的api_keyAPI_URL: dify 的api接口CLIENT_ID : 钉钉机器人应用的idCLIENT_SECRET:钉…

Arthas实战(1)- 运行Arthas

1. 下载Arthas 下载到服务器&#xff1a; wget https://github.com/alibaba/arthas/releases/download/arthas-all-3.7.1/arthas-bin.zip解压 Arthas unzip arthas-bin.zip -d arthas删除压缩包 rm -f arthas-bin.zip 2. 启动Arthas 运行 Arthas java -jar arthas/arthas-bo…

高编:共享内存(key)

system v &#xff1a; 共享内存 信号量集 IPC对象操作通用框架&#xff1a; 0x ftok key值 > 申请 》读写 》关闭 》卸载 优点&#xff1a; 共享内存效率高没有读写阻塞 操作流程&#xff1a; key 》申请对象 》映射对象》读写对象》撤销映射 》删除对象…

Django 一对一关系

作用&#xff1a; 两个数据库表建立外键关系当外键表的数据被删除时&#xff0c;主表的数据也会一并删除。 1&#xff0c;添加表模型 Test/app8/views.pyfrom django.db import modelsclass User(models.Model):username models.CharField(max_length50, uniqueTrue)email …