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

JVM:JVM与Java体系结构

一、JVM 基础概念

  1. 虚拟机可分为两类
    1. 一类是系统虚拟机,用于模拟计算机系统,常见的软件有 Virtual Box、VMware 等。它们能创建虚拟的计算机系统,就如同在我们的计算机中又安装了一台计算机
    2. 另一类是程序虚拟机,例如 JVM,它是为程序运行而设计的
  2. JVM 运行在操作系统之上,运行时操作系统会为其分配内存空间。JVM 会对分配到的内存空间进行划分,包括虚拟机栈(即线程栈)、堆、本地方法栈、元空间(JDK 8 及以后 HotSpot 虚拟机对方法区的实现)、程序计数器以及直接内存

二、Java 语言特性

  1. Java “一次编译,到处运行” 的特性可以这样理解:Java 程序在运行于 JVM 之前,会通过前端编译器 javac 编译成字节码文件(即 .class 文件)。不同的操作系统需要安装与之适配的 JVM,例如在 Windows 操作系统上需安装支持 Windows 的 JVM,在 Linux 操作系统上则要安装支持 Linux 的 JVM。只要是符合规范的 JVM,都能够运行遵循 Java 字节码规范的 .class 文件
  2. JVM 会采用不同的方式将字节码文件转化为对应操作系统的 CPU 能够理解的机器指令来执行。它既可以通过解释器逐行解释执行字节码,也可以利用即时编译器(JIT)将字节码编译成机器码后再执行。例如在 Windows 操作系统上,最终生成的是能被 Windows 环境下 CPU 理解和执行的机器指令;在 Linux 操作系统上,则生成可被 Linux 环境下 CPU 识别的机器指令。这样,同一套 Java 字节码文件就能在不同操作系统上借助对应的 JVM 实现跨平台运行

三、JVM 整体结构

  1. 虚拟机栈(线程栈):
    1. 每个 Java 程序至少会有一个主线程。JVM 会为每个线程都开辟一个独立的栈,栈的基本单位是栈帧,每个线程里的方法调用会对应一个栈帧。线程过多会导致栈空间不足从而溢出;单个线程里方法调用层次过深(即方法嵌套调用过多)会导致栈溢出,如常见的无限递归调用
    2. 栈帧主要划分为操作数栈、局部变量表、动态链接和方法返回地址等部分。局部变量表用于存储方法中的局部变量及其对应的值;操作数栈根据字节码指令从局部变量表中取值进行运算等操作
  2. 程序计数器程序计数器用于记录线程当前执行的字节码指令的地址,也就是记录线程运行的位置。当 CPU 发生线程切换时,下次轮到该线程运行时,就能依据程序计数器的值知道从哪里继续执行。程序计数器是每个线程独有的,并且独立于虚拟机栈
  3. 堆空间:堆空间用于存放对象实例和数组,是所有线程共享的内存区域。堆通常分为新生代和老年代,新生代又可细分为 Eden 区、Survivor 0 区和 Survivor 1 区。对象一般首先在 Eden 区分配,经过多次垃圾回收后仍存活的对象会进入老年代
  4. 本地方法栈:本地方法栈为使用本地方法(通常是用 C 或 C++ 编写的方法)服务,因为 Java 程序的一些底层 API 是用这些语言实现的。在早期 JVM 中,本地方法栈和虚拟机栈是分开的,但随着 JVM 的发展,有些 JVM 实现(如 HotSpot)将本地方法栈和虚拟机栈进行了融合,本地方法的栈帧也在虚拟机栈中运行
  5. 元空间:元空间是 JDK 8 及以后版本中对方法区的实现。它不占用 JVM 的堆内存空间,而是直接使用操作系统的本地内存,不过会受到 JVM 参数的管理和限制。元空间主要存储类的元数据信息,包括类信息、运行时常量池等
    1. 类信息:存储字节码文件中关于类的定义、类的属性定义、类的方法定义以及类的方法的字节码等内容
    2. 运行时常量池:它是字节码文件中常量池的运行时表示,会将字节码文件中的常量池部分加载进来,并且在程序运行过程中还能动态生成常量
    3. 静态变量:存储类的静态变量,不过在 JDK 7 及以后,静态变量从方法区移到了堆中
  6. 直接内存:直接内存并不属于 JVM 运行时数据区的一部分,它不占用 JVM 的堆内存空间,而是使用操作系统的本地内存。直接内存不受 JVM 的垃圾回收机制管理,但可以通过 Java 的 NIO(New Input/Output)相关类(如 ByteBuffer)来控制和使用。使用直接内存可以提升 IO 操作的速度,因为传统的 IO 操作需要将数据在用户空间和内核空间之间多次拷贝,而直接内存可以直接在操作系统的内存中进行操作,减少了数据拷贝的次数

