FPGA高端项目:SDI 视频+音频编解码,提供工程源码和技术支持

目录

  • 1、前言
    • 免责声明
  • 2、相关方案推荐
    • 我这里已有的 GT 高速接口解决方案
    • 我目前已有的SDI编解码方案
  • 3、设计思路和框架
    • 设计框图
    • GV8601A均衡EQ
    • GTX 时钟要求
    • GTX 调用与控制
    • SMPTE SD/HD/3G-SDI
      • SMPTE SD/HD/3G-SDI 接收
      • SMPTE SD/HD/3G-SDI 发送
    • SDI 视频接收数据处理
    • SDI 音频接收--UHD-SDI Audio解码
    • SDI 音频接收--i2s输出播放
    • 发送数据彩条
    • GV8500增强驱动
    • SDI 视频发送输出
  • 4、vivado工程详解
  • 5、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 6、上板调试验证并演示
    • 准备工作
    • 输出静态演示
  • 7、福利:工程代码的获取

FPGA高端项目:SDI 视频+音频编解码,提供工程源码和技术支持

1、前言

Xilinx系列FPGA实现SDI视频编解码目前有两种方案:
一是使用专用编解码芯片,比如典型的接收器GS2971,发送器GS2972,优点是简单,比如GS2971接收器直接将SDI解码为并行的YCRCB,GS2972发送器直接将并行的YCRCB编码为SDI视频,缺点是成本较高,可以百度一下GS2971和GS2972的价格;另一种方案是使用FPGA实现编解码,利用FPGA的GTP/GTX/GTH/UltraScale GTH等资源实现解串,优点是合理利用了FPGA资源,缺点是操作难度大一些,对FPGA水平要求较高;UltraScale GTH 适用于Xilinx UltraScale系列的FPGA上,包括Virtex UltraScale、Kintex UltraScale、Zynq® UltraScale等器件,在UltraScale系列之下只有GTH,而UltraScale GTH相比于GTH,线速率更高,支持协议类型更多,功耗更低,带宽更高;同样的,Xilinx也提供了SDI视频编解码的专用IP,比如SMPTE UHD-SDI,该IP支持3G-SDI、6G-SDI、12G-SDI等视频编解码;目前市面上的SDI编解码方案一般都是视频的,而SDI音频的编解码方案却很少,要知道,SDI数据流中是可以包含音频的,而本设计就是解决这个问题,从输入的SDI数据流中分理处视频和音频;

本文使用Xilinx的7系列Kintex7–xc7k325tffg676-2型号的FPGA实现3G-SDI 视频+音频编解码;本设计分为3G-SDI 视频编码、3G-SDI 音频解码和3G-SDI 视频解码两部分,即3G-SDI 视频发送和视频+音频接收,三个部分功能做在一个工程里;3G-SDI 视频接收过程为:输入摄像头为标准的3G-SDI摄像头,开发板板载GV8601A芯片,SDI视频经过GV8601A起到均衡EQ的作用,也可以理解为单端转差分;然后调用Xilinx官方GTX的GTXE2_CHANNEL原语和GTXE2_COMMON原语进行SDI视频解串,将高速串行的SDI视频解为并行数据,GTX选择QPLL时钟;然后调用Xilinx官方的SMPTE SD/HD/3G-SDI IP核实现SDI视频解码,该IP在Kintex7器件上只支持SD-SDI、HD-SDI和3G-SDI视频编解码,本设计配置为3G-SDI模式;到这里,3G-SDI 视频解码工作就完成了,解码后的视频为并行的TTL电平的数据,此时的解码数据送入ILA中观察,也可以供用户做后续处理,比如缓存、颜色转换、缩放、图像识别等,本设计不做处理,只将数据留出来,给开发者更多利用空间;SDI接收到的数据流中是可以包含音频的,而本设计就是解决这个问题,从输入的SDI数据流中分理处视频和音频;调用Xilinx官方的 UHD-SDI Audio IP核解码SDI音频信号,该IP在Kintex7器件上只支持3G-SDI和6G-SDI音频编解码,本设计配置为3G-SDI模式;然后将解码后的音频送入i2s音频编码模块,输出标准的i2s音频时序;然后将音频数据送入板载的TLV320AIC3104音频编码芯片输出到外部扬声器即可播放SDI音频;3G-SDI 视频发送过程为:纯verilog实现的静态彩条作为视频源,然后调用Xilinx官方的SMPTE SD/HD/3G-SDI IP核实现SDI视频编码,该IP在Kintex7器件上只支持SD-SDI、HD-SDI和3G-SDI视频编解码,本设计配置为3G-SDI模式,这个过程是接收过程的逆过程;然后调用Xilinx官方GTX的GTXE2_CHANNEL原语进行SDI视频串化,将并行的SDI视频数据串化为高速串行数据,GTX选择CPLL时钟,这个过程是接收过程的逆过程;然后将视频信号送入板载的GV8500芯片,GV8500起到增强驱动的作用,也可以理解为差分转单端;我手里有一个SDI转HDMI的盒子,将输出的SDI视频接到盒子里,然后输出显示器即可输出显示了;本方案提供1套vivado2022.2版本的FPGA工程源码;

