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

Java虚拟机 - JVM与Java体系结构

Java虚拟机

  • JVM与Java体系结构
    • 为什么要学习JVM
    • Java与JVM简介
      • Java 语言的核心特性
      • JVM:Java 生态的基石
        • JVM的架构模型
          • 基于栈的指令集架构(Stack-Based)
          • 基于寄存器的指令集架构(Register-Based)
          • JVM生命周期
    • 总结

JVM与Java体系结构

Java不仅仅是一个简单的编程语言,它是由一系列的软件与规范组成的技术体系。而JVM是Java程序的运行核心,通过字节码解释执行实现"一次编写,到处运行"特性,而Java体系结构由编程语言规范、类库体系及JVM运行时环境共同构成,支撑跨平台面向对象开发。可以说JVM是整个Java平台的基石,是将Java技术隔绝操作系统与硬件的关键部分。

为什么要学习JVM

功利点说,现在找工作的门槛越来越高,JVM知识点经常出现在面试题目中,要想通过面试,我们也需要了解JVM。但是除去面试,程序开发中我们也会遇见:

  1. 定位 OOM(内存溢出):通过分析堆转储(Heap Dump)和 GC 日志,快速定位内存泄漏的根源。
  2. 线程死锁:利用 JVM 工具(如 jstack)分析线程状态,解决多线程并发问题。
  3. 性能瓶颈:通过 Profiling 工具(如 VisualVM、Arthas)监控 CPU、内存使用情况,找到性能热点。
    这些都需要我们具备JVM的基础知识,才能在生产中遇到类似问题迎刃而解。掌握了基础知识,我们可以更好地做到下面几点:
  • 内存管理:理解 JVM 的内存结构(堆、栈、方法区等)能帮助你优化内存分配,避免内存泄漏和频繁的垃圾回收(GC)。
  • 垃圾回收机制:不同场景需要不同的 GC 算法(如 G1、ZGC、Shenandoah),学习 JVM 可以合理选择并配置 GC,减少程序停顿时间。
  • 代码优化:通过 JIT 编译器、逃逸分析等机制,理解 JVM 如何优化代码执行,从而编写更高效的代码

Java与JVM简介

Java 自 1995 年由 Sun Microsystems 发布以来,凭借其 跨平台能力、面向对象特性 和 丰富的生态系统,迅速成为全球最流行的编程语言之一。而 Java 虚拟机(JVM)作为 Java 技术的核心引擎,通过“一次编写,到处运行”(Write Once, Run Anywhere)的理念,彻底改变了软件开发的模式。

下面这张图是Java技术体系,从这张图我们可以了解Java与Jvm的关系。应该从这张图,我们可以形象地认识到JVM是Java语言的核心基石,所以我们要想学习好Java语言,一定要了解JVM。
java技术体系

Java 语言的核心特性

  1. 跨平台能力
    Java 的跨平台性依赖于 JVM 的中间层设计。开发者编写的 .java 文件会被编译为与平台无关的 字节码(.class 文件),由 JVM 在目标平台上解释或编译执行。

示例:同一份 Java 程序可在 Windows、Linux、macOS 上运行,无需修改源码。
在这里插入图片描述

意义:降低多环境适配成本,推动企业级应用的快速部署。

  1. 面向对象设计(OOP)
    Java 是纯粹的面向对象语言,其核心思想通过 封装、继承、多态 实现:

    • 封装:通过 private、protected 关键字隐藏实现细节,暴露安全接口。

    • 继承:extends 实现代码复用,implements 支持多接口扩展。

    • 多态:同一方法在不同子类中呈现不同行为(如 Animal 类的 sound() 方法被 Dog 和 Cat 重写)。

  2. 健壮性与安全性

    • 异常处理:强制检查异常(Checked Exceptions)要求开发者显式处理潜在错误(如 IOException)。

    • 内存管理:JVM 自动垃圾回收机制(GC)减少内存泄漏风险。

    • 安全沙箱:通过字节码验证和安全管理器(SecurityManager)限制恶意代码访问系统资源。

  3. 现代语言特性演进
    Java 持续吸收现代编程范式的优点:

    • Java 8:引入 Lambda 表达式、Stream API,支持函数式编程。

    • Java 11:var 关键字简化局部变量声明,HTTP Client 支持异步请求。

    • Java 17:密封类(sealed class)限制继承关系,模式匹配增强代码可读性。