四、Java 代码执行流程

  1. 源码编写:开发者依据 Java 语言的语法规则编写 Java 源文件,文件扩展名为.java。在这个源文件中,包含类、方法、变量等各种 Java 程序元素,它们共同构成了程序的逻辑和功能
  2. 词法分析:Java 编译器启动后,首先进行词法分析。它就像一个 “单词识别器”,将 Java 源文件的字符流按照词法规则切分成一个个的 “单词”,也就是词法单元(Token),比如关键字(如public、class )、标识符(变量名、类名等)、运算符(+、- )、界符({、} )等。在这个过程中,编译器会识别源文件中的代码片段,把它们分类为不同类型的词法单元,为后续的语法分析做准备
  3. 语法分析:基于词法分析生成的词法单元,语法分析器开始工作。它依据 Java 语言的语法规则,对词法单元进行组合和检查,构建出抽象语法树(AST)。抽象语法树以树状结构表示程序的语法结构,清晰地展示出代码的层次逻辑关系。例如,它能明确地表示出类的定义包含哪些成员变量和方法,方法内部又包含哪些语句等。如果源文件的语法存在错误,语法分析阶段就会抛出相应的语法错误信息
  4. 语义分析:语义分析是对抽象语法树进行进一步的检查和处理。这一阶段会验证程序的语义是否正确,包括检查变量是否被正确声明和使用、方法调用是否匹配、数据类型是否兼容等。比如,如果代码中试图将一个字符串和一个整数进行相加操作,语义分析就会检测到这种类型不匹配的错误。此外,语义分析还会进行符号表的填充,符号表用于记录程序中定义的各类符号(如变量、函数等)的相关信息,包括名称、类型、作用域等,以便后续的代码生成和编译过程使用
  5. 生成字节码文件:经过词法分析、语法分析和语义分析,且都没有发现错误后,Java 编译器会将源文件编译成字节码文件,文件扩展名为.class。字节码是一种与平台无关的中间代码,它包含了 Java 虚拟机指令集(即字节码指令)、符号表以及其他辅助信息。字节码文件中的指令并非针对特定的硬件平台,而是设计为能在任何安装了 Java 虚拟机的系统上运行,这也是 Java 语言 “一次编写,到处运行” 特性的关键所在
  6. 类加载器加载:生成的字节码文件需要被加载到 Java 虚拟机(JVM)中才能执行。JVM 的类加载器负责完成这一任务。类加载器会根据类的全限定名(包括包名和类名)查找并加载对应的字节码文件。类加载过程分为加载链接(验证、准备、解析)和初始化三个阶段。在加载阶段,类加载器会通过一定的方式获取字节码文件的二进制数据;链接阶段会对字节码进行验证(确保字节码符合 JVM 规范且没有安全问题)、准备(为类的静态变量分配内存并设置初始值)和解析(将符号引用转换为直接引用);初始化阶段则会执行类的静态代码块和对静态变量的赋值操作
  7. 字节码校验器校验:字节码被加载到 JVM 后,会经过字节码校验器的校验。字节码校验器会检查字节码是否符合 JVM 的规范,确保字节码的安全性和正确性。它会验证字节码指令的格式是否正确、类型是否匹配、操作是否合法等。如果字节码存在问题,比如试图访问越界的内存、违反访问权限等,字节码校验器会阻止其执行,从而保证 JVM 的安全稳定运行
  8. 解释器解析执行或 JIT 编译器编译执行:经过校验的字节码可以通过两种方式执行
    1. 解释器解析执行:解释器会逐行读取字节码指令,并将其翻译成对应平台的机器码指令然后执行。这种方式的优点是启动速度快,因为不需要额外的编译时间;缺点是执行效率相对较低,每次执行相同的字节码都需要重新解释
    2. JIT 编译器编译执行:即时编译器(JIT)会在运行时将频繁执行的字节码(热点代码)编译成机器码。JIT 编译器通过分析程序的运行情况,找出热点代码,然后将其编译成本地机器码并缓存起来。后续再次执行这些代码时,直接执行编译后的机器码,大大提高了执行效率。JVM 会根据程序的运行情况,动态地选择是使用解释器还是 JIT 编译器来执行字节码,以平衡启动速度和执行效率
  9. 在操作系统上运行:无论是通过解释器解析执行还是 JIT 编译器编译执行,最终的目标都是在操作系统上运行 Java 程序。JVM 作为 Java 程序和操作系统之间的桥梁,负责将 Java 程序的字节码指令转化为操作系统能够理解和执行的指令。JVM 通过与操作系统进行交互,如申请内存、进行文件操作、网络通信等,实现 Java 程序在不同操作系统平台上的运行,而开发者无需关心底层操作系统的差异,只需专注于 Java 程序的开发

