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

JVM的生命周期

1.加载(Loading):

在加载阶段,JVM会找到并加载Java字节码文件。加载阶段分为三个步骤:通过类的全限定名找到对应的字节码文件,创建一个与该类相关的Class对象,将类的静态数据结构存储在方法区中。加载完成后,JVM内存中就存在了一个Class对象,它包含了该类的所有属性和方法的信息。

2.验证(Verification):

验证阶段是确保加载的字节码文件符合JVM规范的过程。在验证阶段,JVM会检查字节码的格式、语义以及符号引用的正确性,以防止安全漏洞和运行时错误。验证的目标包括:类文件结构的完整性、语义的正确性和符号引用的验证。

3.准备(Preparation):

在准备阶段,JVM会为类的静态变量分配内存并设置默认初始值。这些静态变量包括基本数据类型和引用类型,它们会被初始化为零值(零值是每种数据类型的默认值,如0、false、null等),而不是类中定义的初始值。此阶段会在方法区中为每个静态变量分配内存空间。

4.解析(Resolution):

解析阶段是将符号引用转换为直接引用的过程。在Java中,类的方法和字段访问采用的是符号引用,而不是直接引用。解析阶段会将这些符号引用转化为直接引用,以便能够正确访问和调用类的方法和字段。解析阶段包括类、字段和方法的解析。

5.初始化(Initialization):

初始化阶段是JVM执行类的初始化代码的过程。类的初始化代码包括静态变量的赋值和静态代码块的执行。在该阶段,JVM会按照类的加载顺序依次初始化每个类,确保所有的静态变量被正确初始化,并执行静态代码块中的代码。初始化阶段是类加载过程的最后一步。

6.使用(Usage):

使用阶段是指JVM执行Java程序的过程。在使用阶段,JVM会按照程序的流程执行相应的指令,并处理方法调用和对象创建等操作。JVM通过执行Java字节码来实际运行程序,包括调用方法、访问字段和创建对象等操作。

7.卸载(Unloading):

卸载阶段是指JVM从内存中卸载不再被使用的类和相关资源。当一个类不再被引用,并且没有正在执行的对象实例时,JVM会卸载该类,并释放其占用的内存空间。卸载过程由垃圾回收器完成,它会检测并回收不再被引用的类和对象。

JVM的生命周期是一个动态的过程,它负责加载、验证、准备、解析、初始化、使用和卸载Java字节码文件。每个阶段都有特定的任务和目标,保证程序能够正确运行并在不再需要时释放资源。

Java虚拟机(JVM)的启动和执行过程分为以下几个步骤:

  1. 加载:JVM首先加载JDK的核心类库以及应用程序所需的其他类。加载过程中包括以下几种方式:

    • 类文件加载:将编译后的Java类文件加载到内存中。
    • 字节码校验:验证加载的字节码是否符合Java语法规范。
    • 字节码转换:将字节码转换成机器码,以便于执行。
  2. 链接:在加载完类文件后,JVM需要进行链接处理,包括以下三个阶段:

    • 验证:检查字节码是否符合JVM规范。
    • 准备:为类变量(静态变量)分配内存空间,并设置默认初始值。
    • 解析:将符号引用转换为直接引用。
  3. 初始化:执行类的初始化代码,包括静态变量的赋值和静态代码块的执行。JVM保证类的初始化在多线程环境下的安全性。

  4. 执行:将字节码转换为机器码,逐行执行机器码指令。执行过程中需要注意以下几点:

    • 进行即时编译(Just-In-Time Compilation):将热点代码(被频繁调用的代码)编译成机器码,以提高执行效率。
    • 垃圾回收(Garbage Collection):在执行过程中,JVM会自动回收不再使用的内存空间,以确保内存的有效利用。
  5. 销毁:当Java程序执行完毕或者出现异常时,JVM会释放所有占用的资源,并终止执行。

JVM的启动和执行流程可以总结为:加载类文件、链接处理、初始化类、执行字节码。通过这一流程,JVM能够实现Java程序的跨平台运行,并提供内存管理和垃圾回收等功能,以确保程序的安全和性能。

