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

JVM虚拟机(一)介绍、JVM内存模型、JAVA内存模型,堆区、虚拟机栈、本地方法栈、方法区、常量池

目录

学习JVM有什么用、为什么要学JVM?

JVM是什么呢?

优点一:一次编写,到处运行。(Write Once, Run Anywhere,WORA)

优点二:自动内存管理,垃圾回收机制。

优点三:多线程支持

【Java程序运行机制】我们首先需要了解java如何运行起来的?

一、JVM和JMM的区别

(1)Java内存模型(JMM)

(2)JVM内存模型(JVM)

二、JVM运行时数据区

一、堆(heap)--- 存放对象实例(重要)

二、虚拟机栈(JVM Stack)--- (线程私有)

三、本地方法栈

四、方法区(Non-Heap)==> 永久代(1.8以前)、元空间(1.8以后)

五、常量池

(1)字符串常量池(String Pool)---堆区

(2)运行时常量池---方法区


学习JVM有什么用、为什么要学JVM?

  1. 深入理解Java语言:了解JVM的工作原理可以帮助你更深入地理解Java语言的运行机制,包括字节码的编译和执行过程;以及JVM的一些概念和技术,如垃圾收集、内存管理等。
  2. 改进代码质量:了解JVM的内存模型和并发模型可以帮助你编写更高质量的代码,避免死锁和竞态条件等问题。
  3. 性能优化:掌握JVM的知识能让你更有效地进行性能调优。你可以分析和理解垃圾收集器的行为,优化内存使用,减少延迟和提高吞吐量。
  4. 故障排查:当遇到内存泄漏、栈溢出、CPU飙高 或其他JVM相关的问题时,对JVM的了解可以帮助你快速定位和解决问题。可以更熟练地使用各种JVM工具,如jconsole、jstack、jmap、jstat等,这些工具对于监控和故障排查非常有用。
  5. 准备面试:对于高级Java开发者或架构师的职位,对JVM的理解通常是面试中的重要部分

JVM是什么呢?

JVM(Java Virtual Machine,Java虚拟机)是一个可以执行Java字节码的虚拟计算机。它是Java平台的核心组成部分


优点一:一次编写,到处运行。(Write Once, Run Anywhere,WORA)

Java源代码被编译成平台无关的字节码,可以在任何安装了JVM的平台上(windows/Linux/mac)运行。

优点二:自动内存管理,垃圾回收机制。

JVM负责自动内存管理,包括垃圾收集(Garbage Collection,GC),减轻了开发者管理内存的负担。

说到这里,一般会跟 C语言进行对比,C语言需要程序员自己去管理内存,如果程序员由于编码不当,很容易造成内存泄露的问题。而 Java 虚拟机的垃圾回收功能就大大减轻了程序员的负担,减少了程序员出错的机会。

优点三:多线程支持

JVM支持多线程编程,允许并发执行,提高了应用程序的效率。

【Java程序运行机制】我们首先需要了解java如何运行起来的?

Java文件是如何运行起来的:

Java文件运行起来的过程通常涉及以下几个步骤: 

1、编写代码:首先,我们编写Java源代码【后缀为.java

2、编译代码:使用JDK中的Java编译器(javac命令)将源代码编译成字节码【.class文件

3、运行程序:使用Java虚拟机(JVM)java命令运行生成的字节码文件。这将加载字节码并执行其中的代码。

4、类加载JVM首先加载字节码文件。类加载器(ClassLoader)首先加载.class文件,然后链接阶段会进行验证、准备和解析。最后,在初始化阶段,JVM会执行类构造函数<clinit>()方法。

5、执行主方法:JVM查找并执行main方法,这是程序的入口点。在执行期间,JVM管理多个运行时数据区,包括方法区、堆、栈、本地方法栈和程序计数器。

6、程序结束:当程序完成执行或遇到退出命令时,JVM将停止程序,并进行必要的清理工作。

7、垃圾回收JVM的垃圾收集器会自动回收不再使用的对象所占用的内存。

在整个过程中,Java代码的安全性由JVM的安全管理器来保证,确保代码不会执行任何违反安全策略的操作。