本博客详细描述了Xilinx的7系列Kintex7–xc7k325tffg676-2型号的FPGA实现6SDI 视频+音频编解码的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。

2、相关方案推荐

我这里已有的 GT 高速接口解决方案

我的主页有FPGA GT 高速接口专栏,该专栏有 GTP 、 GTX 、 GTH 、 GTY 等GT 资源的视频传输例程和PCIE传输例程,其中 GTP基于A7系列FPGA开发板搭建,GTX基于K7或者ZYNQ系列FPGA开发板搭建,GTH基于KU或者V7系列FPGA开发板搭建,GTY基于KU+系列FPGA开发板搭建;以下是专栏地址:
点击直接前往

我目前已有的SDI编解码方案

我的博客主页开设有SDI视频专栏,里面全是FPGA编解码SDI的工程源码及博客介绍;既有基于GS2971/GS2972的SDI编解码,也有基于GTP/GTX资源的SDI编解码;专栏地址链接:点击直接前往

3、设计思路和框架

本文使用Xilinx的7系列Kintex7–xc7k325tffg676-2型号的FPGA实现3G-SDI 视频+音频编解码;本设计分为3G-SDI 视频编码、3G-SDI 音频解码和3G-SDI 视频解码两部分,即3G-SDI 视频发送和视频+音频接收,三个部分功能做在一个工程里;3G-SDI 视频接收过程为:输入摄像头为标准的3G-SDI摄像头,开发板板载GV8601A芯片,SDI视频经过GV8601A起到均衡EQ的作用,也可以理解为单端转差分;然后调用Xilinx官方GTX的GTXE2_CHANNEL原语和GTXE2_COMMON原语进行SDI视频解串,将高速串行的SDI视频解为并行数据,GTX选择QPLL时钟;然后调用Xilinx官方的SMPTE SD/HD/3G-SDI IP核实现SDI视频解码,该IP在Kintex7器件上只支持SD-SDI、HD-SDI和3G-SDI视频编解码,本设计配置为3G-SDI模式;到这里,3G-SDI 视频解码工作就完成了,解码后的视频为并行的TTL电平的数据,此时的解码数据送入ILA中观察,也可以供用户做后续处理,比如缓存、颜色转换、缩放、图像识别等,本设计不做处理,只将数据留出来,给开发者更多利用空间;SDI接收到的数据流中是可以包含音频的,而本设计就是解决这个问题,从输入的SDI数据流中分理处视频和音频;调用Xilinx官方的 UHD-SDI Audio IP核解码SDI音频信号,该IP在Kintex7器件上只支持3G-SDI和6G-SDI音频编解码,本设计配置为3G-SDI模式;然后将解码后的音频送入i2s音频编码模块,输出标准的i2s音频时序;然后将音频数据送入板载的TLV320AIC3104音频编码芯片输出到外部扬声器即可播放SDI音频;3G-SDI 视频发送过程为:纯verilog实现的静态彩条作为视频源,然后调用Xilinx官方的SMPTE SD/HD/3G-SDI IP核实现SDI视频编码,该IP在Kintex7器件上只支持SD-SDI、HD-SDI和3G-SDI视频编解码,本设计配置为3G-SDI模式,这个过程是接收过程的逆过程;然后调用Xilinx官方GTX的GTXE2_CHANNEL原语进行SDI视频串化,将并行的SDI视频数据串化为高速串行数据,GTX选择CPLL时钟,这个过程是接收过程的逆过程;然后将视频信号送入板载的GV8500芯片,GV8500起到增强驱动的作用,也可以理解为差分转单端;我手里有一个SDI转HDMI的盒子,将输出的SDI视频接到盒子里,然后输出显示器即可输出显示了;本方案提供1套vivado2022.2版本的FPGA工程源码;

