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

JVM:类的生命周期

文章目录

  • 一、介绍
  • 二、加载阶段
  • 三、连接阶段
    • 1、验证阶段
    • 2、准备阶段
    • 3、解析阶段
  • 四、初始化阶段

一、介绍

类的生命周期描述了一个类加载、连接(验证、准备和解析)、初始化、使用、卸载的整个过程。

二、加载阶段

  • 加载(Loading)阶段第一步是类加载器根据类的权限定名通过不同的渠道以二进制的方式获取字节码信息。程序员可以使用Java代码扩展不同的渠道。
    在这里插入图片描述
  • 类加载器在加载完类之后,Java虚拟机会将字节码的信息保存到方法区中。生成一个InstanceKlass对象,保存类的所有信息,里面还包含实现特定功能比如多态的信息。
    在这里插入图片描述- 同时,Java虚拟机还会再堆中生成一份与方法区中的数据类似的java.lang.Class对象。作用是在Java代码中去获取类的信息以及存储静态字段的数据。
    在这里插入图片描述
  • 对于开发者来说,只需要访问堆中的Class对象而不需要访问方法区中的所有信息。这样Java虚拟机就能很好地控制开发者访问数据的范围。

查看内存中的对象

  • 使用JDK自带的hsdb工具查看Java虚拟机内存信息。工具位于JDK安装目录下lib文件夹中的sa-jdi.jar中。
  • 启动命令:java -cp sa-jdi.jar sun.jvm.hotspot.HSDB
    在这里插入图片描述

三、连接阶段

1、验证阶段

  • 连接(Linking)阶段的第一个环节是验证,验证的主要目的是检测Java字节码文件是否遵守了《Java虚拟机规范》中的约束。这个阶段一般不需要程序员参与。
  • 主要包含如下四个部分,详见《Java虚拟机规范》:
    • 文件格式验证,比如文件是否以0xCAFEBABE开头,主次版本号是否满足当前Java虚拟机版本要求。
      在这里插入图片描述
    • 元信息验证,例如类必须有父类(super不能为空)
      在这里插入图片描述
    • 验证程序执行指令的语义,比如方法内的指令执行到一半强行跳转到其他方法中去。
    • 符号引用验证,例如是否访问了其他类中private的方法等。

2、准备阶段

  • 准备阶段为静态变量(static)分配内存并设置初始值。
    • 准备阶段只会给静态变量赋初始值,而每个基本类型和引用类型都有其初始值。
      在这里插入图片描述
    • final修饰的基本数据类型的静态变量,准备阶段直接会将代码中的值进行赋值。

3、解析阶段

  • 解析阶段主要是将常量池中的符号引用替换为直接引用。
  • 符号引用就是在字节码文件中使用编号来访问常量池中的内容。

四、初始化阶段

  • 初始化阶段会执行静态代码块中的代码,并为静态变量赋值。
  • 初始化阶段会执行字节码文件中clinit部分的字节码指令。clinit方法中的执行顺序与Java中编写的顺序是一致的。
    在这里插入图片描述

哪几种方式会导致类的初始化

  • 添加 -XX:+TraceClassLoading参数可以打印出加载并初始化的类。
  • 访问一个类的静态变量或者静态方法,注意变量是final修饰的并且等号右边是常量不会触发初始化。

相关文章:

JVM:类的生命周期

