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

想要学会JVM调优,先掌握JVM内存模型和JVM运行原理

1、前言

今天将和你一起探讨Java虚拟机(JVM)的性能调优。

JVM算是面试中的高频问题了,通常情况下总会有人问到:请你讲解下 JVM 的内存模型,JVM 的

性能调优做过

2、为什么 JVM 在 Java 中如此重要

首先你应该知道,运行一个Java应用程序,我们必须要先安装 JDK 或者 JRE 包。

这是因为 Java应用在编译后会变成字节码,然后通过字节码运行在 JVM 中,而 JVM 是 JRE 的核

心组成部分。

JVM不仅承担了Java字节码的分析(JIT compiler)和执行(Runtime),同时也内置了自动内

存分配管理机制

这个机制可以大大降低手动分配回收机制可能带来的内存泄露和内存溢出风险,使 Java开发人员

不需要关注每个对象的内存分配以及回收,从而更专注于业务本身。

3、从了解内存模型开始

JVM 自动内存分配管理机制的好处很多,但实则是把双刃剑

这个机制在提升Java开发效率的同时,也容易使 Java 开发人员过度依赖于自动化,弱化对内存的

管理能力,这样系统就很容易发生 JVM 的堆内存异常,垃圾回收(GC)的方式不合适以及 GC

次数过于频繁等问题,这些都将直接影响到应用服务的性能

因此,要进行 JVM 层面的调优,就需要深入了解 JVM 内存分配和回收原理,这样在遇到问题

时,我们才能通过日志分析快速地定位问题;也能在系统遇到性能瓶颈时,通过分析JVM 调优来

优化系统性能

这也是整个模块的重点内容,今天我们就从 JVM 的内存模型学起,为后续的学习打下一个坚实的

基础。

4、JVM内存模型的具体设计

我们先通过一张 JVM 内存模型图,来熟悉下其具体设计。

在 Java 中,JVM内存模型主要分为堆、程序计数器、方法区、虚拟机栈和本地方法栈

我们来分析,JVM 的 5 个分区具体是怎么实现的呢?

1.堆(Heap)

堆是 JVM 内存中最大的一块内存空间,该内存被所有线程共享,几乎所有对象和数组都被分配到

了堆内存中。

堆被划分为新生代和老年代,新生代又被进一步划分为 Eden 和Survivor 区,最后 Survivor 由

From Survivor和To Survivor 组成。

Java6 版本中,永久代在非堆内存区;到了 Java7 版本,永久代的静态变量和运行时常量池

合并到了堆中;而到了 Java8永久代被元空间取代了

结构如下图所示:

2.程序计数器(Program Counter Register)

程序计数器是一块很小的内存空间,主要用来记录各个线程执行的字节码的地址,例如,分支、循

环、跳转、异常、线程恢复等都依赖于计数器。

由于Java是多线程语言,当执行的线程数量超过CPU数量时,线程之间会根据时间片轮询争夺

CPU资源。

如果一个线程的时间片用完了,或者是其它原因导致这个线程的CPU资源被提前抢夺,那么这个退

出的线程就需要单独的一个程序计数器,来记录下一条运行的指令。

3.方法区(Method Area)

很多开发者都习惯将方法区称为“永久代”,其实这两者并不是等价的。

HotSpot 虚拟机使用永久代来实现方法区,但在其它虚拟机中,例如,Oracle的JRockit、IBM 的

J9 就不存在永久代一说。

因此,方法区只是 JVM 中规范的一部分,可以说,在HotSpot 虚拟机中,设计人员使用了永久代

来实现了 JVM 规范的方法区。

方法区主要是用来存放已被虚拟机加载的类相关信息,包括类信息、运行时常量池、字符串常量

。类信息又包括了类的版本、字段、方法、接口和父类等信息。

JVM在执行某个类的时候,必须经过加载、连接、初始化,而连接又包括验证、准备、解析三个阶

段。

在加载类的时候,JVM会先加载 class 文件,而在 class 文件中除了有类的版本、字段、方法和接

口等描述信息外,还有一项信息是常量池 (Constant Pool Table),用于存放编译期间生成的各种字

面量和符号引用。

字面量包括字符串(String a=“b”)、基本类型的常量(final 修饰的变量),符号引用则包括类和

方法的全限定名(例如 String 这个类,它的全限定名就是Java/lang/String)、字段的名称描述

以及方法的名称描述符