总结:

其实运行一个Java程序都是通过启动一个JVM虚拟机,在虚拟机里面运行XXX.class文件

C:\Program Files\Java\jdk1.8.0_333\bin\java

一、JVM和JMM的区别

(1)Java内存模型(JMM)

Java内存模型规定所有的变量都存储在主内存中,每条线程还有自己的工作内存,线程的工作内存中保存了被该线程使用到的变量的主内存副本的拷贝,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的变量。不同的线程之间也无法访问对方工作内存中的变量,线程间变量值的传递均需要通过主内存来完成。

Java 内存模型(下文简称 JMM)就是在底层处理器内存模型的基础上,定义自己的多线程语义。它明 确指定了一组排序规则,来保证线程间的可见性。

java 提供了几种语言结构,包括 volatile, final 和 synchronized, 它们旨在帮助程序员向编译器描述程序 的并发要求,其中:

  • volatile - 保证可见性和有序性

  • synchronized - 保证可见性和有序性; 通过管程(Monitor)保证一组动作的原子性

  • final - 通过禁止在构造函数初始化和给 final 字段赋值这两个动作的重排序,保证可见性(如果 this 引用逃逸就不好说可见性了)

(2)JVM内存模型(JVM)

Jvm:(java Virtual Machine)JVM是Java虚拟机,Java程序需要运行在虚拟机上,不同的平台有自己的虚拟机,因此Java语言可以实现跨平台。

JVM主要组成部分:JVM包括两个子系统和两个组件

  • 类加载子系统

  • 执行引擎

  • 运行时数据区

  • 本地接口

二、JVM运行时数据区

一、堆(heap)--- 存放对象实例(重要)

Java 堆是 Java 虚拟机所管理的内存中最大的一块。Java 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。

  • 【堆的物理空间是不连续的所以分配的内存是在运行期确认的,因此大小不固定】

  • 存放内容:堆存放的是对象的实例和数组。

大部分Java的内存溢出都属于堆溢出。原因是因为大量对象占据了堆空间,这些对象都持有强引用导致无法回收。

例子:

启动参数设置-Xmx10m,限制最大的内存为10M

public static void main(String[] args){
​List<String> list = new ArrayList<>();while(true){list.add("111");}
} 

二、虚拟机栈(JVM Stack)--- (线程私有)

每个线程运行时所需要的内存,称为虚拟机栈,它的特点就是先进后出。

【栈的物理空间是连续的,所以分配的内存大小要在编译期就确认,大小是固定的】

栈存放的内容:局部变量,操作数栈,返回结果。该区更关注的是程序方法的执行。

  • 每个线程运行的时候都会创建虚拟机栈,所以栈内存也是线程安全的。

  • 每个栈由多个栈帧(frame)组成,对应着每次方法调用时所需要的数据,或者说占用的内存

JVM栈主要负责以下几个方面:

  1. 方法调用:每当Java程序调用一个方法时,JVM栈就会为这次方法调用创建一个栈帧(Stack Frame),用于存储局部变量、操作数栈、动态链接信息和方法出口等。

  2. 局部变量存储:每个栈帧都包含一个局部变量表,用于存储方法中的局部变量,包括基本数据类型、对象引用以及returnAddress类型(指向方法调用结束后的执行点)。

  3. 操作数栈:每个栈帧还包含一个操作数栈,用于存储方法执行过程中的中间结果,以及参与计算的操作数。

  4. 同步:JVM栈还与Java同步机制有关。当一个同步方法或同步块被调用时,JVM会创建一个锁记录(Lock Record),并将其压入当前线程的JVM栈中。

  5. 异常处理:JVM栈还参与异常处理。当异常发生时,JVM会创建一个异常对象,并在JVM栈中查找匹配的异常处理器。

  6. 线程私有每个线程都有自己的JVM栈,这意味着JVM栈是线程私有的内存区域,用于支持多线程环境下的并发执行。

  7. 内存管理:JVM栈中的栈帧随着方法调用的结束而自动被销毁,其内存由JVM自动管理,不需要程序员手动释放。