JVM:Java 生态的基石

  1. JVM 的核心作用
    JVM 是 Java 程序运行的虚拟化环境,主要职责包括:
  • 字节码解释与执行:将 .class 文件转换为机器指令。

  • 内存管理:分配堆、栈、方法区等内存空间,并自动回收垃圾对象。

  • 线程调度:管理多线程的创建、同步与资源竞争。

  1. JVM 的运行时数据区
    JVM 内存划分为多个核心区域:
  • 堆(Heap):存储对象实例,是垃圾回收的主战场。

  • 方法区(Metaspace):存放类元数据(Java 8 后替代永久代)。

  • 虚拟机栈:存储方法调用的栈帧(局部变量、操作数栈)。

  • 程序计数器:记录当前线程执行的字节码位置。

  • 本地方法栈:支持 Native 方法(如 C/C++ 库调用)。

  1. 类加载机制
    JVM 通过 双亲委派模型 加载类:
  • 加载:从文件、网络等来源读取 .class 文件。

  • 验证:确保字节码符合 JVM 规范,防止恶意代码注入。

  • 准备:为静态变量分配内存并初始化默认值。

  • 解析:将符号引用转换为直接引用。

  • 初始化:执行静态代码块(static{})和赋值操作。

示例:自定义类加载器可实现热部署(如 Tomcat 为每个 Web 应用单独加载类)。

  1. 垃圾回收(GC)机制
    JVM 通过 GC 自动回收无用的对象,关键算法包括:
  • 标记-清除:简单但易产生内存碎片。

  • 复制算法:将存活对象复制到新空间(适用于年轻代)。

  • 标记-整理:整理内存碎片(适用于老年代)。

分代收集:根据对象生命周期划分年轻代(Young Generation)和老年代(Old Generation)。

现代 GC 器:G1(低延迟)、ZGC(TB 级堆内存)、Shenandoah(并发回收)。

调优场景:高并发服务可通过 -XX:+UseG1GC 启用 G1 垃圾回收器,减少停顿时间。

  1. JIT 编译器
    JVM 通过 即时编译(Just-In-Time Compilation) 提升性能:
  • 解释执行:初期逐行解释字节码,启动速度快。

  • 热点代码优化:频繁执行的代码(热点代码)被编译为本地机器码。

  • 逃逸分析:优化对象分配(如栈上分配、锁消除)。

JVM的架构模型

Java编译器输入的指令流是一种基于栈的指令集架构,另外一种常见的指令集架构则是基于寄存器的指令集架构。计算机指令集架构(ISA)是硬件与软件交互的核心接口,决定了程序如何被编译和执行。基于栈的指令集架构(如 JVM 字节码)和 基于寄存器的指令集架构(如 x86、ARM)是两种经典的设计范式,它们在指令执行方式、性能特点和应用场景上存在显著差异。

基于栈的指令集架构(Stack-Based)
  1. 核心原理
    数据操作依赖栈结构:所有计算通过操作数栈(Operand Stack)完成。指令从栈顶取操作数:例如,加法指令 iadd 会弹出栈顶两个整数,相加后结果压回栈顶。无需显式指定操作数地址:指令本身不包含寄存器或内存地址,隐含依赖栈顶数据。

  2. 典型示例(JVM 字节码)

	java// Java 代码:计算 3 + 5int a = 3;int b = 5;int c = a + b;对应的字节码:

