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

【JVM基础01】——介绍-初识JVM运行流程

目录

  • 1- 引言:初识JVM
    • 1-1 JVM是什么?(What)
      • 1-1-1 概念
      • 1-1-2 优点
    • 1-2 为什么学习JVM?(Why)
  • 2- 核心:JVM工作的原理(How)
    • ⭐2-1 JVM 的组成部分及工作流程
    • 2-2 学习侧重点
  • 3- 小结(知识点大纲):
    • 3-1 JVM 组成
    • 3-2 类加载器
    • 3-3 垃圾回收
    • 3-4 JVM实践


1- 引言:初识JVM

1-1 JVM是什么?(What)

1-1-1 概念

  • Java Virtual Machine :JAVA运行时环境(java 二进制字节码的运行环境)
  • Java 的二进制字节码的运行环境。我们都知道 Java 代码想要运行的话,就必须得先经过编译,之后编译成 .class 文件才能运行,JVM就是 .class 二进制字节码的运行环境。

1-1-2 优点

  1. 一次编译,到处执行
  • JVM实现一次编译,到处运行的原理是通过屏蔽操作系统的差异来实现的。具体来说,Java代码编译成二进制字节码后,这些字节码在不同操作系统上的JVM中都可以运行。
  • JVM作为一个软件层,运行在操作系统上,无论是 Windows 还是 Linux,真正运行 Java 代码的是JVM 而不是操作系统。因此,JVM 使得 Java 能够跨平台执行,实现了“一次编写,到处运行”。

image.png

  1. 自动内存管理,垃圾回收机制
  • JVM的第二个优点是自动内存管理和垃圾回收机制。与C语言需要程序员手动管理内存不同,Java虚拟机通过自动垃圾回收功能,大大减轻了程序员的负担,减少了内存泄漏的风险,从而提高了程序的稳定性和开发效率。

1-2 为什么学习JVM?(Why)

  • 学习 JVM 以便我们能够 深入理解Java,一旦掌握了 JVM,也就知道了 Java 的运行机制,特别对于排查问题的能力将会有大幅度提升。
    • ① 了解 JAVA 运行机制
    • ② 提升排查问题的能力(内存泄漏、CPU飙升等)

2- 核心:JVM工作的原理(How)

⭐2-1 JVM 的组成部分及工作流程

image.png


  1. Java源代码到类加载子系统

作用: 将Java源代码转化为JVM能够理解和执行的格式,并将这些格式正确加载到JVM中。

  • Java Source (Java源代码):编写的 Java 源代码文件,通常以 .java 为扩展名。
  • Java Class (Java类文件):通过Java编译器(javac)将Java源代码编译成字节码文件,通常以 .class 为扩展名。
  • 类加载子系统:负责将编译后的 .class 文件加载到 JVM 中,进行加载、验证、准备、解析和初始化。类加载子系统的作用是将 .class 文件转换为 JVM 可以执行的内部表示,并将其放入运行时数据区。

  1. 运行时数据区

作用: 运行时数据区是JVM在执行Java程序时所需的内存区域,包含了程序执行过程中所需的数据和信息。

  • Method Area/MetaSpace (方法区/元空间):存储类结构信息,如运行时常量池、字段和方法数据、方法和构造函数的字节码内容。
  • Heap (堆):用于存储对象实例和数组,是垃圾回收的主要区域。
  • PC Register (程序计数器):记录当前线程正在执行的字节码指令地址。
  • JVM Stacks (虚拟机栈):每个线程私有,用于存储局部变量、操作数栈、动态链接和方法调用等信息。
  • Native Method Stack (本地方法栈):每个线程私有,用于存储本地方法调用的信息。

  1. 执行引擎

作用: 执行引擎负责将字节码转换为机器码并执行,确保Java程序高效运行,并通过垃圾回收机制管理内存。

  • Interpreter (解释器):逐行解释执行字节码指令,将每条字节码指令翻译成相应的机器码并执行。
  • JIT Compiler (即时编译器):将热点代码(频繁执行的代码段)编译成机器码,提高执行效率。
  • GC (垃圾回收):负责自动回收不再使用的对象,释放内存空间,防止内存泄漏。

  1. 本地方法接口和本地库