五、JVM的生命周期

(1)启动阶段

JVM 的启动是通过引导类加载器(Bootstrap Class Loader)创建初始类来完成的。这一过程可细分为以下几个关键步骤:

  1. 加载启动类:引导类加载器是 JVM 中最顶层的类加载器,通常由本地代码(如 C 或 C++)实现。当启动 JVM 时,它会负责加载 Java 的核心类库,这些类库位于$JAVA_HOME/jre/lib目录下,像java.lang、java.util等基础包中的类。例如,java.lang.Object类就是由引导类加载器加载的
  2. 创建初始类:引导类加载器会加载并初始化 Java 虚拟机的初始类,其中最关键的是sun.misc.Launcher类。该类负责创建扩展类加载器(Extension Class Loader)和应用程序类加载器(Application Class Loader),并设置好类加载的层次结构
  3. 执行主类:一旦类加载器体系构建完成,JVM 会定位到包含main方法的主类,并调用该主类的main方法,从而启动 Java 程序的执行。例如,当你运行java HelloWorld命令时,JVM 会找到HelloWorld类并调用其main方法

(2)运行阶段

在启动完成后,JVM 进入运行阶段,此时它以进程的形式存在于操作系统中。运行阶段的主要特点如下:

  1. 执行 Java 程序:JVM 会按照字节码指令的顺序执行 Java 程序。在执行过程中,它会进行类加载、字节码校验、解释执行或即时编译(JIT)等操作。例如,当程序调用一个新的类时,JVM 会使用相应的类加载器加载该类,并对其字节码进行校验,确保安全性和正确性
  2. 管理内存:JVM 负责管理 Java 程序的内存,包括堆内存、栈内存、方法区等。它会自动进行垃圾回收(GC),回收不再使用的对象所占用的内存,以保证内存的有效利用。例如,当一个对象不再被引用时,垃圾回收器会在合适的时机将其回收
  3. 线程调度:JVM 会管理 Java 程序中的线程。它会根据线程的优先级和状态进行调度,确保各个线程能够合理地使用 CPU 资源。例如,高优先级的线程会优先获得 CPU 时间片

(3)退出阶段

JVM 的退出情况有多种,下面分别介绍:

  1. 程序正常结束:当 Java 程序中的所有非守护线程执行完毕,或者main方法正常返回时,JVM 会正常退出。例如,一个简单的 Java 程序,在main方法中完成所有任务后,程序会自然结束,JVM 也随之退出
  2. 异常终止:如果 Java 程序在运行过程中抛出未捕获的异常,且该异常导致程序无法继续执行,JVM 会异常终止。例如,当程序访问一个空对象的方法时,会抛出NullPointerException,如果没有对该异常进行捕获和处理,JVM 可能会终止运行
  3. 操作系统错误:当操作系统出现严重错误,如内存不足、硬件故障等,可能会导致 JVM 无法继续运行,从而退出。例如,当系统内存耗尽时,JVM 可能会因为无法分配足够的内存而终止
  4. 调用特定方法:在 Java 程序中,可以调用System.exit(int status)方法来主动终止 JVM。其中,参数status为 0 表示正常退出,非 0 表示异常退出。例如,System.exit(0)会使 JVM 正常退出
  5. JNI Invocation API 控制退出:JNI(Java Native Interface)允许 Java 代码与本地代码进行交互。通过 JNI Invocation API,本地代码可以控制 JVM 的启动和退出。本地代码可以调用相关的 JNI 函数来销毁 JVM 实例,从而实现 JVM 的退出。例如,在一些混合编程的场景中,本地代码可以在合适的时机调用 JNI 函数来关闭 JVM​​​​​​​