Java 虚拟机栈会出现两种异常:StackOverFlowError 和 OutOfMemoryError:

  • StackOverFlowError:当线程请求栈的深度超过当前Java虚拟机栈的最大深度的时候,就抛出StackOverFlowError异常。(典型的场景有:递归调用和死循环)

  • OutOfMemoryError:若 Java 虚拟机栈的内存大小允许动态扩展,且当线程请求栈时内存用完了(如果JVM栈的内存空间不足以创建新的栈帧),此时抛出OutOfMemoryError异常。

由于每一个线程的开启都要占用系统内存,因此当线程数量太多时,也有可能导致OOM。由于线程的栈空间也是在堆外分配的,因此和直接内存非常相似,如果想让系统支持更多的线程,那么应该使用一个较小的堆空间。

三、本地方法栈

和虚拟机栈所发挥的作用非常相似,区别是:

  • 本地方法栈则为虚拟机使用到的 Native 方法服务。

  • 虚拟机栈为虚拟机执行 Java 方法 (也就是字节码)服务

本地方法被执行的时候,在本地方法栈也会创建一个栈帧,用于存放该本地方法的局部变量表、操作数栈、动态链接、出口信息。方法执行完毕后相应的栈帧也会出栈并释放内存空间

本地方法栈报错:

也会出现 StackOverFlowError 和 OutOfMemoryError 两种错误。

本地方法区都有什么里面都有什么?

native方法

四、方法区(Non-Heap)==> 永久代(1.8以前)、元空间(1.8以后)

(线程共享)

它用于存储已被虚拟机加载的:类信息、常量、静态变量、方法字节码、即时编译器编译后的代码等数据。

方法区的两个实现类:

  • JDK6、JDK7 时,方法区 就是 PermGen(永久代)。

  • JDK8 时,方法区就是 Metaspace(元空间)

下面是关于方法区的介绍:

方法区(Method Area) 是各个线程共享的内存区域(跟我们之前讲过的堆空间是一样的)。

元空间默认空间大小是21M,如果空间不足会触发 Full GC,然后扩容。

主要存储类的信息、运行时常量池。

方法区是在虚拟机启动的时候创建,关闭虚拟机时释放元空间的内存。

如果方法区域中的内存无法满足分配请求,则会抛出 OutOfMemoryError: Metaspace。

方法区的实现运行时常量池字符串常量池
Jdk6PermGen space(永久代)永久代---在堆区永久代--在堆区
Jdk7PermGen space(永久代)永久代-方法区在堆区
Jdk8Metaspace(元空间)元空间-方法区在堆区

在 jdk1.8中元空间替代了永久代,原方法区被分成两部分:

方法区的Class文件信息,Class常量池和运行时常量池的三者关系

  • 加载的类信息

  • 运行时常量池:加载的类信息被保存在元数据区中,运行时常量池保存在堆中;

五、常量池

每个class一份,存在于字节码文件中。常量池中有字面量(数量值、字符串值)和符号引用(类符号引用、字段符号引用、方法符号引用),虚拟机指令根据这张常量表找到要执行的类名、方法名、参数类型、字面量等类型

运行时和字符串常量池的版本变化? 存在哪里?

  • 在JDK1.7之前:运行时常量池--- 包含字符串常量池存放在方法区(永久代)

  • 在JDK1.7:字符串常量池被从永久代拿到了中, 运行时常量池还在方法区, 也就是hotspot中的永久代。

  • 在JDK1.8:hotspot移除了永久代用元空间(Metaspace)取而代之, 这时候字符串常量池还在堆, 运行时常量池还在方法区, 只不过方法区的实现从永久代变成了元空间(Metaspace)

(1)字符串常量池(String Pool)---堆区

字符串常量池又称为:字符串池,全局字符串池,英文也叫String Pool。 在工作中,String类是我们使用频率非常高的一种对象类型。JVM为了提升性能和减少内存开销,避免字符串的重复创建,其维护了一块特殊的内存空间,这就是我们今天要讨论的核心:字符串常量池。字符串常量池由String类私有的维护。

字符串常量池

