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

【JVM】一、认识JVM

在这里插入图片描述

文章目录

  • 1、虚拟机
  • 2、Java虚拟机
  • 3、JVM的整体结构
  • 4、Java代码的执行流程
  • 5、JVM的分类
  • 6、JVM的生命周期

1、虚拟机

虚拟机,Virtual Machine,一台虚拟的计算机,用来执行虚拟计算机指令。分为:

  • 系统虚拟机:如VMware,是完全对物理计算机的仿真
  • 程序虚拟机:如JVM,专门为执行单个计算机程序而设计,JVM中执行的指令就是Java字节码指令

不论是哪种类型虚拟机,其上面运行的软件或者程序,都被限制于虚拟机所提供的资源之内。

2、Java虚拟机

JVM,即Java虚拟机,一台处理Java字节码文件(解释为二进制文件)的虚拟计算机,Java程序运行在Java虚拟机内部。

在这里插入图片描述


JVM运行在操作系统之上,并没有与计算机的硬件做直接的交互。(因此,不同的操作系统,对应着不同的JVM)

JVM ⇒ JRE ⇒ JDK三者的关系:

在这里插入图片描述

在这里插入图片描述

3、JVM的整体结构

以HotSpot为例:

在这里插入图片描述

以上架构分三层看:(首先javac编译器将xx.java源文件编译为xx.class字节码文件)

  • 最上层由类装载器将字节码文件加载到内存中,生成一个大的class对象
  • 中间层,其中方法区、堆区是所有线程共享,而栈、程序计数器、寄存器是一个线程一个
  • 最下层,执行引擎里包括解释器、JIT即时编译器、GC垃圾回收器

上面结构图再详细:

在这里插入图片描述

4、Java代码的执行流程

Java做为一种跨平台的语言,一次编译,到处运行。即Java源代码被成功编译为.class字节码后,换平台运行,无需再次编译。

在这里插入图片描述

具体流程为:

  • Java源文件x.java被编译器javac.exe(JDK自带)编译成字节码文件x.class
  • 类装载器加载字节码文件到JVM
  • JVM执行引擎中的解释器将字节码文件处理成二进制文件
  • 操作系统执行二进制文件和硬件进行交互
    在这里插入图片描述

PS:Java虚拟机不关心运行在其内部的程序是用的什么语言,只要是遵循其规范编译的字节码文件,就都能运行。

在这里插入图片描述

换言之,不是牛在Java,而是JVM。Java是跨平台的语言 ⇐ JVM是跨语言的平台

5、JVM的分类

  • Sun Classic VM , 1996 + Java1.0 + 只有解释器,没有JIT即时编译器(因此性能较差)
  • Exact VM,Java1.2,准确式内存管理,可直到内存中某个位置的数据具体是什么类型
  • HotSpot VM,JDK1.3时,成为默认的虚拟机
  • JRockit VM,专注于服务器端,不包含解释器
  • IBM的J9,与上面的HotSpot、JRockit是三大商用虚拟机,2017年开源,命名为Open J9
  • KVM和CDC/CLDC Hotspot
  • Microsoft JVM
  • Taobao JVM,阿里

6、JVM的生命周期

STEP1:启动

JVM的启动时通过引导类加载器bootstrap class loader创建一个初始类initial class来完成的,不同的虚拟机,这个类也不同

STEP2:执行

开始执行Java程序时,JVM开始运行,程序执行结束,JVM也就停止了(jsp看JVM进程,会发现其随着程序的结束而结束)

STEP3:退出
  • 程序正常执行结束,JVM退出
  • 程序执行中遇到异常或错误,且一值向上throw到了main方法,main再抛,就到JVM,JVM退出
  • 操作系统出现错误也会可知JVM进程终止,JVM退出
  • 某个线程调用Runtime类或System类的exit方法,或者说是Runtime类的halt方法(底层是native halt0方法)

在这里插入图片描述

相关文章:

【JVM】一、认识JVM

文章目录 1、虚拟机2、Java虚拟机3、JVM的整体结构4、Java代码的执行流程5、JVM的分类6、JVM的生命周期 1、虚拟机 虚拟机,Virtual Machine,一台虚拟的计算机,用来执行虚拟计算机指令。分为: 系统虚拟机:如VMware&am…...

[SWPUCTF 2021 新生赛]Do_you_know_http已

打开环境 它说用WLLM浏览器打开,使用BP抓包,发送到重发器 修改User-Agent 下一步,访问a.php 这儿他说添加一个本地地址,它给了一个183.224.40.160,我用了发现没用,然后重新添加一个地址:X-Forwa…...

hadoop01_完全分布式搭建

hadoop完全分布式搭建 1 完全分布式介绍 Hadoop运行模式包括:本地模式(计算的数据存在Linux本地,在一台服务器上 自己测试)、伪分布式模式(和集群接轨 HDFS yarn,在一台服务器上执行)、完全分…...

【每日一题】得到山形数组的最少删除次数

文章目录 Tag题目来源解题思路方法一:最长递增子序列 写在最后 Tag 【最长递增子序列】【数组】【2023-12-22】 题目来源 1671. 得到山形数组的最少删除次数 解题思路 方法一:最长递增子序列 前后缀分解 根据前后缀思想,以 nums[i] 为山…...