作用: 本地方法接口和本地库使Java程序能够调用和执行平台相关的功能和库,扩展了Java的能力,使其可以与底层系统进行交互。

  • 本地方法接口 (JNI):允许Java代码调用本地(通常是 C 或 C++)代码,提供与操作系统或其他底层库的接口。
  • 本地库 (Native Libraries):提供本地方法实现的库文件,通常以动态链接库(如.dll.so)的形式存在。

2-2 学习侧重点

  • 对于 JVM 组成:主要关注 JVM 的运行时数据区。
  • 类加载器:类加载子系统中的类加载器
  • 垃圾回收:运行时数据区堆中对象的回收
  • JVM实践

3- 小结(知识点大纲):

3-1 JVM 组成

在这里插入图片描述

3-2 类加载器

在这里插入图片描述

3-3 垃圾回收

在这里插入图片描述

3-4 JVM实践

在这里插入图片描述

相关文章:

【JVM基础01】——介绍-初识JVM运行流程

目录 1- 引言:初识JVM1-1 JVM是什么?(What)1-1-1 概念1-1-2 优点 1-2 为什么学习JVM?(Why) 2- 核心:JVM工作的原理(How)⭐2-1 JVM 的组成部分及工作流程2-2 学习侧重点 3- 小结(知识点大纲):3-1 JVM 组成3…...

图数据库 - Neo4j简介

深入理解 Neo4j 与 Cypher 语法 什么是 Neo4j Neo4j 是一个基于图的数据库管理系统,它使用图形理论来表示数据关系。这种数据库与传统的关系型数据库不同,它更适合处理高度互联的数据结构。 基本概念 图:在 Neo4j 中,数据以图的…...

C#环境与数据类型

文章目录 C#环境.NET 框架集成开发环境 创建一个C#项目数据类型值类型引用类型对象类型object动态类型dynamic字符串类型string 指针类型 类型转换隐式转换显示转换(强制转换)C#提供的类型转换方法Convert类Parse方法TryParse方法 C#环境 .NET 框架 C#是…...

jenkins系列-06.harbor

https://github.com/goharbor/harbor/releases?page2 https://github.com/goharbor/harbor/releases/download/v2.3.4/harbor-offline-installer-v2.3.4.tgz harbor官网:https://goharbor.io/ 点击 Download now 链接,会自动跳转到上述github页面&am…...

kotlin get set