JVM(Java Virtual Machine)的退出流程可以分为正常退出和非正常退出两种情况。

  1. 正常退出:

    • JVM收到终止请求,如通过调用System.exit()方法或者通过kill命令结束进程。
    • JVM开始执行退出过程,首先会执行已注册的关闭钩子(Shutdown Hook)。
    • 关闭钩子是一段在JVM正常退出之前执行的代码,可以通过Runtime.addShutdownHook方法注册。
    • JVM的关闭钩子可以用于释放资源、保存状态等操作。
    • 在关闭钩子执行完毕后,JVM执行一些清理操作,如垃圾回收、关闭网络连接等。
    • 最后,JVM完全终止运行,进程退出。
  2. 非正常退出:

    • JVM遇到致命错误,如OutOfMemoryError或StackOverflowError。
    • JVM无法继续执行,并抛出一个异常。
    • 异常的抛出会导致程序所在的线程被终止,然后整个JVM进程退出。

JVM的退出过程可以通过实现一个Shutdown Hook来观察,示例代码如下:

public class ShutdownHookExample {public static void main(String[] args) {// 注册一个关闭钩子Runtime.getRuntime().addShutdownHook(new Thread() {@Overridepublic void run() {System.out.println("Shutting down...");}});// 模拟程序运行try {Thread.sleep(5000); // 程序休眠5秒钟} catch (InterruptedException e) {e.printStackTrace();}// 手动触发退出事件System.exit(0);}
}

该示例程序在运行时注册了一个关闭钩子,并在关闭钩子中打印一条消息。然后程序会休眠5秒钟,之后手动调用System.exit(0)方法触发JVM退出事件。在程序运行时,我们可以观察到在5秒后打印的"Shutting down..."消息,表示关闭钩子被执行。然后JVM会继续执行清理操作并退出。

需要注意的是,关闭钩子的执行顺序是不确定的,不同的钩子可能在不同的线程中执行。因此,如果有多个关闭钩子,它们之间应该是独立的,不依赖于其他钩子的执行顺序。

相关文章:

JVM的生命周期

1.加载(Loading): 在加载阶段,JVM会找到并加载Java字节码文件。加载阶段分为三个步骤:通过类的全限定名找到对应的字节码文件,创建一个与该类相关的Class对象,将类的静态数据结构存储在方法区中…...

ElasticSearch--基本操作

ElasticSearch 完成ES安装 http://101.42.93.208:5601/app/dev_tools#/console 库的操作 创建索引库 请求方式:PUT 请求路径:/索引库名,可以自定义 请求参数:mapping映射 PUT /test {"mappings": {"propertie…...

大数据应用发展史:从搜索引擎时代到机器学习时代

文章目录 搜索引擎时代数据仓库时代数据挖掘时代机器学习时代小结 大数据技术的使用经历了一个发展过程 从最开始的Google在搜索引擎中开始使用大数据技术,到现在无处不在的各种人工智能应用,伴随着大数据技术的发展,大数据应用也从曲高和寡…...

java基础之String的不可变性

目录 概述 String是如何实现不可变的 String为何设计成不可变的 1.缓存和性能优化 2.安全性 3.线程安全性 4.API设计和预测性能 概述 String类的不可变性意味着一旦创建了一个字符串对象,它的值就不能被修改。 String是如何实现不可变的 查看源码 public …...

【JS】Promise详解

概述 在 JavaScript 中,Promise 是一个表示异步操作最终完成或失败的对象。它本质上是一个返回的对象,你可以附加回调函数,而不是将回调传递给函数。 let promise new Promise((resolve, reject) > {let condition true; // 这可以是某…...

原生微信小程序如何动态配置主题颜色及如何调用子组件的方法

一、最终效果 二、步骤 1、在初始化进入项目时,获取当前主题色 2、把主题色定义成全局变量(即在app.js中设置) 3、tabBar也需要定义全局变量,在首页时需要重新赋值 三、具体实现 1、app.js onLaunch () {//获取主题数据this.set…...

Java关键字(1)

Java中的关键字是指被编程语言保留用于特定用途的单词。这些关键字不能用作变量名或标识符。以下是Java中的一些关键字: public:表示公共的,可以被任何类访问。 private:表示私有的,只能被定义该关键字的类访问。 cl…...

【机器学习合集】深度生成模型 ->(个人学习记录笔记)

深度生成模型 深度生成模型基础 1. 监督学习与无监督学习 1.1 监督学习 定义 在真值标签Y的指导下,学习一个映射函数F,使得F(X)Y 判别模型 Discriminative Model,即判别式模型,又称为条件模型,或条件概率模型 生…...

Java将PDF转换为文本

在Java中&#xff0c;你可以使用现有的库来将PDF文件转换为文本。下面是一个简单的示例&#xff0c;使用Apache PDFBox库来实现PDF到文本的转换。首先&#xff0c;确保在你的项目中添加了Apache PDFBox库的依赖。你可以在 Maven 项目中添加以下依赖&#xff1a; <!--Pdf--&g…...

Linux 运维工具之1Panel

一、1Panel 简介 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。 特点&#xff1a; 快速建站&#xff1a;深度集成 Wordpress 和 Halo&#xff0c;域名绑定、SSL 证书配置等一键搞定&#xff1b;高效管理&#xff1a;通过 Web 端轻松管理 Linux 服务器&#xff0…...

深入了解小红书笔记详情API:为内容创新提供动力

一、小红书笔记详情API简介 小红书笔记详情API是一种允许开发者访问小红书平台上的笔记详细数据的接口。通过这个API&#xff0c;我们可以获取笔记的标题、内容、标签、点赞数、评论数等详细信息。这些数据对于内容创作者和品牌来说至关重要&#xff0c;可以帮助他们了解用户喜…...

Animate 2024(Adobe an2024)

Animate 2024是一款由Adobe公司开发的动画和互动内容创作工具&#xff0c;是Flash的演进版本。Animate 2024为设计师和开发者提供了更丰富的功能&#xff0c;让他们能够创建各种类型的动画、交互式内容和多媒体应用程序。 Animate 2024具有以下特点&#xff1a; 强大的设计工…...

尽量避免删改List

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 学习必须往深处挖&…...

【Linux操作系统】探秘Linux奥秘:用户、组、密码及权限管理的解密与实战

&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《操作系统实验室》&#x1f516;诗赋清音&#xff1a;柳垂轻絮拂人衣&#xff0c;心随风舞梦飞。 山川湖海皆可涉&#xff0c;勇者征途逐星辉。 目录 &#x1fa90;1 初识Linux OS &…...

计算机组成原理复习4

习题 练习题 下列不属于系统总线的为&#xff08;&#xff09; a.数据总线 b.地址总线 c.控制总线 d.片内总线 D 系统总线中地址总线的功能是&#xff08;&#xff09; a.选择主存单元地址 b.选择进行信息传输的设备 c.选择外存地址 d.指定主存和I/O设备接口电路的地址 D 解…...

AutoSAR(基础入门篇)3.3-Autosar中RTE的数据一致性与Interface接口

目录 一、RTE的数据一致性 1、什么是数据一致性 2、数据一致性的实现机制 2.1、利用RTE管理<...

超维空间S2无人机使用说明书——52、初级版——使用PID算法进行基于yolo的目标跟踪

引言&#xff1a;在实际工程项目中&#xff0c;为了提高系统的响应速度和稳定性&#xff0c;往往需要采用一定的控制算法进行目标跟踪。这里抛砖引玉&#xff0c;仅采用简单的PID算法进行目标的跟随控制&#xff0c;目标的识别依然采用yolo。对系统要求更高的&#xff0c;可以对…...

<JavaEE> TCP 的通信机制(一) -- 确认应答 和 超时重传

目录 TCP的通信机制的核心特性 一、确认应答 1&#xff09;什么是确认应答&#xff1f; 2&#xff09;如何“确认”&#xff1f; 3&#xff09;如何“应答”&#xff1f; 二、超时重传 1&#xff09;丢包的概念 2&#xff09;什么是超时重传&#xff1f; 3&#xff09…...

Spark任务调度与数据本地性

Apache Spark是一个分布式计算框架&#xff0c;用于处理大规模数据。了解Spark任务调度与数据本地性是构建高效分布式应用程序的关键。本文将深入探讨Spark任务调度的流程、数据本地性的重要性&#xff0c;并提供丰富的示例代码来帮助大家更好地理解这些概念。 Spark任务调度的…...

【论文阅读】Self-Paced Curriculum Learning

论文下载 代码 Supplementary Materials bib: INPROCEEDINGS{,title {Self-Paced Curriculum Learning},author {Lu Jiang and Deyu Meng and Qian Zhao and Shiguang Shan and Alexander Hauptmann},booktitle {AAAI},year {2015},pages {2694--2700} }1. 摘…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...