设计框图

本设计参考了Xilinx官方设计文档,官方的参考设计框图如下:
在这里插入图片描述
具体到本工程详细设计方案框图如下:
在这里插入图片描述

GV8601A均衡EQ

3G-SDI 视频接收过程为:输入摄像头为标准的3G-SDI摄像头,开发板板载GV8601A芯片,SDI视频经过GV8601A起到均衡EQ的作用,也可以理解为单端转差分;原理图部分截图如下:
在这里插入图片描述

GTX 时钟要求

根据Xilinx推荐的硬件设计要求,GTX需要两路差分时钟,一路148.5M和一路148.351M,后者可以通过148.5M差分晶振匹配电阻得到;

GTX 调用与控制

然后调用Xilinx官方GTX的GTXE2_CHANNEL原语和GTXE2_COMMON原语进行SDI视频解串与串化,接收时为解串,发送时为串化,将高速串行的SDI视频解为并行数据,GTX选择QPLL时钟;代码位置截图如下:
在这里插入图片描述
需要注意的是,这里并没有直接例化GTX IP核,而是直接调用其GTXE2_CHANNEL和GTXE2_COMMON原语,需要开发者对GTX有着极高的熟练度,这里直接调用原语的目的是方便配置与复位,因为我们设计的GTX支持HD-SDI、3G-SDI和6G-SDI的解串与串化,每种输入的线速率不一样,所以需要控制GTX在不同输入状态下的线速率切换,线速率切换后,需要改变GTX内部状态机逻辑和复位才能使GTX在变速后工作稳定,GTX的变速和配置需严格按照官方数据手册时序进行,所以代码中有专门的GTX变速配置模块;代码中包含了GTXE2_CHANNEL和GTXE2_COMMON原语,分别对应GTX官方文档中的对应结构,GTXE2_CHANNEL负责具体的解串与串化,GTXE2_COMMON原语负责QPLL时钟配置,两者可通过GTX变速配置模块中的DRP进行动态配置;

SMPTE SD/HD/3G-SDI

然后调用Xilinx官方的SMPTE SD/HD/3G-SDI IP核实现SDI视频编解码,对于接收来说是解码,对于发送来说是编码;该IP在Kintex7器件上只支持SD-SDI、HD-SDI和3G-SDI编解码,本设计配置为3G-SDI模式;代码位置截图如下:
在这里插入图片描述
IP配置如下:
在这里插入图片描述
SMPTE SD/HD/3G-SDI 用法与SMPTE UHD-SDI IP类似,调用都很简单,但使用相对复杂,用户接口众多,详情请参考官方数据手册,接口关系请参考,这里只做简单解读,如下:
根据官方手册,参考SMPTE UHD-SDI数据收发架构如下:
在这里插入图片描述

SMPTE SD/HD/3G-SDI 接收

SMPTE SD/HD/3G-SDI 用法与SMPTE UHD-SDI IP类似,参考SMPTE UHD-SDI 接收端的框图如下:
在这里插入图片描述
来自串行收发器 RX 的数据通过 rx_data_in 端口进入 SMPTE UHD-SDI接收器,对于 SD、HD 和 3G 模式,每个时钟周期 20 位;对于 6G 和 12G 模式,每个时钟周期 40 位。在 SD 模式下,rx_data_in 上的 20 位数据转到 DRU (data recovery unit), DRU 从 11 倍过采样数据中恢复 10 位数据。数据由 SDI解扰器解扰,然后由 SDI 成帧器进行字对齐。之后就是同步位恢复功能。 此功能可还原由变送器修改的 3FF 和 000值,以减少 6G 和 12G-SDI 模式下的运行长度。这三个模块以全 rx_clk 速度运行,并根据 SDI 模式在每个时钟周期处理 40、20 或 10 位数据。 数据进入 stream demux,该 demux 确定有多少数据流交织在一起,然后在单独的数据路径上分离每个数据流,最多支持 16 个数据流。每路数据流进入一个处理单元,该单元进行 CRC 错误检查、行号捕获和 ST 352 包捕获。还可以从 stream demux 中
提取视频时序并产生 rx_eav,rx_sav 和 rx_trs 时序信号。这些时序信号由 SDI 模式检测并给传输检测模块使用。