每个JVM中只有一份,存在于堆区。全局字符串池里的内容是在类加载完成,经过验证,准备阶段之后在堆中生成字符串对象实例,然后将该字符串对象实例的引用值存到string pool中(string pool中存的是引用值而不是具体的实例对象,具体的实例对象是在堆中开辟的一块空间存放的)。 在HotSpot VM里实现的string pool功能的是一个StringTable类,它是一个哈希表,里面存的是驻留字符串(用双引号括起来的引用而不是驻留字符串实例本身),也就是说在堆中的某些字符串实例被这个StringTable引用之后就等同被赋予了”驻留字符串”的身份。

(2)运行时常量池---方法区

行时常量池它是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述等信息外,还有一项信息是常量池(Constant Pool Table),用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后存放到常量池中。

运行时常量池是当Class文件被加载到内存后,Java虚拟机会将Class文件常量池里的内容转移到运行时常量池里(运行时常量池也是每个类都有一个)。运行时常量池相对于Class文件常量池的另外一个重要特征是具备动态性,Java语言并不要求常量一定只有编译期才能产生,也就是并非预置入Class文件中常量池的内容才能进入方法区运行时常量池,运行期间也可能将新的常量放入池中

运行时常量池

每个class一份,存在于方法区中(元空间)。当类加载到内存中后,jvm就会将class常量池中的内容存放到运行时常量池中,经过解析(resolve)之后,也就是把符号引用替换为直接引用,解析的过程会去查询全局字符串池,也就是下面的StringTable,以保证运行时常量池所引用的字符串与全局字符串池中所引用的是一致的。

总结:

JVM之 方法区、永久代(PermGen space)、元空间(Metaspace)三者的区别猎人在吃肉的博客-CSDN博客方法区和元空间区别

通过上面分析,大家应该清楚了 JDK8 中永久代向元空间的转换。不过大家应该都有一个疑问,就是为什么要做这个转换?所以,最后给大家总结以下几点原因:

1)字符串存在永久代中,容易出现性能问题和内存溢出。

2)类及方法的信息等比较难确定其大小,因此对于永久代的大小指定比较困难,太小容易出现永久代溢出,太大则容易导致老年代溢出。

3)永久代会为 GC 带来不必要的复杂度,并且回收效率偏低。

4)Oracle 可能会将HotSpot 与 JRockit 合二为一。

整理完毕,下一节继续!

相关文章:

JVM虚拟机(一)介绍、JVM内存模型、JAVA内存模型,堆区、虚拟机栈、本地方法栈、方法区、常量池

目录 学习JVM有什么用、为什么要学JVM&#xff1f; JVM是什么呢&#xff1f; 优点一&#xff1a;一次编写&#xff0c;到处运行。&#xff08;Write Once, Run Anywhere&#xff0c;WORA&#xff09; 优点二&#xff1a;自动内存管理&#xff0c;垃圾回收机制。 优点三&am…...

Python利用xlrd复制一个Excel中的sheet保留原格式创建一个副本(注:xlrd只能读取xls)

目录 专栏导读库的介绍库的安装完整代码总结 专栏导读 &#x1f338; 欢迎来到Python办公自动化专栏—Python处理办公问题&#xff0c;解放您的双手 &#x1f3f3;️‍&#x1f308; 博客主页&#xff1a;请点击——> 一晌小贪欢的博客主页求关注 &#x1f44d; 该系列文…...

40、Python之面向对象:扩展的对象属性解析顺序(描述符 + MRO)

引言 在上一篇文章中&#xff0c;我们简单回顾了Python中在继承语境下的属性解析顺序&#xff0c;同时补充了能够控制、影响属性解析的3个函数/方法&#xff08;2个魔术方法 1个内置函数&#xff09;&#xff0c;相信对Python中属性的解析&#xff0c;相较于MRO&#xff0c;有…...

stm32—时钟、定时器和看门狗

1. 时钟 什么是时钟呢&#xff1f; 一个可以产生周期性信号的设备 什么是周期性信号&#xff1f; 1 ----- ----- ----- 0 ----- ----- ----- 所以时钟信号就是周期性变化的信号 关于时钟我们有两个比较重要…...

Windows平台RTSP|RTMP播放器如何实时调节音量