文章目录 一、介绍二、加载阶段三、连接阶段1、验证阶段2、准备阶段3、解析阶段 四、初始化阶段 一、介绍 类的生命周期描述了一个类加载、连接(验证、准备和解析)、初始化、使用、卸载的整个过程。 二、加载阶段 加载(Loading&#xff09…...

几种不同的方式禁止IP访问网站(PHP、Nginx、Apache设置方法)

1、PHP禁止IP和IP段访问 <?//禁止某个IP$banned_ip array ("127.0.0.1",//"119.6.20.66","192.168.1.4");if ( in_array( getenv("REMOTE_ADDR"), $banned_ip ) ){die ("您的IP禁止访问&#xff01;");}//禁止某个IP段…...

经典 SQL 数据库笔试题及答案整理

最近有蛮多小伙伴在跳槽找工作&#xff0c;但对于年限稍短的软件测试工程师&#xff0c;难免会需要进行笔试&#xff0c;而在笔试中&#xff0c;基本都会碰到一道关于数据库的大题&#xff0c;今天这篇文章呢&#xff0c;就收录了下最近学员反馈上来的一些数据库笔试题&#xf…...

JS代码动态打印404页面源码

JS代码动态打印404页面源码&#xff0c;适合做网站错误页&#xff0c;具有js动态打印效果&#xff0c;喜欢的朋友可以拿去 源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务…...

从“钓”到“管”:EasyCVR一体化视频解决方案助力水域安全管理

一、背景 随着城市化进程的加快&#xff0c;越来越多的市民热衷于钓鱼活动。钓鱼活动在带来乐趣的同时&#xff0c;也伴随着一定的安全隐患。尤其是在一些危险水域&#xff0c;也经常出现垂钓者的身影&#xff0c;非法垂钓&#xff0c;这给城市管理带来了不小的阻力。传统的人…...

springboot大学生竞赛管理系统-计算机毕业设计源码37276

摘 要 随着教育信息化的不断发展&#xff0c;大学生竞赛已成为高校教育的重要组成部分。传统的竞赛组织和管理方式存在着诸多问题&#xff0c;如信息不透明、效率低下、管理不便等。为了解决这些问题&#xff0c;提高竞赛组织和管理效率&#xff0c;本文设计并实现了一个基于Sp…...

提高LabVIEW软件的健壮性

提高LabVIEW软件的健壮性&#xff0c;即增强其在各种操作条件下的可靠性和稳定性&#xff0c;是开发过程中非常重要的一环。健壮的软件能够在面对意外输入、极端环境和系统故障时依然表现出色&#xff0c;确保系统的连续性和可靠性。以下是详细的方法和策略&#xff0c;从多个角…...

不同深度的埋点事件如何微妙地改变广告系列的成本

/ 作者简介 / 本篇文章来自现金贷领域市场投放大佬 亮哥 的投稿&#xff0c;主要分享了在广告投放过程中&#xff0c;不同深度的埋点事件如何微妙地改变广告系列的成本的相关经验&#xff0c;相信会对大家有所帮助&#xff01;同时也感谢作者贡献的精彩文章。 / 前言 …...

Perl 语言进阶学习

Perl 语言进阶学习 在掌握 Perl 的基础知识后&#xff0c;进一步学习 Perl 的高级特性和应用&#xff0c;将有助于提升编程效率和解决复杂问题的能力。本文将详细介绍 Perl 语言的高级功能、最佳实践以及实际应用案例。 目录 高级数据结构 多维数组复杂数据结构 引用与匿名数…...

el-input-number @input.native触发,修改值失效

试过在方法里用this.$set()、this.$next(()>{})没生效 解决方案&#xff1a;如下...

这些实用工具函数都撕不明白还敢说自己是高级前端

很多工具函数大家都知道,比如防抖函数,节流函数,深拷贝函数等,一问都会,一写就废,用lodash的掘友们,是不是基本功都退化了?CV工程师请不要把基本功给弄丢了,下面我来整理一下项目中常用的工具函数,多练练吧,不然面试现场写不出来多丢人啊! 1.防抖函数 /*** 防抖函…...

git 如何查看 commit 77062497

在Git中&#xff0c;要查看特定commit&#xff08;如77062497&#xff09;的详细信息&#xff0c;你可以使用git show命令。如果77062497是一个完整的commit哈希值&#xff08;在Git中&#xff0c;commit哈希值通常是40位的十六进制数&#xff09;&#xff0c;你可能需要输入完…...

纯CSS瀑布流

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>瀑布流布局</title> <style>/* 瀑布…...

vue3 路由跳转新页面并传递参数与获取参数

打开新标签页面传递参数&#xff08;useRouter &#xff09; import { useRouter } from vue-router const uRouter useRouter() let page uRouter.resolve({path:/mapRollerShutter,query:{type:Split,key:1}})window.open(page.href,_blank)页面接收&#xff08;useRoute …...

NSAT-8000电源检测软件测试砖式电源模块的方案及优势

砖式电源模块类型 砖式电源&#xff0c;顾名思义其外观尺寸像块砖&#xff0c;具有体积小、功率大、安装方便等特点。砖式电源模块具备高可靠性和高稳定性&#xff0c;能够为设备提供稳定的电力输出&#xff0c;在通信、工业、医疗等领域广泛应用。 根据尺寸大小&#xff0c;砖…...

短链接服务Octopus-搭建实战

[WARNING] The POM for cn.throwx:octopus-contract:jar:1.0-SNAPSHOT is missing, no dependency information available 解决方案&#xff1a; cd octopus-contract/ mvn install -------------- ➜ octopus-server git:(master) ✗ mkdir -p /data/log-center/octopus/s…...

STM32(二):STM32工作原理

0、参考1、寄存器和存储器基本概念&#xff08;1&#xff09;基本概念&#xff08;2&#xff09;主要区别&#xff08;3&#xff09;联系&#xff08;4&#xff09;实际应用中的案例&#xff08;5&#xff09;总结&#xff08;6&#xff09;一些名词解释 2、STM32指南者板子-存…...

真实工作项目Java使用apache.poi生成word

加油&#xff0c;新时代打工人&#xff01; 将实体类利用poi转成Word文件 demo示例 package com.fqpais.util;import com.fqpais.business.domain.TestReportTemplate; import com.fqpais.common.utils.StringUtils; import org.apache.poi.xwpf.usermodel.*; import org.slf4…...

[Python自动化办公]--从网页登录网易邮箱进行邮件搜索并下载邮件附件

[Python自动化办公]–从网页登录网易邮箱进行邮件搜索并下载邮件附件 使用说明 ​ 本文使用Python的selenium库进行操作邮箱登录、固定名称搜索邮件并下载附件&#xff0c;Python版本&#xff1a;3.9.16, selenium版本&#xff1a;4.19.0&#xff0c;EdgeBrowser版本:126.0.2…...

mysql8多值索引

MySQL8新出了一个多值索引&#xff0c;我还没体验过呢&#xff0c;今天试一试。 建表 我先建个表试一试多值索引的效果。我粗略地看了下多值索引的介绍&#xff0c;发现是只适用于数组类型的。所以我建一个含有数组字段的表试一试。语法还是挺麻烦的&#xff1a; create tabl…...

MT3055 交换排列

1.思路 若数对为&#xff08;1&#xff0c;4&#xff09;和&#xff08;4&#xff0c;7&#xff09;&#xff0c;则说明14可以互换&#xff0c;47可以互换&#xff0c;并且17也可以互换。所以把可以交换的元素放到一个集合中。 例如样例1&#xff1a;有三个集合&#xff0c;…...

Zkeys三方登录模块支持QQ、支付宝登录

1&#xff0c;覆盖到根目录&#xff0c;并导入update.sql数据库文件到Zkeys数据库里 2. 后台系统权限管理&#xff0c;配置管理员权限-系统类别-找到云外科技&#xff0c;全部打勾 3&#xff0c;后台系统设置找到云外快捷登录模块填写相应的插件授权配置和登录权限配置&#x…...

数字探秘:用神经网络解密MNIST数据集中的数字!

用神经网络解密MNIST数据集中的数字&#xff01; 一. 介绍1.1 MNIST数据集简介1.2 MLP&#xff08;多层感知器&#xff09;模型介绍1.3 目标&#xff1a;使用MLP模型对MNIST数据集中的0-9数字进行分类 二.数据预处理2.1 数据集的获取与加载2.2 数据集的探索性分析&#xff08;E…...

11个IT运维领域必考证书,每一个都含金量极高

这几年&#xff0c;网络方向里&#xff0c;IT运维其实还是挺吃香的。 运维人员的职责不仅仅是确保系统的正常运行&#xff0c;还需要应对突发事件、优化性能以及保障信息安全。 面对如此复杂的工作环境&#xff0c;拥有专业认证不仅是对自身技能的肯定&#xff0c;更是提升职业…...

VScode 常用插件

基础开发插件 Chinese (Simplified)&#xff08;简体中文语言包&#xff09;&#xff1a;这是适用于VS Code的中文&#xff08;简体&#xff09;语言包&#xff0c;适用于英语不太流利的用户。Auto Rename Tag&#xff1a;这个插件可以同步修改HTML/XML标签&#xff0c;当用户修…...

299k stars利用Public APIs提升开发效率:探索APILayer提供的开源资源

299k stars利用Public APIs提升开发效率&#xff1a;探索APILayer提供的开源资源 在现代软件开发中&#xff0c;API&#xff08;应用程序接口&#xff09;是实现应用间通信和功能扩展的关键工具。公共API&#xff08;Public APIs&#xff09;则为开发者提供了宝贵的资源&#…...

在目标检测数据集上微调Florence-2

Florence-2是由微软开源的轻量级视觉-语言模型,采用MIT许可。该模型在任务如图像描述、目标检测、定位和分割中展示了强大的零样本和微调能力。 图1。图示展示了每个任务所表达的空间层次和语义细粒度水平。来源:Florence-2:推进多种视觉任务的统一表示。 该模型将图…...

AI提示词:AI辅导「数学作业」

辅导孩子作业对许多家长来说可能是一件头疼的事&#xff0c;但这部分工作可以在一定程度上交给AI来完成。 打开ChatGPT4,输入以下内容&#xff1a; # Role 数学辅导专家## Profile - author: 姜小尘 - version: 02 - LLM: Kimi - language: 中文 - description: 专门为小学生…...

odoo文档的安装

步骤 1: 安装必要的软件 确保你已经安装了Git和Python 3.6、3.7或3.8之一。 步骤 2: 克隆 Odoo 文档存储库 打开终端&#xff0c;然后使用Git克隆Odoo的文档存储库。 git clone https://github.com/odoo/documentation.git cd documentation步骤 3: 安装 Python 依赖项 …...

02STM32软件安装新建工程

STM32软件安装&新建工程 1.软件安装&#xff1a;1.1Keil5 MDK安装1.2安装器件支持包离线安装支持包在线安装支持包 1.3软件注册&#xff1a;1.4安装驱动STLINK驱动JLink驱动在此文件夹下USB转串口 2.新建工程2.1STM32开发方式&#xff1a;1.寄存器2.标准库3.HAL库 固件库压…...

西安优秀的集团门户网站建设费用/搜索引擎优化关键词

http://www.port80software.com/support/p80tools转载于:https://www.cnblogs.com/relang99/archive/2007/10/22/933085.html...

wordpress 微语/seo推广排名重要吗

A<-na.omit(A)A可以是vector(list),data frame或matrix。如果A是data frame或matrix&#xff0c;则同一行如果有一个NA&#xff0c;这一行都会被删除。转载于:https://blog.51cto.com/tao975/1391217...

做百度推广网站咱们做/什么是关键词

web自动化测试环境配置(JDK) 使用selenium工具做自动化测试之前&#xff0c;首先要做的准备工作是配置一下web自动化测试的环境。 1.下载jdk http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 根据自己电脑的系统选择对应的包&#xff0c…...

郑州做网站的多不多/百度知道登录

目录 一.什么是火墙 二. iptables和filrewalld两种工具的切换 三.firewalld 1.火墙的域 2.设定原理及数据存储 3.firewalld 的管理命令 4.firewalld高级规则 三.iptables 1.五条链 2.三张表 3.iptables 4.数据包状态 5.dnat,snat 一.什么是火墙 Natfilter 是集成到lin…...

宁波网站建设优化/app下载推广平台

首先说明的是我不懂绘画 最经请朋友帮忙处理两张照片&#xff0c;当看到结果时&#xff0c;非常不满意 因为一看就是PS的 以前也请他处理过一些其它非人物的照片&#xff0c;效果挺好 这次是为什么&#xff1f; 我想&#xff0c;涉及到人的图像时&#xff0c;我们的脑海是有参照…...

网站建设步骤 教 程/优化科技

1) 字符串指针变量是个变量&#xff0c;指向字符串的首地址&#xff1b;而字符串数组名是个常量&#xff0c;为字符串数组第一个元素的地址&#xff1b;2)字符串指针变量可以赋值&#xff0c;而字符串数组名不能赋值&#xff1b;对于字符数组只能对各个元素赋值&#xff0c;不能…...