SMPTE SD/HD/3G-SDI 发送

SMPTE SD/HD/3G-SDI 用法与SMPTE UHD-SDI IP类似,参考SMPTE UHD-SDI 发射端的框图如下:
在这里插入图片描述
SMPTE UHD-SDI最多可以支持 16 路 SDI 数据流,数据流首先通过 ST 352 插入模块,可以有选择地插入 ST 352 有效负载 ID 数据包,从 ST 352 插入模块输出的数据流称为 tx_ds1_st352_out 至tx_ds16_st352_out。输出这些流可以方便用户在 ST 352 数据包后插入辅助数据。 发送器的其余部分可以直接使用ST 352 数据包插入模块输出的流,也可以使用 16 个 tx_ds1_anc_in 到 tx_ds16_anc_in 数据流。请注意,如果使用tx_dsn_anc_in 数据流,则它们必须是完整的 SDI 数据流,而不仅仅是辅助数据。通常情况下,每个 Y/C 数据流对的 Y 数据流中只插入 ST 352 包。而在 3G-SDI level A mode-only 模式下,数据流 1 和数据流 2 都必须插入 ST 352 报文。然后每对 Y / C 数据流经过一个数据流处理模块,该模块可以进行进行行号插入和 CRC 生成及插入。在流处理之后,数据流被 MUX 交织,形成 40、20 或 10 位宽的多路复用 SDI 数据流。然后,由 SDI 加扰器对多路复用的数据流进行加扰。最后,数据在 tx_txdata 端口上输出到对应的串行收发器。

SDI 视频接收数据处理

到这里,3G-SDI 视频解码工作就完成了,解码后的视频为并行的TTL电平的数据,此时的解码数据送入ILA中观察,也可以供用户做后续处理,比如缓存、颜色转换、缩放、图像识别等,本设计不做处理,只将数据留出来,给开发者更多利用空间;开发者可以通过ILA观察SDI接收数据的正确性,在此基础上可以做后续处理;

SDI 音频接收–UHD-SDI Audio解码

SDI接收到的数据流中是可以包含音频的,而本设计就是解决这个问题,从输入的SDI数据流中分理处视频和音频;调用Xilinx官方的 UHD-SDI Audio IP核解码SDI音频信号,该IP在Kintex7器件上只支持3G-SDI和6G-SDI音频编解码,本设计配置为3G-SDI模式;UHD-SDI Audio在代码中位置和IP配置如下:
在这里插入图片描述
在这里插入图片描述

SDI 音频接收–i2s输出播放

然后将解码后的音频送入i2s音频编码模块,输出标准的i2s音频时序;然后将音频数据送入板载的TLV320AIC3104音频编码芯片输出到外部扬声器即可播放SDI音频;该部分代码位置如下:
在这里插入图片描述

发送数据彩条

发送数据彩条由纯verilog实现,为静态彩条,作为 3G-SDI视频发送的数据源,代码位置截图如下:
在这里插入图片描述

GV8500增强驱动

发送过程经过静态彩条生成、SMPTE UHD-SDI编码、GTX串化后,将视频信号送入板载的GV8500芯片,GV8500起到增强驱动的作用,也可以理解为差分转单端;原理图部分截图如下:
在这里插入图片描述

SDI 视频发送输出

3G-SDI 视频发送通路,经GV8500增强驱动后,通过板载的BNC接头连接SDI转HDMI的盒子,将输出的SDI视频接到盒子里,然后输出显示器即可输出显示了;

4、vivado工程详解

开发板FPGA型号:Xilinx的7系列Kintex7–xc7k325tffg676-2;
开发环境:Vivado2022.2;
输入:3G-SDI摄像头,解码后不做处理;
输出:静态彩条视频经3G-SDI编码后输出、输出SDI音频至扬声器;
应用:FPGA高端项目:SDI 视频+音频编解码;
工程代码架构如下:
在这里插入图片描述
资源消耗和功耗预估如下:
在这里插入图片描述