我们在做Windows平台RTSP、RTMP播放器的时候&#xff0c;有这样的技术需求&#xff0c;特别是多路监控的时候&#xff0c;并不是每一路audio都需要播放出来的&#xff0c;所以&#xff0c;这时候&#xff0c;需要有针对音量调节的设计&#xff1a; /** smart_player_sdk.cs* C…...

Leetcode JAVA刷刷站(10)正则表达式匹配

一、题目概述 二、思路方向 在Java中&#xff0c;实现一个支持.和*的正则表达式匹配器&#xff0c;可以通过递归或动态规划&#xff08;DP&#xff09;的方法来完成。这里&#xff0c;我将使用动态规划的方法来解决这个问题&#xff0c;因为它更容易理解和实现。 动态规划的思…...

合并图片为pdf

1.先使用IDM在网页下载&#xff1a; 2.按文件类型分组&#xff0c;在按名称大小排序&#xff0c;之后使用Acrobat合并文件成一个pdf即可...

【Linux Install】Ubuntu20, Windows10 双系统安装

1. 制作启动盘 1.1 下载 Ubuntu 系统镜像 ISO 文件 从 Ubuntu 官网下载 (https://cn.ubuntu.com/download/desktop)。官网访问慢的&#xff0c;从国内镜像点下。 1.2 烧录 Ubuntu ISO 镜像 下载 Rufus&#xff1a;从Rufus官网下载 Rufus 工具。 插入U 盘&#xff1a;将U盘插…...

Keepalived + LVS实现高可用

1、简介 LVS和Keepalived是Linux操作系统下实现高可用的负载均衡解决方案的重要工具。通过协同工作&#xff0c;它们能够实现一种高性能、高可用的负载均衡服务&#xff0c;使得用户能够透明地访问到集群中的服务。同时&#xff0c;它们还提供了强大的监控和故障切换功能&#…...

Gin框架接入Prometheus,grafana辅助pprof检测内存泄露

prometheus与grafana的安装 grom接入Prometheus,grafana-CSDN博客 Prometheus 动态加载 我们想给Prometheus新增监听任务新增ginapp项目只需要在原来的配置文件下面新增ginapp相关metric 在docker compose文件下面新增 执行 docker-compose up -d curl -X POST http://lo…...

上海凯泉泵业入职测评北森题库题型分析、备考题库、高分攻略

上海凯泉泵业&#xff08;集团&#xff09;有限公司是一家大型综合性泵业公司&#xff0c;专注于设计、生产、销售泵、给水设备及其控制设备。作为中国泵行业的领军企业&#xff0c;凯泉集团拥有7家企业和5个工业园区&#xff0c;总资产达到25亿元&#xff0c;生产性建筑面积35…...

Linux:基础IO

目录 1. stdin & stdout & stderr 2. 系统文件I/O 1. 接口介绍 open write read close lseek 2. open函数返回值 3. 文件描述符fd 0 & 1 & 2 文件描述符的分配规则 重回定向 dup2 简易Shell的模拟实现 4. FILE 5. 再谈对文件的理解 1. stdin …...

奥运奖牌窥视

1 前言 2024巴黎奥运会已经闭幕了&#xff0c;中国队创纪录地获得了海外举办的奥运会的最佳成绩&#xff0c;我们来个管中窥豹&#xff0c;看看中国队从哪些项目中取得了奖牌。 2 奖牌组成 游泳真是大项&#xff0c;小项数量众多&#xff0c;比如个人自由泳就有100m、200m、4…...

RUST实现远程操作电脑手机

简介&#xff1a; Rust Desk 是一个开源的远程桌面软件&#xff0c;能够完全替代向日葵和ToDesk的功能&#xff0c;包括电脑控制电脑、电脑控制手机、手机控制电脑等。它是完全免费的。 下载&#xff1a; 需要下载 Rust Desk 的服务端和客户端安装包。 安装&#xff1a; 服务…...

spring01-spring容器启动过程分析

【README】 本文总结自《spring揭秘》&#xff0c;作者王福强&#xff0c;非常棒的一本书&#xff0c;墙裂推荐&#xff1b; spring容器根据配置元素组装可用系统分2个阶段&#xff0c;包括spring容器启动&#xff0c; springbean实例化阶段&#xff1b; 本文详细分析spring容…...

RAG与LLM原理及实践(12)--- Milvus RRFRanker的使用场景及源码分析

目录 背景 rrfRanker 简介与实例 核心逻辑 实例 蕴含思想 rrfRanker VS weightedRanker rrfRanker weightedRanker 场景使用区别 RRFRanker 使用场景 weightedRanker 使用场景 代码 代码实现 运行结果 修改代码 再次运行结果 源码 源码实现 解释 Ranker 可…...

Nginx与Tomcat的区别

Nginx与Tomcat的区别 —— 经验笔记 引言 在现代Web开发中&#xff0c;选择合适的服务器软件对于构建高性能、可靠的应用程序至关重要。Nginx 和 Tomcat 是两种常见的服务器软件&#xff0c;尽管它们都可以被归类为Web服务器&#xff0c;但它们的设计目标和应用场景有着本质的…...

LeetCode 3151.特殊数组 I

【LetMeFly】3151.特殊数组 I 力扣题目链接&#xff1a;https://leetcode.cn/problems/special-array-i/ 如果数组的每一对相邻元素都是两个奇偶性不同的数字&#xff0c;则该数组被认为是一个 特殊数组 。 Aging 有一个整数数组 nums。如果 nums 是一个 特殊数组 &#xff…...

【产品那些事】The OX Active ASPM Platform

文章目录 前言关于OX Security产品理念 流程体验Complete Visibility&#xff1a;将安全无缝嵌入到SDLC中PBOMOSC&R coverageContextualized Prioritization&#xff1a;快速解决最关键的风险Accelerated Response&#xff1a;简化安全流程See Beyond the Code&#xff1a;…...

欢迪迈手机商城设计与开发

TOC springboot137欢迪迈手机商城设计与开发 绪论** 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0…...

Endnote与word关联 解决方案: COM加载项-----》CWYW插件安装

1、首先说一下本次情况&#xff0c;office的版本是2019&#xff0c;后安装的Endnote 9。旧版word也可按此方法尝试。 2、先找到关键的EndNote Cwyw.dll文件。应在此目录下&#xff1a;C:\Program Files (x86)\EndNote X7\Product-Support\CWYW。 3、如没有EndNote Cwyw.dll文…...

用R语言运用 Shiny 包打造基于鸢尾花数据集的交互式数据可视化应用

下面内容摘录自《R 语言与数据科学的终极指南》专栏文章的部分内容&#xff0c;每篇文章都在 5000 字以上&#xff0c;质量平均分高达 94 分&#xff0c;看全文请点击下面链接&#xff1a; 1章4节&#xff1a;数据可视化&#xff0c; R 语言的静态绘图和 Shiny 的交互可视化演…...

Upload-Lab第3关:如何巧妙应对黑名单文件后缀检测?

关卡介绍 在Pass03中,我们面临的挑战是绕过文件上传功能的黑名单检测机制。黑名单检测是一种常见的安全措施,它通过检查上传文件的后缀来阻止特定类型的文件(如 .php, .exe)被上传。在这一关,我们需要找到一种方法,上传一个可以执行的恶意文件,同时绕过黑名单检测。 …...

SSLVPN对比IPSECVPN安全设备的起源、发展、以及目前行业使用场景

前言 SSL VPN&#xff08;Secure Sockets Layer Virtual Private Network&#xff09;是一种利用SSL/TLS&#xff08;Transport Layer Security&#xff0c;传输层安全&#xff09;协议来创建安全连接的技术&#xff0c;它允许远程用户通过公共网络&#xff08;通常是互联网&am…...

Hadoop大数据集群搭建

一、虚拟机配置网络 1、配置文件 进入“/etc/sysconfig/network-scripts”目录&#xff0c;查看当前目录下的“ifcfg-ens33”文件 对“ens33”文件进行配置 2、重启网络 systemctl restart network 3、测试网络 Ping www.baidu.com 4、设置虚拟机主机名称 5、绑定主机名和…...

【技术前沿】MetaGPT入门安装部署——用多个大语言模型解决任务!一键安装,只需填写OpenAI API

项目简介 MetaGPT 是一个多智能体框架&#xff0c;旨在构建全球首家 “AI 软件公司”。该项目通过为 GPT 分配不同的角色&#xff0c;模拟产品经理、架构师、工程师等职业&#xff0c;协同完成复杂的软件开发任务。MetaGPT 将一个简单的需求转化为完整的软件开发流程&#xff…...

#compsoer基本使用01#

Composer 是 PHP 的依赖管理工具&#xff0c;它允许开发人员管理和安装项目所需的依赖包。 1:查看Compsoer的全局配置命令 composer config -g --list --verbose 这个可以查看composer的镜像地址。例如 [repositories.packagist.org] type (string) : composer [repositor…...

基于c++的yolov5推理之前处理详解及代码(一)

目录 一、前言&#xff1a; 二、关于环境安装&#xff1a; 三、首先记录下自己的几个问题 问题&#xff1a;c部署和python部署的区别&#xff1f; 四、正文开始 4.1 图像预处理讲解 1、BGR---->RBG 2、等比例放缩图片&#xff08;涉及到短边的填充&#xff09; 3、归一化…...

Oracle(55)什么是并行查询(Parallel Query)?

并行查询&#xff08;Parallel Query&#xff09;是数据库管理系统中的一种查询优化技术&#xff0c;它允许数据库引擎同时使用多个处理器或线程来执行查询操作。通过将查询任务分解为多个子任务&#xff0c;并在多个处理器上同时执行这些子任务&#xff0c;可以显著提高查询的…...

关于 Lora中 Chirp Spread Spectrum(CSS)调制解调、发射接收以及同步估计的分析

本文结合相关论文对CSS信号的数学形式、调制解调、发射接收以及同步估计做了全面分析&#xff0c;希望有助于更好地理解lora信号 long-range (LoRa) modulation, also known as chirp spread spectrum (CSS) modulation, in LoRaWAN to ensure robust transmission over long d…...

女孩子做网站推广/网络营销的优缺点

新开了公众号&#xff0c;欢迎关注 epoll epoll是linux下的一种I/O多路复用的操作方式&#xff0c;是event poll的意思 I/O多路复用&#xff0c;举个栗子&#xff0c;在酒吧&#xff0c;一个服务员&#xff0c;10个顾客在喝酒&#xff0c;服务员有这么几种服务方式 服务员…...

温州网站建设制作设计公司/定制网站制作公司

--创建一个person表 create table person( pid number(20), pname varchar2(10) );--添加一列 alter table person add( gender number(1) );--修改列类型 char为定长 alter table person modify( gender char(1) );--修改列名称 gender为sex alter table pers…...

织梦做音乐网站/腾讯广点通广告投放平台

http://www.cocos2d-x.org/wiki/Getting_Started_Cocos2d-js转载于:https://blog.51cto.com/snaile/1587019...

消费金融网站建设/aso优化师

对用户的行为进行分析得到用户的偏好后&#xff0c;可以根据用户的偏好计算相似用户和物品&#xff0c;然后可以基于相似用户或物品进行推荐。这就是协同过滤中的两个分支了&#xff0c;即基于用户的协同过滤和基于物品的协同过滤。 关于相似度的计算&#xff0c;现有的几种方法…...

南通网站建设空间/婚恋网站排名前十名

给定一个整数&#xff0c;写一个函数来判断它是否是 4 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 整数 n 是 4 的幂次方需满足&#xff1a;存在整数 x 使得 n 4x 示例 1&#xff1a; 输入&#xff1a;n 16 输出&#xff1a;true 示…...

怎么做网站扫描/百度扫一扫识别图片在线

电脑垃圾如果能够清理得好&#xff0c;能很大程度上延缓电脑“老去”的时间。相同的电脑&#xff0c;有的人用几年还是很流畅&#xff0c;有些人刚用了三个月就变卡变慢了。这其中的影响因素有很多&#xff0c;电脑垃圾算是一种最容易解决的影响因素。电脑垃圾如果能够清理得好…...