相关文章:

JVM:JVM与Java体系结构

一、JVM 基础概念 虚拟机可分为两类 一类是系统虚拟机,用于模拟计算机系统,常见的软件有 Virtual Box、VMware 等。它们能创建虚拟的计算机系统,就如同在我们的计算机中又安装了一台计算机另一类是程序虚拟机,例如 JVM&#xff0…...

大模型预标注和自动化标注在OCR标注场景的应用

OCR,即光学字符识别,简单来说就是利用光学设备去捕获图像并识别文字,最终将图片中的文字转换为可编辑和可搜索的文本。在数字化时代,OCR(光学字符识别)技术作为处理图像中文字信息的关键手段,其…...

JVM 垃圾回收

垃圾回收 在 C/C 没有自动垃圾回收机制的语言中,一个对象如果不再被使用,则需要手动释放,否则就会出现内存泄漏(不再使用的对象未被系统回收而导致内存溢出)。 Java 为了简化对象释放的操作,降低编程的复杂度,引入的…...

【Qt】初识Qt

文章目录 认识 Qt Creator 界面左边栏代码编辑区UI设计界面构建区 Qt Hello World 程序使用 "按钮" 实现纯代码方式实现可视化操作实现 使用 "标签" 实现存代码实现 可视化操作实现 项目文件解析.pro 文件解析widget.h 文件解析main.cpp 文件解析widget.cp…...

Python----机器学习(逻辑回归与二分类问题)

一、原理 逻辑回归是一种用于解决二分类问题的机器学习算法。其原理基于线性回归 模型,通过使用逻辑函数(也称为sigmoid函数)将线性回归的结果映射到 一个0到1之间的概率值,从而进行分类。 在实际生活中,通常一件事的结…...

YOLOv2 性能评估与对比分析详解

1. YOLOv2 简介 YOLOv2(You Only Look Once v2),也称为 YOLO9000,是 2016 年发布的目标检测模型,旨在改进 YOLOv1 的速度和准确性。它通过引入批量归一化、锚框和高分辨率输入等技术,显著提升了性能。YOLO…...

Java文件批量复制工具实现解析

目录 引言 1、需求背景 2、实现原理 3、实现步骤 3.1 路径预处理 3.2 复制路径解析 3.3 递归复制逻辑 4、测试用例 5、总结 引言 在项目开发中,文件复制操作是常见的需求场景。本文将解析一个基于Java NIO实现的文件批量复制工具,该工具支持多路径批量操作、目录递归…...

uniapp小程序位置授权弹框与隐私协议耦合(合而为一)(只在真机上有用,模拟器会分开弹 )