5、工程移植说明

vivado版本不一致处理

1:如果你的vivado版本与本工程vivado版本一致,则直接打开工程;
2:如果你的vivado版本低于本工程vivado版本,则需要打开工程后,点击文件–>另存为;但此方法并不保险,最保险的方法是将你的vivado版本升级到本工程vivado的版本或者更高版本;
在这里插入图片描述
3:如果你的vivado版本高于本工程vivado版本,解决如下:
在这里插入图片描述
打开工程后会发现IP都被锁住了,如下:
在这里插入图片描述
此时需要升级IP,操作如下:
在这里插入图片描述
在这里插入图片描述

FPGA型号不一致处理

如果你的FPGA型号与我的不一致,则需要更改FPGA型号,操作如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
更改FPGA型号后还需要升级IP,升级IP的方法前面已经讲述了;

其他注意事项

1:由于每个板子的DDR不一定完全一样,所以MIG IP需要根据你自己的原理图进行配置,甚至可以直接删掉我这里原工程的MIG并重新添加IP,重新配置;
2:根据你自己的原理图修改引脚约束,在xdc文件中修改即可;
3:纯FPGA移植到Zynq需要在工程中添加zynq软核;

6、上板调试验证并演示

准备工作

FPGA开发板;
3G-SDI相机;
BNC转SMA同轴线;
SDI转HDMI盒子;
HDMI显示器;

输出静态演示

音频输出没法演示,请见谅。。。
发送端,3G-SDI 静态彩条视频输出如下:
在这里插入图片描述

7、福利:工程代码的获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pycharm 工具栏不见了

新版pycharm后, 菜单栏和工具栏不见了 目录 我发现的解决方法: 其他旧版的解决方法: 我发现的解决方法: 其他旧版的解决方法: 另外,一些使用pycharm的新手可能会由于不熟悉软件的功能而误操作&#xff…

【头歌实训】PySpark Streaming 数据源

文章目录 第1关:MySQL 数据源任务描述相关知识PySpark JDBC 概述PySpark JDBCPySpark Streaming JDBC 编程要求测试说明答案代码 第2关:Kafka 数据源任务描述相关知识Kafka 概述Kafka 使用基础PySpark Streaming Kafka 编程要求测试说明答案代码 第1关&a…

scikit-learn文档中的数据生成器

目录 1. make_classification: 2. make_regression: 3. make_blobs: 4. make_moons: 5.make_circles 6. make_sparse_coded_signal: 1. make_classification: 这是一个用于生成复杂二维数据的函数,通常用于可视化分类器的学习过程或者测试机器学习算法的性能…

Kali Linux如何启动SSH并在Windows系统远程连接

文章目录 1. 启动kali ssh 服务2. kali 安装cpolar 内网穿透3. 配置kali ssh公网地址4. 远程连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 简单几步通过[cpolar 内网穿透](cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站)软件实现ssh 远程连接kali! …

工具系列:TimeGPT_(9)模型交叉验证

交叉验证 文章目录 交叉验证外生变量比较不同的模型 时间序列预测中的主要挑战之一是随着时间的推移固有的不确定性和变异性,因此验证所采用的模型的准确性和可靠性至关重要。交叉验证是一种强大的模型验证技术,特别适用于此任务,因为它提供了…

使用 GitHub 进行团队协作的操作指南

目录 前言1 使用github进行团队开发的意义2 邀请成员加入团队3 克隆和提交代码3.1 克隆远程仓库到本地3.2 加入暂存区3.3 提交修改到本地仓库3.4 设置本地仓库和远程仓库的关联3.5 将本地仓库的代码推送到远程仓库 结语 前言 GitHub 是一个广泛使用的基于 Git 的代码托管平台&…

Java - 获取 Jar 包内的 pom.xml 文件

目录 一.引言 二.通过 jar 命令 ◆ 查看 Jar 包内文件 ◆ 导出 Pom.xml ◆ 导出 Jar 包内文件 三.通过 unzip 命令 ◆ 导出 Jar 包内文件 四.总结 一.引言 引用其他同学的 Jar 包时,需要获取其对应 jar 包内的 pom.xml 文件检查版本依赖关系,下…

MYSQL存储过程和存储函数-数据库实验五