在 Kotlin 中,如果想实现一个类的属性可以从外部读取但不能修改,可以使用自定义的 getter 和 private setter。以下是一个示例代码: class MyClass {var myProperty: Stringprivate set // 使 setter 私有化,外部无法修改get // …...

Flask包算法服务

常规包算法服务,就是比较简单,直接起一个fastapi就可以了。 import time import asyncio from aidraw import engineer_log as eng from fastapi import FastAPI from pydantic import BaseModel from typing import Optional from aidraw.ardraw import run_aidraw_api# 起…...

Flowable(一个开源的工作流和业务流程管理引擎)中与事件相关的一些核心概念

Flowable(一个开源的工作流和业务流程管理引擎)中与事件相关的一些核心概念 Flowable(一个开源的工作流和业务流程管理引擎)中与事件相关的一些核心概念,包括它们的作用和触发场景。以下是对这些内容的简要说明&#x…...

深度解析:景区客服系统如何助力旅游业可持续发展

一、引言 在全球化与信息化交织的时代背景下,旅游业正以前所未有的速度发展,成为推动经济增长、文化交流与环境保护的重要力量。景区作为旅游业的核心组成部分,其服务质量和管理水平直接影响到游客的满意度和行业的可持续发展。景区客服系统…...

风险评估:IIS的安全配置,IIS安全基线检查加固

「作者简介」:冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。 这一章节我们需…...

uniapp 截取两条数据 进行页面翻页滚动

// 轮播信息 <view class"sales_list" ><view class"sales_item" v-for"(item,index) in sellDisplayList" :key"index" click"salesFn(item)"><image :src"item.goodsImg"></image><…...

python笔记(转存ipynb)------1

list1 ["tom","cat","Lili"] print(list1[0].title())Tom#append()列表方法在列表末尾添加新元素 list1.append(233) print(list1) #可以先创建空列表&#xff0c;再进行追加append(..)以添加[tom, cat, Lili, 233]#insert()列表方法插入元素 l…...

excel系列(二) - 利用 easypoi 快速实现 excel 文件导入导出

一、介绍 在上篇文章中&#xff0c;我们介绍了 apache poi 工具实现 excel 文件的导入导出。 本篇我们继续深入介绍另一款优秀的 excel 工具库&#xff1a;easypoi。 二、easypoi 以前的以前&#xff0c;有个大佬程序员&#xff0c;跳到一家公司之后就和业务人员聊上了&…...

邀请函|2024第八届中国太阳能电池浆料与金属化技术展

2024第八届中国国际太阳能电池浆料与金属化技术展览会 地点:深圳国际会展中心 时间:2025年06-月25日-27日 地点:上海新国际博览中心 时间:2024年12月18日-20日 主办单位&#xff1a;上海氟伦展览有限公司 指导单位&#xff1a;中国新材料技术协会 中国电子学会 耐…...

图像边缘检测:技术原理与算法解析

图像边缘检测是计算机视觉和图像处理中的一个核心任务&#xff0c;它旨在识别图像中亮度变化明显的点&#xff0c;从而识别出图像的边缘。边缘是图像中的重要特征&#xff0c;对于后续的图像分析、物体识别和图像分割等任务具有至关重要的作用。本文将深入探讨图像边缘检测的技…...

【Python星启航】少儿编程精英启蒙之旅 - 大纲

1. 计算机基础与编程环境 计算机的基本构成 编程语言与编程环境介绍 Python语言的特点与优势 安装与配置Python环境 2. 计算机历史与发展 计算机的起源与早期发展 个人电脑的普及与影响 当代计算机技术的前沿动态 计算机在未来教育中的角色 3. 编程基础概念 变量的定义与作…...

MATLAB的mat文件转换成json文件

内参矩阵 (K)&#xff1a;相机的内在参数矩阵&#xff0c;通常是一个3x3的矩阵&#xff0c;包含了相机的焦距&#xff08;fxfx​和fyfy​&#xff09;和主点&#xff08;光学中心&#xff09;的坐标&#xff08;cxcx​和cycy​&#xff09;。这个矩阵将图像坐标转换为归一化相机…...

STM32第九课:STM32-基于标准库的42步进电机的简单I/O控制(附电机教程,看到即赚到)

一&#xff1a;步进电机简介 步进电机又称为脉冲电机&#xff0c;简而言之&#xff0c;就是一步一步前进的电机。基于最基本的电磁铁原理,它是一种可以自由回转的电磁铁,其动作原理是依靠气隙磁导的变化来产生电磁转矩&#xff0c;步进电机的角位移量与输入的脉冲个数严格成正比…...

文件安全传输系统,如何保障信创环境下数据的安全传输?

文件安全传输系统是一套旨在保护数据在传输过程中的安全性和完整性的技术或解决方案。通常包括以下几个关键组件&#xff1a; 加密&#xff1a;使用强加密算法来确保文件在传输过程中不被未授权访问。 身份验证&#xff1a;确保只有授权用户才能访问或传输文件。 完整性校验…...

论文分享|AAAI2024‘北航|用大语言模型缩小有监督和无监督句子表示学习的差距

先说结论&#xff0c;大语言模型除了作为聊天的Agent&#xff0c;也可以为检索模型生成优质的文本对训练数据&#xff0c;从而做到无监督场景下也能够适用。这里分享一篇AAAI2024的工作&#xff0c;重点探讨如何生成比评估集更困难的训练数据来提升无监督句子表示学习质量&…...

vue3相比于vue2有哪些新特性?

Composition API&#xff1a; 组合式 API 提供了更灵活和可组合的方式来组织代码。它允许将逻辑功能集中在一起&#xff0c;而不是分散在生命周期钩子中。 import { ref, reactive, computed, watch } from vue;export default {setup() {const count ref(0);const state r…...

Pixel Aurora Engine 赋能Web应用:Node.js全栈项目集成AI绘图功能

Pixel Aurora Engine 赋能Web应用&#xff1a;Node.js全栈项目集成AI绘图功能 1. 项目背景与价值 想象一下&#xff0c;你正在开发一个创意设计平台&#xff0c;用户需要快速将想法转化为视觉作品。传统方案要么依赖专业设计师&#xff0c;要么使用复杂的图形工具&#xff0c…...

Windows11深度学习环境搭建:从CUDA、cuDNN到PyTorch-GPU一站式配置与排错指南

1. 环境准备&#xff1a;从零开始的硬件与软件检查 刚拿到新电脑准备搭建深度学习环境时&#xff0c;很多新手会直接跳进安装环节&#xff0c;结果往往在后期遇到各种兼容性问题。我在帮学生调试环境时发现&#xff0c;90%的安装失败案例都源于前期准备不足。下面分享我的标准检…...

RK3568平台下GM8775C芯片的MIPI转双通道LVDS屏幕驱动全解析

1. RK3568与GM8775C芯片组合的硬件基础 RK3568作为Rockchip新一代通用型SoC&#xff0c;其原生显示接口虽然强大&#xff0c;但面对工业领域广泛使用的双通道LVDS屏幕时&#xff0c;就需要GM8775C这样的桥梁芯片。这套组合拳的硬件设计有几个关键点需要注意&#xff1a;首先是电…...

搜索关键词SEO优化需要多长时间才能看到效果_搜索关键词SEO优化需要多少预算投入

搜索关键词SEO优化需要多长时间才能看到效果_搜索关键词SEO优化需要多少预算投入 在当今互联网时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;是每个网站和在线企业提升流量、吸引潜在客户的重要手段。许多人在进行SEO优化时常常会疑惑&#xff1a;“搜索关键词SEO…...

OpenClaw浏览器控制:Qwen3-14b_int4_awq驱动自动化检索与信息提取

OpenClaw浏览器控制&#xff1a;Qwen3-14b_int4_awq驱动自动化检索与信息提取 1. 为什么需要浏览器自动化助手 上周我需要做一个小型竞品分析&#xff0c;任务很简单&#xff1a;找出10个同类产品的核心功能点并整理成表格。但当我手动打开浏览器逐个搜索、翻页、复制粘贴时&…...

告别手动点点点:用CANoe CAPL脚本全自动刷写ECU固件(附完整代码框架)

告别手动点点点&#xff1a;用CANoe CAPL脚本全自动刷写ECU固件&#xff08;附完整代码框架&#xff09; 在汽车电子测试领域&#xff0c;ECU固件刷写是每个工程师都绕不开的必修课。但当你第100次重复相同的UDS服务序列时&#xff0c;是否也曾在深夜的实验室里怀疑人生&#x…...

交流与直流接触器:原理差异与工程防护

1. 交流接触器与直流接触器的本质区别接触器作为电气控制领域的核心元件&#xff0c;其线圈设计直接决定了工作特性。从业十余年来&#xff0c;我处理过太多因误接电源导致的设备故障案例。让我们从电磁原理层面&#xff0c;彻底搞懂这两种接触器的差异。交流接触器线圈采用粗线…...

uniapp H5项目自定义favicon图标实战指南

1. 为什么需要自定义favicon图标 当你用uniapp开发H5项目时&#xff0c;有没有注意到浏览器标签页上那个默认的灰色地球图标&#xff1f;这个不起眼的小图标其实有个专业名称叫favicon&#xff0c;它就像是你网站的"身份证照片"。想象一下&#xff0c;用户同时打开十…...

authentik开源身份认证与管理平台-与 Gitea 集成(6)

文章目录什么是 Gitea&#xff1f;准备authentik配置Gitea 配置配置验证什么是 Gitea&#xff1f; Gitea 是一个由社区管理的轻量级代码托管解决方案&#xff0c;使用 Go 编程语言编写。它在 MIT 许可下发布。 准备 在本指南中&#xff0c;使用了以下占位符&#xff1a; aut…...

Python flask django房屋租赁管理系统在线聊天

目录同行可拿货,招校园代理 ,本人源头供货商功能需求分析技术实现方案安全与扩展功能性能优化项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能需求分析 用户身份区分 系统需区分房…...