字节码

	iconst_3    // 将常量3压入栈顶istore_1    // 弹出栈顶值(3),存入局部变量表第1槽位(a)iconst_5    // 将常量5压入栈顶istore_2    // 弹出栈顶值(5),存入局部变量表第2槽位(b)iload_1     // 加载局部变量a的值(3)到栈顶iload_2     // 加载局部变量b的值(5)到栈顶iadd        // 弹出栈顶两个值(3和5),相加后结果(8)压入栈顶istore_3    // 弹出栈顶值(8),存入局部变量表第3槽位(c)
  1. 优点
  • 指令紧凑:无需指定操作数地址,指令长度短(如 JVM 字节码通常为 1-2 字节)。

  • 跨平台友好:不依赖物理寄存器数量或布局,适合虚拟机实现(如 JVM)。

  • 代码生成简单:编译器无需处理寄存器分配,逻辑更简单。

  1. 缺点
  • 执行速度较慢:频繁的入栈、出栈操作导致内存访问开销大。

  • 指令数量多:简单操作可能需要多条指令(如加载变量到栈顶再计算)。

基于寄存器的指令集架构(Register-Based)
  1. 核心原理
    数据操作依赖寄存器:指令直接读写寄存器中的操作数。

显式指定操作数地址:指令需声明操作数所在的寄存器或内存地址。

结果直接写入寄存器:例如,加法指令 ADD R1, R2, R3 表示 R1 = R2 + R3。
2. 典型示例(ARM 汇编)

// 计算 3 + 5,结果存入寄存器 R0
MOV R1, #3     // 将立即数3存入寄存器R1
MOV R2, #5     // 将立即数5存入寄存器R2
ADD R0, R1, R2 // R0 = R1 + R2
  1. 优点
    执行效率高:减少内存访问次数,数据直接在寄存器中操作。

指令数量少:单条指令可完成复杂操作(如 ADD 直接操作三个寄存器)。

硬件优化潜力大:与现代 CPU 的多级流水线、乱序执行等特性契合。

  1. 缺点
    指令长度较长:需编码寄存器地址,指令占用空间更大。

依赖硬件寄存器数量:寄存器数量有限的架构(如 x86)可能需频繁内存交互。

编译器复杂度高:需优化寄存器分配策略(如避免寄存器溢出)。

JVM生命周期

JVM的生命周期分为三个状态:启动、执行和推出

  1. 启动: JVM可以通过java命令启动,接着通过引导类加载器加载类文件,最后找到程序中的main方法,接着开始执行Java应用程序
  2. 执行: JVM的执行,表示一个已经启动的JVM开始执行Java程序,执行一个Java程序,真正执行的是一个JVM的进程。
  3. 退出: JVM的退出有下面几种情况
  • Java程序正常结束,所有的非守护线程结束
  • Java程序异常
  • 操作系统故障
  • 用户手动关闭JVM
  • 调用Runtime或者System的exit方法

总结

我们本章简单介绍一下Java语言与JVM的结构,之后我们会在专栏文章中,逐步把我们上面介绍的知识点都覆盖到,争取能够做到让大家能够对JVM的知识有一个宏观的认识。

相关文章:

Java虚拟机 - JVM与Java体系结构

Java虚拟机 JVM与Java体系结构为什么要学习JVMJava与JVM简介Java 语言的核心特性JVM:Java 生态的基石JVM的架构模型基于栈的指令集架构(Stack-Based)基于寄存器的指令集架构(Register-Based)JVM生命周期 总结 JVM与Jav…...

翻译:20250518

翻译题 文章目录 翻译题一带一路中国结 一带一路 The “One Belt and One Road” Initiative aims to achieve win-win and shared development. China remains unchanged in its commitment to foster partnerships. China pursues an independent foreign policy of peace, …...

SparkSQL基本操作