注意: 只在真机上有用,模拟器会分开弹 效果图: 模拟器效果图(授权框跟隐私政策会分开弹,先弹隐私政策,同意再弹授权弹框): manifest-template.json配置( "__usePr…...

深入理解 Java 内存区域与内存溢出异常

个人主页 文章专栏 文章目录 一、引言二、Java 运行时数据区域(一)程序计数器(二)Java 虚拟机栈(三)本地方法栈(四)Java 堆(五)方法区(六&#xf…...

算法复习(二分+离散化+快速排序+归并排序+树状数组)

一、二分算法 二分算法,堪称算法世界中的高效查找利器,其核心思想在于利用数据的有序性,通过不断将查找区间减半,快速定位目标元素或满足特定条件的位置。 1. 普通二分 普通二分适用于在有序数组中查找特定元素的位置。我们可以…...

4.15 代码随想录第四十四天打卡

99. 岛屿数量(深搜) (1)题目描述: (2)解题思路: #include <iostream> #include <vector> using namespace std;int dir[4][2] {0, 1, 1, 0, -1, 0, 0, -1}; // 四个方向 void dfs(const vector<vector<int>>& grid, vector<vector<bool&g…...

Apache HTTPD 换行解析漏洞

漏洞介绍 CVE-2017-15715 Apache HTTPD 是一个广泛使用的 HTTP 服务器&#xff0c;可以通过 mod_php 模块来运行 PHP 网页。在其 2.4.0 到 2.4.29 版本中存在一个解析漏洞&#xff0c;当文件名以 1.php\x0A 结尾时&#xff0c;该文件会被按照 PHP 文件进行解析&#xff0c;这…...

Spark-SQL(二)

一. 利用IDEA开发Spark-SQL 1 在pop.xml中添加spark-sql依赖 2 spark-sql测试代码 1&#xff09;在idea中读取json文件创建DataFrame 2&#xff09;SQL风格语法 3 &#xff09;DSL风格语法 4&#xff09; RDD转换成DataFrame&#xff0c;DataFrame转换成DataSet 5&#x…...

Node.js 操作 MySQL 数据库

环境检查 Node.js 环境验证 node -v # 确认版本 ≥14.x npm -v # 确认能正常输出 MySQL 服务检查 # Linux systemctl status mysql# Windows (CMD) sc query MySQL 数据库与表创建 创建数据库 CREATE DATABASE users CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode…...

linux运维篇-Ubuntu(debian)系操作系统创建源仓库

适用范围 适用于Ubuntu&#xff08;Debian&#xff09;及其衍生版本的linux系统 例如&#xff0c;国产化操作系统kylin-desktop-v10 简介 先来看下我们需要创建出来的仓库目录结构 Deb_conf_test apt源的主目录 conf 配置文件存放目录 conf目录下存放两个配置文件&…...

从“数据孤岛”到“万物互联”,PLC组网重构工控边界

在工业自动化领域&#xff0c;PLC作为现代智能制造的核心控制单元&#xff0c;其应用已从单一设备的逻辑控制延伸至全厂级生产系统的协同管理。作为工业自动化系统的控制核心&#xff0c;PLC不仅需要实现设备层级的操控&#xff0c;更要通过工业通信网络构建起设备间的数据交互…...

【ISP】AWB的基本原理介绍(基于灰度像素检测)

&#x1f3a8; 基于灰度像素检测的自动白平衡&#xff08;AWB&#xff09;算法原理与实现 在图像处理中&#xff0c;自动白平衡&#xff08;AWB, Auto White Balance&#xff09;是调整图像色温、还原真实色彩的关键算法之一。本文介绍一种经典实用的 AWB 方法 —— 基于灰度像…...

uniappx项目上架各手机平台

前段时间用uniappx开发的App&#xff0c;领导要求要在各个主要手机平台上上架了&#xff0c;本来不是我的任务&#xff0c;后来其他人没有空交给我了&#xff0c;上架小白一枚&#xff0c;哭唧唧的自己研究吧&#xff0c;根据领导发的账号密码登录各个平台上架&#xff0c;花费…...

DIB:Drone in Box- 室内外场景无人机无人化自主巡检技术方案

DIB&#xff1a;Drone in Box- 室内外场景无人机无人化自主巡检技术方案 作为大疆机场3的无人机无人化巡检方案的补充三个自主巡检方案&#xff1a; 方案一、M350AIBOX自主机场-适合室外无人机自主巡检 方案二、M4AIBOX自主机场-适合室内自主巡检 方案三、停机坪AIBOX 自主巡…...

【大模型】GPT-4、DeepSeek应用与Prompt使用技巧

GPT-4 作为目前最先进的大语言模型之一&#xff0c;在多个领域都有广泛的应用。以下是一些典型的应用实例以及相关的 Prompt 使用技巧&#xff0c;帮助你更好地发挥 GPT-4 的潜力。 一、GPT-4 应用实例 1. 内容创作 博客/文章写作&#xff1a;生成高质量的技术博客、营销文案、…...

《分布式软总线:不同频段Wi-Fi环境下设备发现兼容性难题》

分布式软总线技术作为实现设备互联互通的关键&#xff0c;正逐渐成为构建万物互联世界的基石。然而&#xff0c;当分布式软总线面临不同频段Wi-Fi环境时&#xff0c;设备发现的兼容性问题成为了阻碍其广泛应用的一大挑战。这一问题不仅影响着用户体验&#xff0c;也制约着分布式…...

微电网与分布式能源:智能配电技术的场景化落地

安科瑞顾强 随着数字化转型与能源革命的加速推进&#xff0c;电力系统正经历从传统模式向智能化、网络化方向的深刻变革。用户侧的智能配电与智能用电技术作为这一变革的核心驱动力&#xff0c;正在重塑电力行业的生态格局。本文将从技术架构、应用场景及未来趋势等维度&#…...

Flutter实战(1)-- 调试工具

Flutter实战调试篇&#xff1a;从开发到上线的完整指南 工欲善其事&#xff0c;必先利其器。 本文使用的Flutter的相关版本信息&#xff1a; Flutter 1.19.0-4.3.pre • channel beta Engine • revision 9a28c3bcf4 Tools • Dart 2.9.0 (build 2.9.0-14.1.beta) 本文是Flutte…...

每日算法(双指针算法)(Day 1)

双指针算法 1.算法题目&#xff08;移动零&#xff09;2.讲解算法原理3.编写代码 1.算法题目&#xff08;移动零&#xff09; 2.讲解算法原理 数组划分&#xff0c;数组分块&#xff08;快排里面最核心的一步&#xff09;只需把0改为tmp 双指针算法&#xff1a;利用数组下标来…...

无人机的群体协同与集群控制技术要点!

一、技术要点 通信技术 高效可靠的通信链路&#xff1a;无人机集群需要稳定、低延迟的通信网络&#xff0c;以实现实时数据传输和指令交互。通信方式包括无线自组织网络&#xff08;Ad Hoc&#xff09;、蜂窝网络、卫星通信等&#xff0c;需根据任务场景选择合适的通信技术。…...

Linux常见指令介绍上(入门级)

1. ls指令 功能&#xff1a;显示出当前目录下的所有子目录与文件。 PS:注意显示的是当前文件下的子目录与文件。 以下这些是可以和ls配套使用的一些选项 -a 列出目录下的所有文件&#xff0c;包括以 . 开头的隐含文件。 -d 将目录象文件一样显示&#xff0c;而不是显示其下…...

【Linux系统篇】:从匿名管道到命名管道--如何理解进程通信中的管道?

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;Linux篇–CSDN博客 文章目录 一.进程通信进程通信概念进程通信目的进程通信分类 二.管道匿名…...

三、The C in C++

第三章主要讲解了 C 中继承自 C 语言的核心元素&#xff0c;包括函数创建、执行控制、操作符、数据类型、作用域、存储指示、复合类型创建等。 3.1 创建函数&#xff08;Creating Functions&#xff09; C允许函数重载&#xff0c;同名的函数可以根据参数类型和数量区分&…...

探索图像分类模型的 Flask 应用搭建之旅

最近深入研究了利用深度学习模型进行图像分类&#xff0c;并将其部署到 Flask 应用中的项目&#xff0c;过程中遇到了不少挑战&#xff0c;也收获了满满的知识&#xff0c;迫不及待想和大家分享一下。 一、项目背景与目标 在当今数字化的时代&#xff0c;图像数据呈爆炸式增长…...

OpenAI发布GPT-4.1系列模型——开发者可免费使用

OpenAI刚刚推出GPT-4.1模型家族&#xff0c;包含GPT-4.1、GPT-4.1 Mini和GPT-4.1 Nano三款模型。重点是——现在全部免费开放&#xff01; 虽然技术升级值得关注&#xff0c;但真正具有变革意义的是开发者能通过Cursor、Windsurf和GitHub Copilot等平台立即免费调用这些模型。…...

自动化测试工具playwright中文文档-------14.Chrome 插件

介绍 注意 插件仅在以持久化上下文启动的 Chrome/Chromium 浏览器中工作。请谨慎使用自定义浏览器参数&#xff0c;因为其中一些可能会破坏 Playwright 的功能。 以下是获取位于 ./my-extension 的 Manifest v2 插件背景页面句柄的代码示例。 from playwright.sync_api imp…...

VGA显示

屏幕扫描形式 在回扫的过程中,电子枪不能发射电子,否则会影响荧光屏上既有图像的颜色,所以 回扫期间,需要进行行消隐,简单来说就是关闭电子枪。每行结束时,用行同步信号进行行 同步,图中从右上方向左下方的斜向虚线就是其回行扫示意图。 当整个屏幕的所有行都扫…...

微服务1--服务架构

系统架构 单体应用架构 特点&#xff1a;所有功能集中在一个应用中&#xff08;如传统的 Spring Boot WAR 包&#xff09;。 适用场景&#xff1a;小型项目、快速验证阶段。 优缺点&#xff1a; ✅ 开发简单&#xff0c;部署方便。 ❌ 扩展性差&#xff0c;技术栈耦合。 …...

鸿蒙应用元服务开发-Account Kit配置登录权限

一、场景介绍 华为账号登录是基于OAuth 2.0协议标准和OpenID Connect协议标准构建的OAuth2.0 授权登录系统&#xff0c;元服务可以方便地获取华为账号用户的身份标识&#xff0c;快速建立元服务内的用户体系。 用户打开元服务时&#xff0c;不需要用户点击登录/注册按钮&#…...

zg-docker详解与部署微服务实战与k8s

一. Docker课程 Docker简介 Docker是一个开源的容器引擎,有助于快速开发,docker更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。 使用宿主机的网络:即使用宿主机的网段。 联合文件系统-一个镜像,启动了多个容器,对于镜像中的文件a,多个容器…...

【含文档+PPT+源码】基于Python的快递服务管理系统【

毕业作品基于Django和HTML的快递网站设计与实现 课程目标&#xff1a; 教你从零开始部署运行项目&#xff0c;学习环境搭建、项目导入及部署&#xff0c;含项目源码、文档、数据库、软件等资料 课程简介&#xff1a; 本课程演示的是一款基于Python的快递服务管理系统&#x…...

嵌入式WebRTC轻量化SDK压缩至500K-800K ,为嵌入式设备节省Flash资源

一、SDK轻量化的核心技术实现 1、WebRTC库裁剪与模块化设计 EasyRTC针对嵌入式设备的资源限制&#xff0c;对原生WebRTC库进行深度裁剪&#xff0c;仅保留核心通信功能&#xff08;如信令管理、编解码、网络传输等&#xff09;&#xff0c;移除冗余组件&#xff08;如部分调试…...

JAVA学习-Stream

Stream Stream也叫Stream流&#xff0c;是Jdk8开始新增的一套API (java.util.stream.*)&#xff0c;可以用于操作集合或者数 组的数据。 优势&#xff1a; Stream流大量的结合了Lambda的语法风格来编程&#xff0c;提供了一种更加强大&#xff0c;更加简单的方式 操作集合或者数…...

如何在同一个电脑配置多个jdk版本并随意切换

1.右键此电脑属性 2.点击高级系统配置 3.点击环境变量 4.进去后点击新建 变量名&#xff1a;JAVA_HOME_版本&#xff0c;来进行命名 变量值&#xff1a;jdk的路径即可&#xff0c;比如我的是D:\JAVA\JAVA11 5.创建完你所有的jdk版本之后接着新建 变量名&#xff1a;JAVA_HOME…...

网工_传输层协议概述

2025.02.19&#xff1a;网工老姜&小猿网学习笔记 第22节 传输层协议概述 2.1 进程之间的通信2.2 传输层的两个主要协议2.3 传输层的端口2.3.1 端口号 2.4 本章小结 2.1 进程之间的通信 前三层解决了数据从主机到主机的问题&#xff0c;也就是&#xff0c;我们现在已经可以把…...

《java面试宝典》之java多线程面试题

1&#xff1a;什么是线程&#xff1f; 轻量级的进程 2&#xff1a;线程的三个部分是&#xff1f; 处理机 代码 数据 3&#xff1a;为什么使用多线程 使UI响应更快 利用多处理器系统 简化建模 4&#xff1a;代码示例&#xff1a;Java中实现多线程的两种方式&#xff0c;包括如何…...

5款电脑健康状况监测软件

鲁大师&#xff1a;专业且免费&#xff0c;能检测电脑硬件配置&#xff0c;辨别硬件真伪&#xff0c;检查电脑病毒隐患。可一键清理系统垃圾&#xff0c;提升电脑性能。还能全程监护硬件状态&#xff0c;实时检测硬件温度变化&#xff0c;让用户轻松掌握电脑健康状况。360 安全…...

JWT令牌:实现安全会话跟踪与登录认证的利器

摘要&#xff1a;本文深入探讨了JWT令牌在实现会话跟踪和登录认证方面的应用&#xff0c;详细介绍了JWT令牌的概念、组成、生成与校验方法&#xff0c;以及在实际案例中如何通过JWT令牌进行会话跟踪和登录认证的具体实现步骤&#xff0c;为系统的安全认证机制提供了全面且深入的…...

uni-app/微信小程序接入腾讯位置服务地图选点插件

uni-app/微信小程序接入腾讯位置服务地图选点插件 0、常出现的错误及解决方法0.1插件未授权使用&#xff08;见步骤1&#xff09;0.2小程序类目不符合引用该类目插件的要求或主体类型不符合要求&#xff08;见步骤1&#xff09;0.3需要在app.json中声明permission scope.userLo…...

3款顶流云电脑与传统电脑性能PK战:START云游戏/无影云/ToDesk云电脑谁更流畅?

这里写目录标题 一、前言二、本地机器配置环境三、START云游戏/无影云/ToDesk云电脑配置对比3.1 START云游戏3.2 无影云个人版3.3 ToDesk云电脑 四、本地电脑与云电脑性能实战4.1 游戏场景体验4.1.1 本地电脑测试4.1.2 云电脑测试英雄联盟黑神话悟空其他游戏 4.2 主流设计场景体…...

WINUI——Background小结

在 ​​WinUI/UWP XAML​​ 中&#xff0c;Background&#xff08;或其他颜色属性&#xff09;支持 ​​多种颜色表示方式​​&#xff0c;包括以下三种主流格式&#xff1a; ​​1. RGB 十六进制&#xff08;不透明&#xff09;​​ ​​格式​​&#xff1a;#RRGGBB​​特点…...

公司内部自建知识共享的方式分类、详细步骤及表格总结,分为开源(对外公开)和闭源(仅限内部),以及公共(全员可访问)和内部(特定团队/项目组)四个维度

以下是公司内部自建知识共享的方式分类、详细步骤及表格总结&#xff0c;分为开源&#xff08;对外公开&#xff09;和闭源&#xff08;仅限内部&#xff09;&#xff0c;以及公共&#xff08;全员可访问&#xff09;和内部&#xff08;特定团队/项目组&#xff09;四个维度&am…...

cursor AI编辑器的详细使用

以下是Cursor AI编辑器的详细使用介绍&#xff0c;涵盖核心功能、安装配置、使用技巧、高级应用及常见问题解决方案&#xff0c;结合了多个权威来源的实践指南和最新技术动态&#xff1a; 一、Cursor AI简介与核心功能 定位与架构 Cursor是基于Visual Studio Code&#xff08;V…...

js逆向入门实战某某观察网响应数据解密

(base64解码 base64解码&#xff09;地址:aHR0cHM6Ly93d3cuc3dndWFuY2hhLmNvbS9ob21lL2NpdHktZGV0YWlsP2NvZGU9MzEwMTAw 分析过程 1.抓数据包&#xff0c;发现响应数据是加密字符串。 ​ 2.对于这种回显数据解密&#xff0c;大概率通过拦截器实现&#xff0c;搜索intercepto…...

Ubuntu安装yum遇到Package ‘yum‘ has no installation candidate

环境说明 Window11&#xff0c;WSL2&#xff0c;Ubuntu24.04 错误描述 rootLAPTOP:~# apt-get install yum Reading package lists... Done Building dependency tree... Done Reading state information... Done Package yum is not available, but is referred to by anot…...