而当类加载到内存中后,JVM 就会将 class 文件常量池中的内容存放到运行时的常量池中;在解析

阶段,JVM 会把符号引用替换为直接引用(对象的索引值)。

例如,类中的一个字符串常量在 class 文件中时,存放在 class 文件常量池中的;在 JVM加载完类

之后,JVM 会将这个字符串常量放到运行时常量池中,并在解析阶段,指定该字符串对象的索引

值。

运行时常量池是全局共享的,多个类共用一个运行时常量池,class 文件中常量池多个相同的字符

串在运行时常量池只会存在一份。

方法区与堆空间类似,也是一个共享内存区,所以方法区是线程共享的。假如两个线程都试图访问

方法区中的同一个类信息,而这个类还没有装入 JVM,那么此时就只允许一个线程去加载它,另

一个线程必须等待。

HotSpot 虚拟机Java7 版本中已经将永久代的静态变量和运行时常量池转移到了堆中其余

部分则存储在JVM 的非堆内存中,而 Java8 版本已经将方法区中实现的永久代去掉了,并用元空

间(class metadata)代替了之前的永久代,并且元空间的存储位置是本地内存。

之前永久代的类的元数据存储在了元空间,永久代的静态变量(class static variables)以及运行

时常量池(runtime constant pool)则跟 Java7 一样,转移到了堆中。

那你可能又有疑问了,Java8 为什么使用元空间替代永久代,这样做有什么好处呢?

官方给出的解释是:

移除永久代是为了融合 HotSpot JVM 与 JRockit VM 而做出的努力,因为JRockit 没有永久代,所

以不需要配置永久代。

永久代内存经常不够用或发生内存溢出,爆出异常 java.lang.OutOfMemoryError: PermGen。

这是因为在 JDK1.7 版本中,指定的 PermGen 区大小为 8M,由于PermGen 中类的元数据信息在

每次 FullGC 的时候都可能被收集,回收率都偏低,成绩很难令人满意;还有为 PermGen分配多

大的空间很难确定PermSize的大小依赖于很多因素,比如,JVM加载的 class 总数、常量池的大

小和方法的大小等。

4.虚拟机栈(VM stack)

Java虚拟机栈是线程私有的内存空间,它和Java 线程一起创建

当创建一个线程时,会在虚拟机栈中申请一个线程栈,用来保存方法的局部变量、操作数栈、动态

链接方法和返回地址等信息,并参与方法的调用和返回。每一个方法的调用都伴随着栈帧的入栈操

作,方法的返回则是栈帧的出栈操作。

5.本地方法栈(Native Method Stack)

本地方法栈跟 Java 虚拟机栈的功能类似,Java虚拟机栈用于管理 Java 函数的调用,而本地方法

栈则用于管理本地方法的调用。

但本地方法并不是用 Java 实现的,而是由C语言实现的。

5、JVM的运行原理

看到这里,相信你对 JVM 内存模型已经有个充分的了解了。

接下来,我们通过一个案例来了解下代码和对象是如何分配存储的,Java 代码又是如何在 JVM 中运行的。

 
public class JVMCase {// 常量public final static String MAN_SEX_TYPE = "man";// 静态变量public static String WOMAN_SEX_TYPE = "woman";public static void main(String[] args) {Student stu = new Student();stu.setName("nick");stu.setSexType(MAN_SEX_TYPE);stu.setAge(20);JVMCase jvmcase = new JVMCase();// 调用静态方法print(stu);// 调用非静态方法jvmcase.sayHello(stu);}// 常规静态方法public static void print(Student stu) {System.out.println("name: " + stu.getName() + "; sex:" + stu.getSexType}// 非静态方法public void sayHello(Student stu) {System.out.println(stu.getName() + "say: hello"); }}class Student{private String name;private String sexType;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSexType() {return sexType;}public void setSexType(String sexType) {this.sexType = sexType;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}

当我们通过 Java 运行以上代码时,JVM 的整个处理过程如下:

1.JVM向操作系统申请内存

JVM 第一步就是通过配置参数或者默认配置参数向操作系统申请内存空间,根据内存大小找到具

体的内存分配表,然后把内存段的起始地址和终止地址分配给 JVM,接下来 JVM 就进行内部分

配。

2.JVM进行内部分配

JVM 获得内存空间后,会根据配置参数分配堆、栈以及方法区的内存大小

3.class文件加载、验证、准备以及解析

其中准备阶段会为类的静态变量分配内存,初始化为系统的初始值。

4.初始化阶段

完成上一个步骤后,将会进行最后一个初始化阶段。

在这个阶段中,JVM首先会执行构造器 <clinit> 方法编译器会在.java 文件被编译成.class 文件

,收集所有类的初始化代码,包括静态变量赋值语句、静态代码块、静态方法,收集在一起成为

<clinit>() 方法。

5.执行方法

启动main线程,执行main方法,开始执行第一行代码。

此时堆内存中会创建一个student对象,对象引用 student 就存放在栈中

此时再次创建一个 JVMCase 对象,调用 sayHello 非静态方法,sayHello 方法属于对象

JVMCase,此时sayHello 方法入栈,并通过栈中的 student 引用调用堆中的 Student对象;之后,

调用静态方法 print,print静态方法属于 JVMCase 类,是从静态方法中获取,之后放入到栈中,也

是通过 student 引用调用堆中的student 对象。

了解完实际代码在 JVM 中分配的内存空间以及运行原理,相信你会更加清楚内存模型中各个区域

的职责分工。

6、总结

我们主要学习了最基础的内存模型设计了解其各个分区的作用及实现原理

在 Java 中,JVM内存模型主要分为堆、程序计数器、方法区、虚拟机栈和本地方法栈