以下是 Spark SQL 的基本操作总结,涵盖数据读取、转换、查询、写入等核心功能: 一、初始化 SparkSession scala import org.apache.spark.sql.SparkSession val spark SparkSession.builder() .appName("Spark SQL Demo") .master("…...

Ansible模块——文件内容修改

修改文件单行内容 ansible.builtin.lineinfile 可以按行修改文件内容,一次修改一行,支持正则表达式。 选项名 类型 默认值 描述 attributesstrnull 设置目标文件的 Linux 文件系统属性(attribute bits),作用类似于…...

基于单片机路灯自动控制仪仿真设计

标题:基于单片机路灯自动控制仪仿真设计 内容:1.摘要 本设计旨在解决传统路灯控制方式效率低、能耗大的问题,开展了基于单片机的路灯自动控制仪仿真设计。采用单片机作为核心控制单元,结合光照传感器、时钟模块等硬件,运用相关软件进行编程和…...

Spring Web MVC————入门(3)

今天我们来一个大练习,我们要实现一个登录界面,登录进去了先获取到登录人信息,可以选择计算器和留言板两个功能,另外我们是学后端的,对于前端我们会些基础的就行了,知道ajax怎么用,知道怎么关联…...

拓展运算符与数组解构赋值的区别

拓展运算符与数组解构赋值是ES6中用于处理数组的两种不同的特性,它们有以下区别: 概念与作用 • 拓展运算符:主要用于将数组展开成一系列独立的元素,或者将多个数组合并为一个数组,以及在函数调用时将数组作为可变参…...

【Linux】第二十章 管理基本存储

目录 1. 对 Linux 磁盘进行分区时有哪两种方案?分别加以详细说明。 2. 简单说下创建MBR磁盘分区涉及哪几个步骤? 3. 创建GPT分区与创建MBR分区有什么不同? 4. 在创建分区时就会在分区上创建文件系统吗? 5. 如何持久挂载文件系…...

DeepSeek本地部署全攻略:从零搭建到Web可视化及数据训练

目录 1. 环境准备与硬件要求2. 安装Ollama框架3. 部署DeepSeek模型4. Web可视化配置5. 数据投喂与模型训练6. 进阶技巧与常见问题1. 环境准备与硬件要求 硬件配置建议 基础配置:16GB内存 + RTX 3060显卡(流畅运行7B参数模型)进阶配置:32GB内存 + RTX 4090显卡(支持14B模型…...

JavaScript性能优化实战(12):大型应用性能优化实战案例

在前面的系列文章中,我们探讨了各种JavaScript性能优化技术和策略。本篇将聚焦于实际的大型应用场景,通过真实案例展示如何综合运用这些技术,解决复杂应用中的性能挑战。 目录 电商平台首屏加载优化全流程复杂数据可视化应用性能优化案例在线协作工具的实时响应优化移动端W…...

前缀和——中心数组下标

此题我们不应局限于前缀和的模板,因为该中心下标把数组分为两个部分且每个部分都要求和,我们就一个再创建一个”后缀和” 定义两个数组f,g。f[i]表示[0,i-1]所有元素的和 f[i]f[i-1]nums[i-1];g[i]表示[i1,n-1]的和 g[i]g[i1]nums[i1];因为依…...

Java——创建多线程的四种方式

一、继承Thread 步骤 1.定义一个类继承Thread 2.重写run方法,在方法中设置线程任务(此线程具体执行的代码) 3.创建自定义线程类对象 4.调用Thread中的start方法,开启线程,jvm自动调用run方法 常用方法 void sta…...

广域网学习

PPPoE技术(拨号上网) PPPoE ( PPP over Ethernet ,以太网承载 PPP 协议)是一种把 PPP 帧封装到以太网帧中的链路层协议。 PPPoE 可以使以太网网络中的多台主机连接到远端的宽带接入服务器。 应用场景 PPPoE 组网结构采…...

inverse-design-of-grating-coupler-3d

一、设计和优化3D光栅耦合器 1.1 代码讲解 通过预定义的环形间距参数(distances数组),在FDTD中生成椭圆光栅结构,并通过用户交互确认几何正确性后,可进一步执行参数扫描优化。 # os:用于操作系统相关功能(如文件路径操作) import os import sys# lumapi:Lumerical 的…...

渗透测试流程-中篇

#作者:允砸儿 #日期:乙巳青蛇年 四月廿一(2025年5月18日) 今天笔者带大家继续学习,网安的知识比较杂且知识面很广,这一部分会介绍很多需要使用的工具。会用各种工具是做网安的基础,ok咱们继续…...

2026武汉门窗门业移门木门铝艺门智能锁展会3月国博举办

展出面积:60000㎡ 观众:80000人次 参展企业:800 专业活动:20 2026武汉门窗门业移门木门铝艺门智能锁展会3月国博举办 2026第二届中国武汉整装定制家居暨门窗装饰材料博览会/2026武汉建博会 时间:2026年3月20-22日 …...

如何用mockito+junit测试代码

Mockito 是一个流行的 Java 模拟测试框架,用于创建和管理测试中的模拟对象(mock objects)。它可以帮助开发者编写干净、可维护的单元测试,特别是在需要隔离被测组件与其他依赖项时。 目录 核心概念 1. 模拟对象(Mock Objects) 2. 打桩(Stubbing) 3. 验…...

31、魔法生物图鉴——React 19 Web Workers

一、守护神协议(核心原理) 1. 灵魂分裂术(线程架构) // 主组件中初始化Workerconst workerRef useRef(null);​useEffect(() > {workerRef.current new Worker(new URL(./creatureWorker.js, import.meta.url));workerRef.…...

洛谷题目:P4052 [JSOI2007] 文本生成器 题解 本题(极难)

个人介绍: 题目传送门: P4052 [JSOI2007] 文本生成器 - 洛谷 (luogu.com.cn) 前言: 这道题要求计算长度为 m 的文章中,至少包含一个给定单词的可读文章的数量,并且结果需要对 10007 取模。下面是小亦为大家逐步分析解题思路: 题目整体思路: 为了方便计算…...

【Linux】命令行参数和环境变量

目录 一、命令行参数 二、环境变量 (一)PATH (二)查看环境变量 (三)获取环境环境变量 (四)为什么要环境变量 (五)环境变量特点总结 (1&am…...

AGI大模型(23):LangChain框架快速入门之LangChain介绍

1 什么是LangChain? LangChain是一个基于大语言模型用于构建端到端语言模型应用的框架,它提供了一系列工具、套件和接口,让开发者使用语言模型来实现各种复杂的任务,如文本到图像的生成、文档问答、聊天机器人等。 官网地址:https://python.langchain.com/docs/introduc…...

vmware虚拟机运行多个产生卡顿问题

最近在工作中使用电脑运行两个虚拟机,用来测试程序。运行的时候发现电脑会非常卡顿。导致调试工作进行到一半就会闪退卡死。 首先尝试的解决方案是开一个虚拟机,然后在windows上部署测试程序,后面发现操作很受限制。然后使用windows管…...

八股碎碎念01——HashMap原理

Java面试题周总结 HashMap HashMap实现原理 Java 1.7版本 在Java1.7中HashMap通过数组链表的方式实现,由于链表查询速度为O(n),因此在插入大量元素后查询速度会明显降低。 Java 1.8版本 在Java1.8中对HashMap进行改进,采用数组链表/红黑…...

长篇小说《白鹿原》原著版本在当当网可购到

著名作家陈忠实所真实描写上世纪1959年、1960年、1961年我国三年饥荒时人吃人的长篇小说《白鹿原》原著版本,现能在当当网上购到,价格仅26元。特此推荐。 笔者是从那段不堪回首的饥饿历史中幸存下来的过来人,也是在改革开放初期的文艺复兴年代…...

ColorAid —— 一个面向设计师的色盲模拟工具开发记

我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 起因:CodeBuddy,说干就干 起初只是一个随口的想法——我想做一个“色盲辅助工具”&…...

对称加密与非对称加密在 JWT 中的应用详解

文章目录 对称加密与非对称加密在 JWT 中的应用详解引言对称加密与非对称加密概述对称加密(Symmetric Encryption)非对称加密(Asymmetric Encryption) 对称加密生成和验证 JWT 的过程生成 JWT(HS256 示例)验…...

Python 中 if 和 else 基础知识的详解和使用

一、基本语法结构 if 条件1:# 条件1 为真时执行的代码块 elif 条件2:# 条件1 不成立,条件2 成立时执行 else:# 所有条件都不成立时执行注意: elif 是“else if”的缩写,可以有多个;else 可省略;条件表达式必须是可以…...

学习黑客Active Directory 入门指南(三)

Active Directory 入门指南(三):关键服务、用户与组管理 🤝💻 大家好!欢迎来到 “Active Directory 入门指南” 系列的第三篇。在前两篇中,我们已经了解了AD的基本概念、逻辑结构(对…...

10.9 LangChain LCEL革命:43%性能提升+声明式语法,AI开发效率飙升实战指南

LangChain 表达式语言(LCEL)架构解析:新一代链式编排引擎 关键词:LangChain Expression Language, Runnable 协议, 链式编排, 并行处理, 生产级应用开发 1. LCEL 设计理念与技术突破 LangChain Expression Language(LCEL)是 LangChain v0.3 的核心革命性升级,重新定义…...

一文读懂-嵌入式Ubuntu平台

现在直接在一些嵌入式Soc上移植ubuntu来用到产品上,刚开始感觉还挺臃肿的,后来细聊了下感觉还是有一定的优势。 ubuntu相信大家在熟悉不过了,几乎无处不在,小到咖啡机,大到火星车,为什么ubuntu如此广泛&am…...

centos7.9扩展已有分区空间

新增50G硬盘 分区 fdisk /dev/sdb Command (m for help): p #打印分区表Disk /dev/sdb: 53.7 GB, 53687091200 bytes, 104857600 sectors Units sectors of 1 * 512 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 byte…...

ubuntu22.04搭建ROS2环境

在 Ubuntu 22.04 上安装 ROS 2(Humble Hawksbill)时,针对国内网络问题,建议使用镜像源加速。以下是分步指南: 1. 更换 Ubuntu 系统源(使用清华镜像) sudo sed -i "shttp://.*archive.ubunt…...

java中sleep()和wait()暂停线程的区别

1. Thread.sleep() 所属类:它是Thread类的静态方法。作用:让当前正在执行的线程暂停指定的时间,在暂停期间,线程会一直持有对象锁(也就是synchronized锁)。中断响应:当线程处于sleep()状态时&a…...

printf函数参数与入栈顺序

01. printf()的核心功能 作用:将 格式化数据 输出到 标准输出(stdout),支持多种数据类型和格式控制。 int printf(const char *format, ...);参数: format:格式字符串,字符串或%开头格式符...:…...

代码案例分析

以下是一个使用线性回归进行简单房价预测的机器学习代码案例分析: 代码示例 import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split # 生成一些示例数据…...

Baklib赋能企业知识资产AI化升级

AI驱动知识管理革新 在数字化转型浪潮中,企业知识管理的范式正经历AI技术的深度重构。传统知识库受限于静态存储与人工维护,而Baklib通过构建知识中台架构,将多模态数据处理与语义理解引擎深度融合,实现知识资产的动态聚合与智能…...

Leetcode 3552. Grid Teleportation Traversal

Leetcode 3552. Grid Teleportation Traversal 1. 解题思路2. 代码实现 题目链接:3552. Grid Teleportation Traversal 1. 解题思路 这一题的话核心就是一个广度优先遍历,我们只需要从原点开始,一点点考察其所能到达的位置,直至…...

【Bluedroid】蓝牙HID DEVICE 报告发送与电源管理源码解析

本文基于Android蓝牙协议栈代码,深度解析HID设备(如键盘、鼠标)从应用层发送输入报告到主机设备的完整流程,涵盖数据封装、通道选择、L2CAP传输、电源管理四大核心模块。通过函数调用链(send_report → BTA_HdSendRepo…...

day15-进程管理

1. 概述 运行起来的软件就是进程,在内存中运行守护进程/服务:一直运行的进程 2. 僵尸进程 2.1. 僵尸进程zombie 当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸…...

抖音视频下载工具 v1.1 自用分享

用免费的公益接口用AI写了个简单的抖音视频下载工具,自用的,不支持批量下载 内置两套API,解析失败会自动切换,支持视频预览播放,视频截图等操作 使用方法也很简单: 软件打开后会监听粘贴板,当检…...

46、什么是Windows服务,它的⽣命周期与标准的EXE程序有什么不同?

Windows服务是一种在Windows操作系统后台运行的特殊应用程序,与标准的EXE程序相比,其生命周期在启动方式、运行持续性、用户交互、运行账户、管理方式、进程状态及开发要求等方面存在显著差异。以下是对Windows服务及其与标准EXE程序生命周期差异的详细分…...

用 UniApp 构建习惯打卡 App —— HabitLoop 开发记

我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 当我脑海中突然冒出一个念头:“做一个自己能每天打卡的习惯 App 吧”,我立刻打开了 Cod…...

NB-IoT技术深度解析:部署模式与节能机制全指南

知识点1【NB-IoT的介绍】 NB-IoT 是指Narrow Band Internet of Things,聚集于低功耗窄带宽广域物联网。 1、License介绍 “有牌照”(license)频谱,指的是政府或者监管机构通过拍卖,划拨等方式,授予给各个…...

Vue百日学习计划Day28-32天详细计划-Gemini版

总目标: 在 Day 28-32 深入理解 Vue 3 的响应式机制,熟练掌握 Composition API 中的 setup, ref, reactive, toRefs, readonly, computed, watch, watchEffect 等核心 API 的使用。 所需资源: Vue 3 官方文档 (组合式 API): https://cn.vuejs.org/guide/introducti…...

Leetcode134加油站

题目链接 134 题意图解: 题目给了n个节点,这些节点呈现环状,每次到一个低点要消耗cost[i]的油量。 从中我们可以得出一个结论:看一个点能不能到下一个点,就要用当前的油量减去消耗的量,那么gas[i] - cost…...

用算术右移实现逻辑右移及用逻辑右移实现算术右移

函数srl()用算术右移实现逻辑右移,函数sra()用逻辑右移实现算术右移。 程序代码 int sra(int x,int k); unsigned int srl(unsigned int x, int k);void main() {int rx1,k,x1;unsigned int rx2,x2;k3;x10x8777;x20x8777;rx1sra(x1, k);rx2srl(x2, k);while(1); }…...

箭头函数及其与普通函数区别的详细解释

一、箭头函数的基本特性 语法简洁性 箭头函数使用 > 符号定义,省略 function 关键字,适合快速定义匿名函数或简单表达式。 // 普通函数 function sum(a, b) { return a b; } // 箭头函数 const sum (a, b) > a b;若函数体为单行表达式&#x…...

Denoising Score Matching with Langevin Dynamics

在自然图像等复杂数据集中,真实数据往往集中分布在一个低维流形上,概率密度函数的梯度(即得分函数)难以定义与估计。为缓解该问题,SMLD 提出使用不同强度的高斯噪声对数据进行扰动,扰动后的数据不再集中于低…...

Flink的时间问题

Apache Flink 中的 时间语义(Time Semantics) 是流处理的核心概念之一。Flink 支持多种时间类型,用于控制窗口计算、事件排序和状态管理等操作。 🕒 一、Flink 时间分类 类型名称描述Processing Time处理时间每个算子基于本地系统…...

3:OpenCV—视频播放

播放来自文件或相机的视频 在本教程中,我将向您展示如何使用OpenCV从文件或相机/网络摄像头捕获和播放视频。尽管OpenCV没有针对视频处理进行优化,但它提供了一个简单的API来播放视频。在我们的OpenCV程序中,我们所要做的就是从视频文件或相…...