Mysql数据库实验及练习题相关 MySQL 数据库和表的管理-数据库实验一 MySQL连接查询、索引、视图-数据库实验二、实验三 MySQL约束、触发器-数据库实验四 MYSQL存储过程和存储函数-数据库实验五 MySQL批量随机生成name、TEL、idNumber MYSQL数据库的安全管理-数据库实验六 MYSQ…

基于JetCache整合实现一级、二级缓存方案(方案实现)

目录 一、整体方案说明 1.1 需求说明 1.2 整体方案实现组件结构图 二、Caffeine缓存实现 2.1 组件说明 2.2 组件结构图 2.3 组件Maven依赖 2.4 组件功能实现源码 2.4.1 CaffeineCacheManager扩展实现 2.4.2 CaffeineConfiguration配置类实现 2.4.3 涉及其他组件的类 …

如何在Android Termux中使用SFTP实现远程传输文件

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问5. 配置固定远程连接地址6、结语 SFTP(SSH File Transfer Protocol)是一种基于SSH(Secure Shell)安全协议的文件传输协议。与FTP协议相比,SFT…

Spring Boot 中的虚拟线程

在本文中,我将讨论 Spring Boot 中的虚拟线程。 什么是虚拟线程? 虚拟线程作为 Java 中的一项功能引入,旨在简化并发性。 Virtual threads 是 轻量级的线程,由 Java Virtual Machine 而不是操作系统管理。它们被设计为易于使用且…

ElasticSearch:centos7安装elasticsearch7,kibana,ik中文分词器,云服务器安装elasticsearch

系统:centos7 elasticsearch: 7.17.16 安装目录:/usr/local 云服务器的安全组:开放 9200 和5601的端口 一、下载安装elasticsearch7.17.16 1、安装 #进入安装目录 cd /usr/local#下载elasticsearch wget https://artifacts.elastic.co/d…

Elasticsearch:在不停机的情况下优化 Elasticsearch Reindex

实现零停机、高效率和成功迁移更新的指南。更多阅读:Elasticsearch:如何轻松安全地对实时 Elasticsearch 索引 reindex 你的数据。 在使用 Elasticsearch 的时候,总会有需要修改索引映射的时候,遇到这种情况,我们只能做…

前端实现websocket类封装

随着Web应用程序的发展,越来越多的人开始利用Websocket技术来构建实时应用程序。Websocket是一种在客户端和服务器之间建立持久连接的协议。这种协议可以在一个单独的连接上实现双向通信。与HTTP请求-响应模型不同,Websocket允许服务器自主地向客户端发送…

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

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

利用网络教育系统构建个性化学习平台

在现代教育中,网络教育系统作为一种创新的学习方式,为学生提供了更加个性化和灵活的学习体验。在本文中,我们将通过简单的技术代码,演示如何构建一个基础的网络教育系统,为学生提供个性化的学习路径和资源。 1. 环境…

在Go语言中实现HTTP请求的缓存

大家好,我是你们可爱的编程小助手,今天我们要一起探讨如何使用Go语言实现HTTP请求的缓存。听起来是不是很酷?让我们开始吧! 首先,我们要明白什么是缓存。简单来说,缓存就是将数据存储在内存中,…

Flutter配置Android和IOS允许http访问

默认情况下,Android和IOS只支持对https的访问,如果需要访问不安全的连接,也就是http,需要做以下配置。 Android 在res目录下的xml目录中(如果不存在,先创建xml目录),创建一个xml文件network_security_con…

Appium+python自动化(三)- SDK Manager(超详解)

简介 本来宏哥一开始打算用真机做的,所以在前边搭建环境时候就没有下载SDK,但是由于许多小伙伴通过博客发短消息给宏哥留言说是没有真机,所以顺应民意整理一下模拟器,毕竟“得民心者,得天下”。SDK顾名思义&#xff0c…

【Linux学习笔记】Linux下nginx环境搭建

1、下载nginx 安装rpm命令: rpm ivh nginx-release.rpm。(直接使用linux命令下载wget http://nginx.org/packages/rhel/6/noarch/RPMS/nginx-release-rhel-6-0.el6.ngx.noarch.rpm 2、设置nginx开机启动 chkconfig nginx on 3、开启nginx服务 方法一:service nginx…