  • 堆是 JVM 内存中最大的一块内存空间,该内存被所有线程共享

  • 程序计数器是一块很小的内存空间,主要用来记录各个线程执行的字节码的地址,例如,支、循环、跳转、异常、线程恢复等都依赖于计数器。

  • 方法区只是 JVM 中规范的一部分,方法区主要是用来存放已被虚拟机加载的类相关信息,包括类信息、运行时常量池、字符串常量池

  • Java虚拟机栈用于管理 Java 函数的调用,而本地方法栈则用于管理本地方法的调用。

如今,JVM在很大程度上减轻了Java开发人员投入到对象生命周期的管理精力。

在使用对象的时候,JVM会自动分配内存给对象,在不使用的时候,垃圾回收器会自动回收对象,

释放占用的内存。

相关文章:

想要学会JVM调优,先掌握JVM内存模型和JVM运行原理

1、前言 今天将和你一起探讨Java虚拟机&#xff08;JVM&#xff09;的性能调优。 JVM算是面试中的高频问题了&#xff0c;通常情况下总会有人问到&#xff1a;请你讲解下 JVM 的内存模型&#xff0c;JVM 的 性能调优做过&#xff1f; 2、为什么 JVM 在 Java 中如此重要 首…...

详解C语言入门程序:HelloWorld.c

#include <stdio.h> // 头文件&#xff0c;使用<>编译系统会在系统头文件目录搜索在C语言中&#xff0c;#include 是预处理指令&#xff0c;用于将指定的头文件内容插入到当前源文件中。这里的 <stdio.h> 是一个标准库头文件&#xff0c;其中包含了与输入输出…...

【elk-day01】es和kibana搭建及验证---Mac-Docker

Mac系统使用Docker下载搭建和验证eskibana Docker下载安装es安装es验证kibana安装kibana验证 Docker下载安装 Docker Desktop官网安装下载地址 说明一下为什么要安装desktop版本的docker&#xff0c;因为docker作为工具使用&#xff0c;我们需要的是开箱即用&#xff0c;没有必…...

探索 3D 图形处理的奥秘

最近一年多来&#xff0c;在 3Dfx、Intel 们的狂轰滥炸中&#xff0c;在 Quake、古墓丽影们的推波助澜下&#xff0c;三维图形已经成为计算机迷眼中的又一个热点。3D 世界到底是怎样的神奇&#xff0c;我们又是怎样享受它的乐趣呢&#xff1f;就让我们来一探究竟吧。 图形基础…...

R语言孟德尔随机化研究工具包(1)---friendly2MR

friendly2MR是孟德尔岁随机化研究中的一个重要补充工具&#xff0c;可以批量探索因素间的因果关系&#xff0c;以及快速填补缺失eaf的数据&#xff0c;但是存在细微差异需要注意。 remotes::install_github("xiechengyong123/friendly2MR") library(friendly2MR)lib…...

CentOS7下使用Docker安装Nacos

CentOS7下使用Docker安装Nacos 一、查看和nacos相关的镜像二、拉去镜像三、创建容器四、查看日志 一、查看和nacos相关的镜像 docker search nacos二、拉去镜像 拉取 nacos/nacos-server:1.2.0 镜像 docker pull nacos/nacos-server:1.2.0三、创建容器 docker run --env MO…...

用 Node.js 写一个爬虫

自己设计一个网站&#xff0c;然后去爬取别人家页面的数据来做一个自己的网站。哈哈哈&#xff0c;如果自己写着玩可能没啥事&#xff0c;但如果用这个网站来获利&#xff0c;你可能就要被寄律师函了&#xff0c;毕竟这有点‘刑’。这篇文章呢&#xff0c;就带大家爬取豆瓣TOP2…...

关于HTTPS

目录 什么是加密 对称加密 非对称加密 中间人攻击 引入证书 HTTPS是一个应用层的协议,是在HTTP协议的基础上引入了一个加密层. HTTP协议内容都是按照文本的方式明文传输,这就导致在传输的过程中出现一些被篡改的情况. 运营商劫持事件 未被劫持的效果,点击下载按钮,就会…...

安全配置审计概念、应用场景、常用基线及扫描工具

软件安装完成后都会有默认的配置&#xff0c;但默认配置仅保证了服务正常运行&#xff0c;却很少考虑到安全防护问题&#xff0c;攻击者往往利用这些默认配置产生的脆弱点发起攻击。虽然安全人员已经意识到正确配置软件的重要性&#xff0c;但面对复杂的业务系统和网络结构、网…...

【计算机毕业设计】python+django数码电子论坛系统设计与实现

本系统主要包括管理员和用户两个角色组成&#xff1b;主要包括&#xff1a;首页、个人中心、用户管理、分类管理、数码板块管理、数码评价管理、数码论坛管理、畅聊板块管理、系统管理等功能的管理系统。 后端&#xff1a;pythondjango 前端&#xff1a;vue.jselementui 框架&a…...

最优化方法Python计算:无约束优化应用——神经网络回归模型

人类大脑有数百亿个相互连接的神经元&#xff08;如下图(a)所示&#xff09;&#xff0c;这些神经元通过树突从其他神经元接收信息&#xff0c;在细胞体内综合、并变换信息&#xff0c;通过轴突上的突触向其他神经元传递信息。我们在博文《最优化方法Python计算&#xff1a;无约…...

Spring Data Redis对象缓存序列化问题

相信在项目中&#xff0c;你一定是经常使用 Redis &#xff0c;那么&#xff0c;你是怎么使用的呢&#xff1f;在使用时&#xff0c;有没有遇到同我一样&#xff0c;对象缓存序列化问题的呢&#xff1f;那么&#xff0c;你又是如何解决的呢&#xff1f; Redis 使用示例 添加依…...

自动驾驶代客泊车AVP巡航规划详细设计

目 录 巡航规划详细设计... 1 修改记录... 2 目 录... 3 1 背景... 5 2 系统环境... 6 2.1 巡航规划与其它模块联系... 6 2.2 巡航规划接口说明... 6 3 规划模块设计... 9 3.1 巡航规划架构图... 9 3.2 预处理... 10 3.3 Planner. 10 3.3.1 Geometry planner. 10 …...

亚马逊云科技 re:Invent 2023 产品体验:亚马逊云科技产品应用实践 国赛选手带你看 Elasticache Serverless

抛砖引玉 讲一下作者背景&#xff0c;曾经参加过国内世界技能大赛云计算的选拔&#xff0c;那么在竞赛中包含两类&#xff0c;一类是架构类竞赛&#xff0c;另一类就是 TroubleShooting 竞赛&#xff0c;对应的分别为亚马逊云科技 GameDay 和亚马逊云科技 Jam&#xff0c;想必…...

Flink on K8S集群搭建及StreamPark平台安装

1.环境准备 1.1 介绍 在使用 Flink&Spark 时发现从编程模型, 启动配置到运维管理都有很多可以抽象共用的地方, 目前streampark提供了一个flink一站式的流处理作业开发管理平台, 从流处理作业开发到上线全生命周期都做了支持, 是一个一站式的流出来计算平台。 未来spark开…...

SpringBoot如何优雅的处理免登录接口

在项目开发过程中&#xff0c;会有很多API接口不需要登录就能直接访问&#xff0c;比如公开数据查询之类的 ~ 常规处理方法基本是 使用拦截器或过滤器&#xff0c;拦截需要认证的请求路径。在拦截器中判断session或token信息&#xff0c;如果存在则放行&#xff0c;否则跳转到…...

元旦档首日票房超4.69亿,“下雪场尴尬”上热搜!

哇塞&#xff0c;元旦假期终于来啦&#xff01;&#x1f389;在这个喜庆的时刻&#xff0c;电影院也热闹非凡&#xff0c;据猫眼专业版数据显示&#xff0c;截至12月30日&#xff0c;2023年元旦档首日票房竟然超过了4.69亿&#xff01;这简直是个天文数字啊&#xff01;&#x…...

CentOS系统中设置IP地址的方式和存在的问题

在CentOS系统中设置IP地址通常涉及以下步骤&#xff1a; 打开网络接口配置文件&#xff1a; 使用文本编辑器&#xff08;如vi、nano或emacs&#xff09;打开 /etc/sysconfig/network-scripts/ifcfg-eth0 文件。这里的"eth0"是网卡的名称&#xff0c;如果你的系统中有…...

使用vmware,在ubuntu18.04中使用笔记本的摄像头

步骤1&#xff1a;在windows中检查相机状态 win10系统中&#xff0c;在左下的搜索栏&#xff0c;搜索“相机”&#xff0c;点击进入即可打开相机&#xff0c;并正常显示图像。 注意&#xff1a;如果相机连接到了虚拟机&#xff0c;则不能显示正常。 步骤2&#xff1a;在ubuntu…...

中间件系列 - Redis入门到实战(高级篇-分布式缓存)

前言 学习视频&#xff1a; 黑马程序员Redis入门到实战教程&#xff0c;深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 中间件系列 - Redis入门到实战 本内容仅用于个人学习笔记&#xff0c;如有侵扰&#xff0c;联系删除 学习目标 Redis持久化Redis主从…...

使用Visual Studio调试VisionPro脚本

使用Visual Studio调试VisionPro脚本 方法一 &#xff1a; 修改项目文件 csproj步骤&#xff1a; 方法二 &#xff1a; Visual Studio附加功能步骤&#xff1a; 方法一 &#xff1a; 修改项目文件 csproj 步骤&#xff1a; 开启VisionPro脚本调试功能 创建一个VisionPro程序…...

Ubuntu安装K8S的dashboard(管理页面)

原文网址&#xff1a;Ubuntu安装k8s的dashboard&#xff08;管理页面&#xff09;-CSDN博客 简介 本文介绍Ubuntu安装k8s的dashboard&#xff08;管理页面&#xff09;的方法。 Dashboard的作用有&#xff1a;便捷操作、监控、分析、概览。 相关网址 官网地址&#xff1a;…...

zookeeper之集群搭建

1. 集群角色 zookeeper集群下&#xff0c;有3种角色&#xff0c;分别是领导者(Leader)、跟随着(Follower)、观察者(Observer)。接下来我们分别看一下这三种角色的作用。 领导者(Leader)&#xff1a; 事务请求&#xff08;写操作&#xff09;的唯一调度者和处理者&#xff0c;保…...

从0开始界面设计师 Qt Designer

QT程序界面的 一个个窗口、控件&#xff0c;就是像上面那样用相应的代码创建出来的。 但是&#xff0c;把你的脑海里的界面&#xff0c;用代码直接写出来&#xff0c;是有些困难的。 很多时候&#xff0c;运行时呈现的样子&#xff0c;不是我们要的。我们经常还要修改代码调整界…...

Html / CSS刷题笔记

WebKit是一个开源的浏览器引擎&#xff0c;它最初是由苹果公司开发的&#xff0c;并且被广泛用于Safari浏览器和其他基于WebKit的浏览器&#xff0c;比如Google Chrome的早期版本。它也是构建许多移动设备浏览器的基础。WebKit的主要功能是解析HTML和CSS&#xff0c;并将其渲染…...

关于“Python”的核心知识点整理大全51

目录 17.2.2 添加自定义工具提示 bar_descriptions.py 17.2.3 根据数据绘图 python_repos.py 17.2.4 在图表中添加可单击的链接 python_repos.py 17.3 Hacker News API hn_submissions.py 17.4 小结 往期快速传送门&#x1f446;&#xff08;在文章最后&#xff09;&a…...

Termius for Mac/Win:一站式终端模拟器、SSH 和 SFTP 客户端软件的卓越选择

随着远程工作和云技术的普及&#xff0c;对于高效安全的远程访问和管理服务器变得至关重要。Termius&#xff0c;一款强大且易用的终端模拟器、SSH 和 SFTP 客户端软件&#xff0c;正是满足这一需求的理想选择。 Termius 提供了一站式的解决方案&#xff0c;允许用户通过单一平…...

vr体验馆用什么软件计时计费,如遇到停电软件程序如何恢复时间

vr体验馆用什么软件计时计费&#xff0c;如遇到停电软件程序如何恢复时间 一、软件程序问答 如下图&#xff0c;软件以 佳易王vr体验馆计时计费软件V17.9为例说明 1、软件如何计时间&#xff1f; 点击相应编号的开始计时按钮即可 2、遇到停电再打开软件时间可以恢复吗&…...

HTML---JavaScript基础

文章目录 目录 文章目录 本章目标 一.JavaScript基础 概述 特点 JavaScript 基本机构 语法 网页中引用JavaScript的方式 二. JavaScript核心语法 变量 ​编辑 数据类型 数组 练习 本章目标 掌握JavaScript的组成掌握JavaScript的基本语法会定义和使用函数会使用工具进行…...

2023年03月17日_微软和谷歌办公AI的感慨

2023年3月17日 最近这个科技圈的消息 有点爆炸的让人应接不暇了 各种大公司简直就是神仙打架 你从来没有见过这么密集的 这么高频的产品发布 昨天微软是发布了Office 365 Copilot 在里边提供了大量的AI的功能 然后谷歌呢也发布了这个Google Workspace AI 也是跟365 Cop…...

2023年新一代开发者工具 Vue ,正式开源!

以下文章来源于前端充电宝 &#xff0c;作者CUGGZ 近日&#xff0c;Vue 新一代开发者工具&#xff08;DevTools&#xff09;正式开源&#xff01;Vue DevTools 是一个旨在增强 Vue 开发人员体验的工具&#xff0c;它提供了一些功能来帮助开发者更好地了解 Vue 应用。下面就来看…...

springboot(ssm校园组团平台 高校组团系统 Java系统

springboot(ssm校园组团平台 高校组团系统 Java系统 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&#xff09; 数据库…...

QT 利用开源7z 实现解压各种压缩包,包括进度条和文件名的显示(zip,7z,rar,iso等50多种格式)

想做一个winRAR一样的解压软件吗?很简单,利用开源的7z库就能实现。我看网上其他人说的方法不敢苟同,误人子弟。以前自己在项目中使用过7z,这次又有需要,就想记录下来。如果你研究过如何用7z的话,一定知道7z的每一个GUID都代表了一种格式,50多种GUID也就有50多个格式,最…...

androidStudio 没有新建flutter工程的入口?

装了flutter dart 插件 执行了 flutter doctor 也执行了 flutter doctor --android-license 最后重启了 androidStudio 还是没发现在哪新建flutter项目工程 原来 plugins 下的 Android APK Support没有勾选...

微信小程序开发系列-03全局配置中的“window”和“tabBar”

微信小程序开发系列目录 《微信小程序开发系列-01创建一个最小的小程序项目》《微信小程序开发系列-02注册小程序》《微信小程序开发系列-03全局配置中的“window”和“tabBar”》《微信小程序开发系列-04获取用户图像和昵称》《微信小程序开发系列-05登录小程序》《微信小程序…...

基于CNN神经网络的手写字符识别实验报告

作业要求 具体实验内容根据实际情况自拟&#xff0c;可以是传统的BP神经网络&#xff0c;Hopfield神经网络&#xff0c;也可以是深度学习相关内容。 数据集自选&#xff0c;可以是自建数据集&#xff0c;或MNIST&#xff0c;CIFAR10等公开数据集。 实验报告内容包括但不限于&am…...

Ubuntu 系统中安装和配置 clash

本博客参考 ubuntu下怎么安装clash-ghc? 和 对 clash 进行下载和配置&#xff0c;如有需要可自行点击链接查看原文。 下载 clash 打开终端&#xff08;进入到 主目录/用户目录 &#xff09;&#xff0c;通过命令下载 clash 文件并将其中命名为 clash&#xff1a; # 下载 cl…...

DragonEnglish:COCA20000+单词+释义

去年的时候接触到了 COCA20000 单词&#xff0c;对这种给单词特定顺序的方式蛮感兴趣的。因为我当时接触的版本只有单词或者单词释义的版本&#xff0c;所以我直接通过各种方式给它搭配了音标例句发音&#xff0c;然后每100个切割成1份&#xff0c;分成了 202 个文件来学习&…...

『亚马逊云科技产品测评』活动征文|云服务器如何快速搭建个人博客(图文详解)

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 文章目录 引言一、前期准备步骤1.1 准备一个亚马逊 EC2 服务器1.2 进入控…...

QT上位机开发(乘法计算小软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面一篇文章&#xff0c;我们学习了怎么创建qt的第一个工程&#xff0c;怎么用designer给qt修改界面。虽然我们到目前为止&#xff0c;还没有编写…...

【Matlab】BP 神经网络时序预测算法

资源下载&#xff1a; https://download.csdn.net/download/vvoennvv/88681507 一&#xff0c;概述 BP 神经网络是一种常见的人工神经网络&#xff0c;也是一种有监督学习的神经网络。其全称为“Back Propagation”&#xff0c;即反向传播算法。BP 神经网络主要由输入层、隐藏层…...

GPT在企业自动化方面的应用

GPT和类似的自然语言处理技术在企业自动化方面有许多应用。以下是一些主要的应用领域&#xff1a; 自动化客户支持&#xff1a; 使用GPT可以构建自动化的客户支持系统&#xff0c;能够理解和生成自然语言文本&#xff0c;回答常见问题&#xff0c;解决用户的疑问和问题。 自动…...

STM32——通用计时器

通用计时器框图 1.时钟源 1&#xff09;内部时钟(CK_INT) 2&#xff09;外部时钟模式 1&#xff1a;外部输入引脚(TIx)&#xff0c;x1&#xff0c;2&#xff08;即只能来自于通道 1 或者通道 2&#xff09; 3&#xff09;外部时钟模式 2&#xff1a;外部触发输入(ETR) 4&#…...

【HarmonyOS】鸿蒙开发简介与项目基础配置演示

从今天开始&#xff0c;博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”&#xff0c;对于刚接触这项技术的小伙伴在学习鸿蒙开发之前&#xff0c;有必要先了解一下鸿蒙&#xff0c;从你的角度来讲&#xff0c;你认为什么是鸿蒙呢&#xff1f;它出现的意义又是…...

[MySQL] MySQL数据库创建存储过程

一、mysql存储过程的相关知识 1.1 存储过程的概念 存储过程是一组为了完成特定功能的SQL语句集合。类似于于其他编程语言中的函数&#xff0c;定义一个函数方法&#xff0c;可以随时起到传参调用的功能。 存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用…...

mysql哪些情况下不走索引?

mysql哪些情况下不走索引&#xff1f; MySQL是一种常用的关系型数据库&#xff0c;它使用索引来提高查询性能。然而&#xff0c;并非所有的SQL语句都能充分利用索引。在本文中&#xff0c;我们将介绍几个无法使用到索引的MySQL SQL语句。 1. 使用函数&#xff1a;当SQL语句中…...

蓝桥杯python比赛历届真题99道经典练习题 (13-20)

【程序13】 题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。 1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 2.程序…...

初识javaWeb

一、JavaWeb是什么&#xff1f; 1、概念 javaWeb指的是使用java语言进行互联网领域项目开发的技术栈——进行web项目开发所需的技术的集合。 -Web前端——在浏览器中用户可以看到的网页 -Web后端——为前端提供数据的程序 2、Web项目 java语言是可以进行多种类型的项目开发&a…...

day5--java基础编程:异常,内部类

6 异常 6.1 异常概述 出现背景&#xff1a; 在使用计算机语言进行项目开发的过程中&#xff0c;即使程序员把代码写得尽善尽美&#xff0c;在系统的运行过程中仍然会遇到一些问题&#xff0c;因为很多问题不是靠代码能够避免的&#xff0c;比如:客户输入数据的格式&#xff0c…...

2023.12.28 关于 Redis 数据类型 List 内部编码、应用场景

目录 List 编码方式 早期版本 现今版本 List 实际应用 多表之间的关联关系 消息队列 频道&#xff08;多列表&#xff09;消息队列 微博 Timeline 栈 & 队列 List 编码方式 早期版本 早期版本 List 类型的内部编码方式有两种 ziplist&#xff08;压缩列表&#xf…...