2023年,为什么汽车依然有很多小毛病?

汽车出现小毛病是一个复杂的问题,其原因涉及到汽车本身的设计、制造质量、维护保养以及使用环境等多个方面。只有汽车制造商、车主和社会各界共同努力,才能够减少汽车的小毛病,提高汽车的可靠性和安全性。 比如,汽车的维护和保养…...

yocto系列讲解[实战篇]93 - 添加Qtwebengine和Browser实例

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 概述集成meta-qt5移植过程中的问题问题1:virtual/libgl set to mesa, not mesa-gl问题2:dmabuf-server-buffer tries to use undecl…...

Python实验报告十一、自定义类模拟三维向量及其运算

一、实验目的: 1、了解如何定义一个类。 2、了解如何定义类的私有数据成员和成员方法。 3、了解如何使用自定义类实例化对象。 二、实验内容: 定义一个三维向量类,并定义相应的特殊方法实现两个该类对象之间的加、减运算(要…...

机器学习 | 聚类Clustering 算法

物以类聚人以群分。 什么是聚类呢? 1、核心思想和原理 聚类的目的 同簇高相似度 不同簇高相异度 同类尽量相聚 不同类尽量分离 聚类和分类的区别 分类 classification 监督学习 训练获得分类器 预测未知数据 聚类 clustering 无监督学习,不关心类别标签 …...

IntelliJ IDEA 2023.3 新功能介绍

IntelliJ IDEA 2023.3 在众多领域进行了全面的改进,引入了许多令人期待的功能和增强体验。以下是该版本的一些关键亮点: IntelliJ IDEA mac版下载 macappbox.com/a/intellij-idea-for-mac.html 1. AI Assistant 的全面推出 IntelliJ IDEA 2023.3 中&am…...

2. 行为模式 - 命令模式

亦称: 动作、事务、Action、Transaction、Command 意图 命令模式是一种行为设计模式, 它可将请求转换为一个包含与请求相关的所有信息的独立对象。 该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其放入队列中, 且能实现可撤销…...

Java智慧工地源码 SAAS智慧工地源码 智慧工地管理可视化平台源码 带移动APP

一、系统主要功能介绍 系统功能介绍: 【项目人员管理】 1. 项目管理:项目名称、施工单位名称、项目地址、项目地址、总造价、总面积、施工准可证、开工日期、计划竣工日期、项目状态等。 2. 人员信息管理:支持身份证及人脸信息采集&#…...

php学习02-php标记风格

<?php echo "这是xml格式风格" ?><script language"php">echo 脚本风格标记 </script><% echo "这是asp格式风格" %>推荐使用xml格式风格 如果要使用简短风格和ASP风格&#xff0c;需要在php.ini中对其进行配置&#…...

13.1 jar文件

13.1 jar文件 java归档&#xff08;JAR&#xff09;文件&#xff0c;将应用程序打包后仅提供的单独文件&#xff0c;可包含类文件&#xff0c;也可包含图片、声音等其他类型文件。 JAR文件使用了大家熟悉的Zip压缩格式&#xff0c;pack200为通常的zip压缩算法&#xff0c;对类…...

论文阅读:Long-Term Visual Simultaneous Localization and Mapping

论文摘要指出&#xff0c;为了在长期变化的环境中准确进行定位&#xff0c;提出了一种新型的长期视觉SLAM&#xff08;同步定位与地图构建&#xff09;系统&#xff0c;该系统具备地图预测和动态物体移除功能。系统首先设计了一个高效的视觉点云匹配算法&#xff0c;将2D像素信…...

Docker 学习总结(80)—— 轻松驾驭容器,玩转 LazyDocker

前言 LazyDocker 是一个用户友好的命令行工具,简化了 Docker 的管理。它能够通过单一命令执行常见的 Docker 任务,如启动、停止、重启和移除容器。LazyDocker 还能轻松查看日志、清理未使用的容器和镜像,并自定义指标。 简绍 LazyDocker 是一个用户友好的 CLI 工具,可以轻…...

Android 13 - Media框架(24)- MediaCodecList

这一节我们要了解 MediaCodecList 中的信息是如何加载的&#xff0c;以及这些信息是如何使用到的。 // static sp<IMediaCodecList> MediaCodecList::getLocalInstance() {Mutex::Autolock autoLock(sInitMutex);if (sCodecList nullptr) {MediaCodecList *codecList n…...

【稳定检索|投稿优惠】2024年交通运输与能源动力国际学术会议(IACTEP 2024)

2024年交通运输与能源动力国际学术会议(IACTEP 2024) 2024 International Academic Conference on Transportation and Energy Power(IACTEP) 一、【会议简介】 2024年交通运输与能源动力国际学术会议(IACTEP 2024)将在美丽的三亚盛大启幕。本次会议将聚焦交通运输与能源动力等…...

React学习计划-React16--React基础(三)收集表单数据、高阶函数柯里化、类的复习

1. 收集表单数据 包含表单的组件分类 受控组件——页面中所有输入类的DOM,随着输入&#xff0c;把值存维护在状态里&#xff0c;需要用的时候去状态里取值&#xff08;推荐&#xff0c;避免了过渡使用ref&#xff09;非受控组件——页面中所有输入类的DOM&#xff0c;现用现取…...

研究生课程 |《数值分析》复习

搭配往年真题册食用最佳。...

55 回溯算法解黄金矿工问题

问题描述&#xff1a;你要开发一座金矿&#xff0c;地质学家已经探明了这座金矿中的资源分布&#xff0c;并用大小为m*n的网格grid进行了标注&#xff0c;每个单元格中的整数就表示这一单元格中的黄金数量&#xff1b;如果单元格是空的&#xff0c;那么就是0&#xff0c;为了使…...

用ChatGPT 10分钟生成TikTok爆款脚本:5步工作流+3类高转化话术模板(附Prompt库下载)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ChatGPT TikTok视频创意 在短视频爆发式增长的今天&#xff0c;TikTok 内容创作者亟需高效、可复用的创意生成机制。ChatGPT 可作为智能脚本引擎&#xff0c;将抽象主题快速转化为结构化、高传播性的视…...

诛仙手游多开最多几开?用什么云手机比较好?

很多喜欢玩诛仙手游的朋友们都喜欢多开&#xff0c;但是今天小编告诉你们多开也不能开太多哦&#xff0c;要选择合适的云手机多开才行&#xff0c;不然同一个ip多开很容易封号&#xff0c;今天小宝就来给大家分析诛仙多开几个比较合适&#xff0c;以及用什么云手机多开不容易封…...

Linux驱动开发避坑指南:手把手教你实现三种mmap内存映射(附完整代码)

Linux驱动开发实战&#xff1a;三种mmap内存映射方案深度解析与性能对比 在嵌入式系统和图形处理领域&#xff0c;直接访问内核内存的需求日益增长。想象一下这样的场景&#xff1a;你正在开发一个视频处理驱动&#xff0c;需要将摄像头采集的高清帧数据传输到用户空间进行实时…...

LangForce方法:强化VLA模型语言依赖,提升分布外泛化能力并保留语言核心功能

LangForce方法&#xff1a;强化VLA模型语言依赖&#xff0c;提升分布外泛化能力并保留语言核心功能当前VLA模型常依赖视觉线索而非语言指令&#xff0c;在新场景下表现不佳。论文提出的LangForce方法&#xff0c;通过引入对数似然比损失&#xff0c;强化模型对语言的依赖&#…...

别再傻等下载了!手把手教你用wget离线搞定sentence_transformers模型(以all-MiniLM-L6-v2为例)

高效离线部署sentence_transformers模型&#xff1a;wget实战指南 1. 为什么需要离线下载方案 在自然语言处理领域&#xff0c;预训练模型已成为各类文本理解任务的基础设施。然而&#xff0c;当我们需要在生产环境或受限网络条件下部署这些模型时&#xff0c;直接通过Python库…...

nslookup-mcp:基于MCP协议的DNS查询工具部署与实战指南

1. 项目概述&#xff1a;一个为安全与开发场景设计的DNS查询工具如果你经常需要排查网络问题、分析域名配置&#xff0c;或者像我一样&#xff0c;在渗透测试或安全研究时&#xff0c;需要快速、批量地查询DNS记录&#xff0c;那么命令行里的nslookup或dig工具可能已经让你感到…...

3个技巧快速掌握arp-scan局域网设备发现

3个技巧快速掌握arp-scan局域网设备发现 【免费下载链接】arp-scan The ARP Scanner 项目地址: https://gitcode.com/gh_mirrors/ar/arp-scan 在网络管理工作中&#xff0c;您是否经常遇到这样的困扰&#xff1a;明明设备连接了网络&#xff0c;却无法通过常规ping命令发…...

NetApp FAS FC SAN存储替换实战:从HP MSA到ONTAP的平滑迁移

1. 项目背景与环境摸底 这次遇到的存储替换项目挺典型的——客户原先用的是HP MSA系列SAN存储&#xff0c;现在要升级到NetApp FAS2750全闪存阵列。现场环境是标准的VMware虚拟化平台&#xff0c;通过FC协议连接存储。说实话&#xff0c;第一次看到旧存储配置时我就发现几个隐患…...

AI智能体技能超市:用SKILL.md标准打破AI能力壁垒

1. 项目概述&#xff1a;一个为AI智能体准备的“技能超市” 如果你和我一样&#xff0c;每天都在和各种AI编程助手打交道——Cursor、Claude Code、GitHub Copilot&#xff0c;那你肯定也遇到过这样的场景&#xff1a;想让AI帮你生成一张产品原型图&#xff0c;结果它告诉你“我…...

Attu:向量数据库可视化管理工具的终极指南

Attu&#xff1a;向量数据库可视化管理工具的终极指南 【免费下载链接】attu The Best GUI for Milvus 项目地址: https://gitcode.com/gh_mirrors/at/attu 还在为复杂的向量数据库命令行操作而烦恼吗&#xff1f;Attu作为Milvus向量数据库的官方图形化管理工具&#xf…...