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

阿里云 ARMS 应用监控重磅支持 Java 21

作者:牧思 & 山猎

前言

今年的 9 月 19 日,作为最新的 LTS (Long Term Support) Java 版本,Java 21 正式 GA,带来了不少重量级的更新,详情请参考 The Arrival of Java 21 [ 1] 。虽然目前 Java 11 和 Java 17 都还没有在国内大规模普及,Java 8 依然占据主流地位,但及时更新 JDK 版本可以为开发者带来许多重要的价值,包括应用程序性能和稳定性上的提升,以及可以帮助提升生产力的新功能。作为亚洲地区最有影响力的可观测以及 APM 服务提供方,阿里云 ARMS 团队也第一时间响应 Java 21 的 GA 发布,率先对 Java 21 进行了适配,帮助用户更好的观测 Java 21 应用!

Java 21 主要新特性

Java 21 带来了 15 个新特性,包括虚拟线程、分代式 ZGC 等重磅功能,以及其他方面的优化,让我们先睹为快,体验一下这些新特性:

1. 虚拟线程

虚拟线程 (Virtual Threads) 绝对是 Java 21 中最重量级的新特性,此前在 Java 版本中,每一个 java.lang.Thread 对象都只对应一个操作系统内核中的线程,而线程在操作系统又是一种相对昂贵的系统资源:线程的创建、切换、销毁等操作都需要进入到内核态。在高并发的场景下,如果创建大量线程来处理请求,将会导致多线程被频繁的挂起和切换,非常消耗系统资源。

虚拟线程则是一种轻量级的用户态线程,与传统线程由 OS 调度运行不同,虚拟线程是由 JDK 底层调度运行的,其创建、调度、销毁等操作全部由用户空间的库函数来完成,也就是说虚拟线程与内核中的线程的对应关系是 M:N 的,如图 1 所示:

图片

图 1:线程与虚拟线程关系图

因此,在高并发场景下,创建大量虚拟线程来处理请求的开销,相比创建大量线程来说将会降低很多。在 Java 程序中,线程与虚拟线程的对比如表 1 所示:

图片

表 1:线程与虚拟线程的对比表

在 Java 21 中,可以通过以下几种方法创建虚拟线程并运行:

// 方式一:
Thread vt = Thread.startVirtualThread(() -> {});
// 方式二:
Thread.ofVirtual().unstarted(() -> {});
vt.start();
// 方式三:
ThreadFactory tf = Thread.ofVirtual().factory();
Thread vt = tf.newThread(() -> {});
vt.start();
// 方式四:
ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor();
ThreadFactory tf = Thread.ofVirtual().factory();
Thread vt = tf.newThread(() -> {});
executor.submit(vt);

2. 分代式 ZGC

在 Java 21 中,增加了对 ZGC 的分代支持 (Generational ZGC) 以提高垃圾回收的性能。在此之前,ZGC 是没有分代概念的,每次运行时都会去收集所有的对象,不会考虑对象的年龄。但根据分代收集理论,绝大部分对象都是朝生夕灭的,并且熬过越多次垃圾收集过程的对象会越难死亡。清理年轻代对象需要的资源更少,能清理出更多的内存;反之,清理老年代对象需要的资源更多,能清理出的内存更少。这就意味着,ZGC 可以基于分代收集理论,更进一步的提升垃圾回收效率。于是在 Java 21,分代收集机制被引入,以更频繁的收集年轻代对象,这对于使用 ZGC 的 Java 应用的性能提升,有非常大的帮助。

在 Java 21 上使用 ZGC,首先需要在 Java 启动命令中加入 -XX:+UseZGC 选项开启 ZGC。默认情况下,添加该选项后启用的是非分代的 ZGC,如需使用分代式 ZGC,则需要再额外添加 -XX:+ZGenerational 选项。

# 使用分代式ZGC
$ java -XX:+UseZGC -XX:+ZGenerational ...

3. 其他特性

除了虚拟线程和分代 ZGC,Java 21 还引入了其他有意思的特性,比如:

  • 允许使用_字符声明未命名变量,类似 go 语言中的_。
  • 允许使用匿名类与匿名实例的 main 方法,可以利用如下所示的方式执行 main 函数。
void main() {System.out.println("Hello, World!");
}

具体的其它特性,可以参考:openjdk.org/projects/jdk/21/

使用 ARMS 监控 Java 21 应用

ARMS 最新的 3.1.0 版本探针中,我们对 Java 21 进行了支持,开发者可以参考此文开启 Java 21 应用的可观测之旅。

编写 Java 21 应用

首先需要下载安装 JDK 21,可以从 Oracle 等厂商的官网下载安装,也可以通过 sdkman 等三方工具进行下载安装。

安装完 JDK 21 后,可以参考以下代码,编写一个简单的 SpringBoot 3.x 应用,该应用中使用了 Java 21 的 Record Patterns 特性,帮助用户用简洁的语法解构 Java 中的 record 对象:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.6</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>xxx</groupId><artifactId>xxx</artifactId><version>xxx</version><name>xxx</name><properties><java.version>21</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}record Point(int x, int y) {}@RestControllerstatic class DemoController {@RequestMapping("/demo")String demo(@RequestParam String type) {Object object = null;if ("record".equals(type)) {object = new Point(1, 2);} else {object = "object";}return solve(object);}private String solve(Object object) {if (object instanceof Point(int x, int y)) {return "Point: " + x + ":" + y;}return "Invalid Point";}}
}

接入 ARMS

对于 Java 应用,ARMS 提供了多种便捷接入方式,您可以参考应用监控接入概述 [ 2] 进行接入。对于运行在阿里云容器服务 ACK [ 3] 中的应用,可以拥有最简单的接入方式:基于 Pilot 模式实现探针的自动注入以及配置,无需修改镜像,只需要在应用 Yaml 中加入 2 个 Pod Label 就能接入 ARMS。

首先为 ACK 集群安装 ack-onepilot 组件,如图2所示:

图片

图 2:安装 ack-onepilot

安装完成之后,在 ACK 集群内创建 Java 应用,并在 pod 的 spec.template.metadata 字段中添加图 3 中的两个 Pod 标签。其中 armsPilotCreateAppName 代表接入到 ARMS 的应用名,可以和 Deployment 名保持一致,armsPilotAutoEnable 设置为 on 即可。您也可以直接编辑 Deployment 的 Yaml 文件添加 Pod 标签。

图片

图 3:添加标签

应用成功部署后,在 ACK 控制台上会展示 ARMS 控制台链接,如图 4 所示,点击就能跳转到 ARMS 控制台。

图片

图 4:ARMS 控制台操作选项

Java 启动应用后,应用也将会打印如图 5 所示的日志,说明应用已经挂载上 ARMS 的探针。

图片

图 5:JDK21 应用启动日志

说明:ARMS 对 Java 21 的支持依赖于 3.1.0 版本探针,截至本文发表之日,3.1.0 版本探针还没有正式发布,您可以钉钉扫码加入 ARMS 支持 Java 21 体验群,获取 3.1.0 版本探针。在 3.1.0 版本正式发布后,您就可以直接在 ARMS 官网下载最新版探针,或者通过通过 Pilot 模式自动获取 3.1.0 版本探针。

  • ARMS 支持 Java 21 体验钉钉群群号:54565000535*

查看监控数据

应用启动成功后,请求 /demo 接口,将会得到图 7 所示的响应:

图片

图 7:/demo 接口响应

在请求完 /demo 接口后,可前往 ARMS 控制台的应用列表页面点击进入应用的监控页面,如图 8 所示,或者直接在 ACK 控制台上通过转接跳转进入 ARMS 控制台。

图片

图 8:ARMS 控制台应用列表

可以看到,ARMS 已经成功识别到 Java 21 应用,并收集相关可观测数据,如图 9-11 所示,这些观测数据可帮助用户快速洞悉系统运行状况,加速线上问题排查效率,提升业务运行稳定性。更多 ARMS 应用监控的重要功能,比如智能洞察、调用链分析、CPU &内存诊断,请参考 ARMS 应用监控帮助文档 [ 4]

图片

图 9:ARMS 应用元信息

图片

图 10:ARMS 应用接口调用信息

图片

图 11:ARMS 应总览信息

ARMS 3.X 版本探针新特性一览

  • 大幅提升了对主流开源框架的埋点覆盖度,支持对 Reactor Netty 和 Vert.x 等异步框架的完整耗时统计,增加了 OceanBase 的组件支持,同时优化了PostgreSQL、Kafka 等组件的埋点设计,提供了更加精准、更加丰富的指标和 Span 数据。详情请参考 ARMS 支持的 Java 组件和框架 [ 5]
  • 性能优化,应用接入更加轻量化,更加无感;4C8G 规格的容器场景下,挂载探针带来的额外 CPU 开销相较过往版本降低 50%,使用异步框架的场景 CPU 开销优化幅度达到 65%,性能表现更加良好;启动时间大幅度优化,探针挂载启动耗时降低到 5 秒内,通过容器方式接入,init-container 启动耗时降低到 6 秒内,探针整体启动耗时缩减 10s+;
  • 支持代码热点功能。一般的 Tracing 系统由于只能对主流开源软件框架中的核心方法进行埋点,当耗时位置出现在 Tracing 埋点缺失的用户业务逻辑时,在最终的调用链中会出现一段较长的耗时无法对应到具体的代码执行方法,从而导致无法对业务逻辑耗时进行准确的判断的问题。

图片**

图 12: Tracing 监控盲区示例图

ARMS 代码热点功能在业界知名的开源持续剖析工具 Async Profiler [ 6] 基础上,通过关联调用链中的 TraceId & SpanId 信息提供了调用链级别的 On & Off-CPU 火焰图,可有效对 Tracing 的监控盲区细节进行还原,帮助用户诊断各类常见的慢调用链问题。

图片**

图 13: ARMS 支持代码热点功能效果图

更多功能介绍和使用细节请参考慢调用链诊断利器-ARMS 代码热点。

ARMS 代码热点体验交流钉钉群群号:22560019672

更多 ARMS 产品家族的详细介绍,请参考 ARMS 官方帮助文档 [ 7]

参考资料:

[1] https://openjdk.org/projects/jdk/21/

[2] https://openjdk.org/jeps/439

[3] https://openjdk.org/jeps/440

[4] https://blogs.oracle.com/java/post/the-arrival-of-java-21

相关链接:

[1] The Arrival of Java 21

https://blogs.oracle.com/java/post/the-arrival-of-java-21

[2] 应用监控接入概述

https://help.aliyun.com/zh/arms/application-monitoring/getting-started/overview

[3] 容器服务 ACK

https://www.aliyun.com/product/kubernetes**

[4] ARMS 应用监控帮助文档

https://help.aliyun.com/zh/arms/application-monitoring/product-overview/functional-characteristics

[5] ARMS 支持的 Java 组件和框架

https://help.aliyun.com/zh/arms/application-monitoring/developer-reference/java-components-and-frameworks-supported-by-arms

[6] Async Profiler

https://github.com/async-profiler/async-profiler

[7] ARMS 官方帮助文档

https://help.aliyun.com/zh/arms/

相关文章:

阿里云 ARMS 应用监控重磅支持 Java 21

作者&#xff1a;牧思 & 山猎 前言 今年的 9 月 19 日&#xff0c;作为最新的 LTS (Long Term Support) Java 版本&#xff0c;Java 21 正式 GA&#xff0c;带来了不少重量级的更新&#xff0c;详情请参考 The Arrival of Java 21 [ 1] 。虽然目前 Java 11 和 Java 17 都…...

C++ 类的析构函数和构造函数

构造函数 类的构造函数是类的一种特殊的成员函数&#xff0c;它会在每次创建类的新对象时执行。主要用来在创建对象时初始化对象即为对象成员变量赋初始值。 构造函数的名称与类的名称是完全相同的&#xff0c;并且不会返回任何类型&#xff0c;也不会返回 void。构造函数可用…...

STM32——CAN协议

文章目录 一.CAN协议的基本特点1.1 特点1.2 电平标准1.3 基本的五个帧1.4 数据帧 二.数据帧解析2.1 帧起始和仲裁段2.2 控制段2.3 数据段和CRC段2.4 ACK段和帧结束 三.总线仲裁四.位时序五.STM32CAN控制器原理与配置5.1 STM32CAN控制器介绍5.2 CAN的模式5.3 CAN框图 六 手册寄存…...

数据结构-如何巧妙实现一个栈?逐步解析与代码示例

文章目录 引言1.栈的基本概念2.选择数组还是链表&#xff1f;3. 定义栈结构4.初始化栈5.压栈操作6.弹栈操作7.查看栈顶和判断栈空9.销毁栈操作10.测试并且打印栈内容栈的实际应用结论 引言 栈是一种基本但强大的数据结构&#xff0c;它在许多算法和系统功能中扮演着关键角色。…...

web前端之拖拽API、vue3实现图片上传拖拽排序、拖放、投掷、复制、若依、vuedraggable

MENU vue2html5原生dom原生JavaScript实现跨区域拖放vue2实现跨区域拖放vue2mousedown实现全屏拖动&#xff0c;全屏投掷vue3element-plusvuedraggable实现图片上传拖拽排序vue2transition-group实现拖动排序原生拖拽排序 vue2html5原生dom原生JavaScript实现跨区域拖放 关键代…...

第11章 GUI Page403~405 步骤三 设置滚动范围

运行效果&#xff1a; 源代码&#xff1a; /**************************************************************** Name: wxMyPainterApp.h* Purpose: Defines Application Class* Author: yanzhenxi (3065598272qq.com)* Created: 2023-12-21* Copyright: yanzhen…...

【Spring Security】打造安全无忧的Web应用--使用篇

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Spring Security的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.Spring Security中的授权是…...

体验一下 CodeGPT 插件

体验一下 CodeGPT 插件 0. 背景1. CodeGPT 插件安装2. CodeGPT 插件基本配置3. (可选)CodeGPT 插件预制提示词原始配置(英文)4. CodeGPT 插件预制提示词配置(中文)5. 简单验证一下 0. 背景 看到B站Up主 “wwwzhouhui” 一个关于 CodeGPT 的视频&#xff0c;感觉挺有意思&#…...

深度学习 | 基础卷积神经网络

卷积神经网络是人脸识别、自动驾驶汽车等大多数计算机视觉应用的支柱。可以认为是一种特殊的神经网络架构&#xff0c;其中基本的矩阵乘法运算被卷积运算取代&#xff0c;专门处理具有网格状拓扑结构的数据。 1、全连接层的问题 1.1、全连接层的问题 “全连接层”的特点是每个…...

[字符编码]windwos下使用libiconv转换编码格式(二)

在http://t.csdnimg.cn/PLUuz笔记中实现了常用编码格式转换的功能,但这还是一个demo。因为代码中向libiconv库函数传递的字符串是存放在堆空间中的(我也是从网上找例子测试,是否一定要开辟堆空间存放还有待考证),如果一次性转换的字节数很巨大的话,就会导致内存空间不足,进而引…...

textile 语法

1、文字修饰 修饰行内文字 字体样式textile 语法对应的 XHTML 语法实际显示效果加强*strong*<strong>strong</strong>strong强调_emphasis_<em>emphasis</em>emphasis加粗**bold**<b>bold</b>bold斜体__italics__<i>italics</i…...

【快速开发】使用SvelteKit

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…...

【docker笔记】docker常用命令

1、帮助启动类命令 1.1 启动、重启、查询当前状态、停止 systemctl start docker systemctl stop docker systemctl restart docker systemctl status docker1.2 设置开机启动 systemctl enable docker1.3 查看docker概要信息 docker info1.4 查看docker帮助文档 docker -…...

API 接口怎样设计才安全?

设计安全的API接口是确保应用程序和数据安全的重要方面之一。下面是一些设计安全的API接口的常见实践&#xff1a; 1. 身份验证和授权&#xff1a; 使用适当的身份验证机制&#xff0c;如OAuth、JWT或基本身份验证&#xff0c;以确保只有经过身份验证的用户可以访问API。实施…...

网站被CC攻击了怎么办?CC攻击有什么危害

网络爆炸性地发展&#xff0c;网络环境也日益复杂和开放&#xff0c;同时各种各样的恶意威胁和攻击日益增多&#xff0c;其中网站被CC也是常见的情况。 CC攻击有什么危害呢&#xff1f; 被CC会导致&#xff1a; 1.访问速度变慢&#xff1a;网站遭受CC攻击后&#xff0c;由于…...

Docker - 镜像 | 容器 日常开发常用指令 + 演示(一文通关)

目录 Docker 开发常用指令汇总 辅助命令 docker version docker info docker --help 镜像命令 查看镜像信息 下载镜像 搜索镜像 删除镜像 容器命令 查看运行中的容器 运行容器 停止、启动、重启、暂停、恢复容器 杀死容器 删除容器 查看容器日志 进入容器内部…...

要参加微软官方 Copilot 智能编程训练营了

GitHub Copilot 是由 GitHub、OpenAI 和 Microsoft 联合开发的生成式 AI 模型驱动的。 GitHub Copilot 分析用户正在编辑的文件及相关文件的上下文&#xff0c;并在编写代码时提供自动补全式的建议。 刚好下周要参加微软官方组织的 GitHub Copilot 工作坊-智能编程训练营&…...

Python入门学习篇(五)——列表字典

1 列表 1.1 定义 ①有序可重复的元素集合 ②可以存放不同类型的数据 ③个人理解:类似于java中的数组1.2 相关方法 1.2.1 获取列表长度 a 语法 len(列表名)b 示例代码 list2 [1, 2, "hello", 4] print(len(list2))c 运行结果 1.2.2 获取列表值 a 语法 列表名…...

React尝鲜

组件 React的组件就是一个js函数&#xff0c;函数内部return一个由jsx语法创建的html代码片段。 //MyComp.js export default function MyComp(){return (<h1>我是新组件MyComp</h1>) } 在需要引入组件的地方import导入组件&#xff0c;并放在相应位置 //App.js…...

锯齿云服务器租赁使用教程

首先登陆锯齿云账号 网盘上传数据集与代码 随后我们需要做的是将所需要的数据集与代码上传到网盘&#xff08;也可以直接在租用服务器后将数据集与代码传到服务器的硬盘上&#xff0c;但这样做会消耗大量时间&#xff0c;造成资源浪费&#xff09; 点击工作空间&#xff1a;…...

HarmonyOS和OpenHarmony的区别

1.概要 众所周知&#xff0c;鸿蒙是华为开发的一款分布式操作系统。因为开发系统&#xff0c;最重要的是集思广益&#xff0c;大家共同维护。为了在IOS和Android之间生存&#xff0c;鸿蒙的茁壮成长一定是需要开源&#xff0c;各方助力才能实现。   在这种思想上&#xff0c;…...

Redis Stream消息队列之基本语法与使用方式

前言 本文的主角是Redis Stream&#xff0c;它是Redis5.0版本新增加的数据结构&#xff0c;主要用于消息队列&#xff0c;提供了消息的持久化和主备复制功能&#xff0c;可以让任何客户端访问任何时刻的数据&#xff0c;并且能记住每一个客户端的访问位置&#xff0c;还能保证…...

制造行业定制软件解决方案——工业信息采集平台

摘要&#xff1a;针对目前企业在线检测数据信号种类繁多&#xff0c;缺乏统一监控人员和及时处置措施等问题。蓝鹏测控开发针对企业工业生产的在线数据的集中采集分析平台&#xff0c;通过该工业信息采集平台可将企业日常各种仪表设备能够得到数据进行集中分析处理存储&#xf…...

[python]用python实现对arxml文件的操作

目录 关键词平台说明一、背景二、方法2.1 库2.2 code 关键词 python、excel、DBC、openpyxl 平台说明 项目Valuepython版本3.6 一、背景 有时候需要批量处理arxml文件(ARXML 文件符合 AUTOSAR 4.0 标准)&#xff0c;但是工作量太大&#xff0c;阔以考虑用python。 二、方…...

pdf 在线编辑

https://smallpdf.com/edit-pdf#rapp 参考 https://zh.wikihow.com/%E5%B0%86%E5%9B%BE%E5%83%8F%E6%8F%92%E5%85%A5PDF...

自然语言处理(NLP):理解语言,赋能未来

目录 前言1 什么是NLP2 NLP的用途3 发展历史4 NLP的基本任务4.1 词性标注&#xff08;Part-of-Speech Tagging&#xff09;4.2 命名实体识别&#xff08;Named Entity Recognition&#xff09;4.3 共指消解&#xff08;Co-reference Resolution&#xff09;4.4 依存关系分析&am…...

FastAPI使用loguru时,出现重复日志打印的解决方案

首先看图&#xff0c;发现每个日志都被打印了3条。其实这个和uvicorn日志打印的设计有关&#xff0c;在uvicorn中有多个logger&#xff0c;分别是uvicorn、uvicorn.error、uvicorn.access 而LOGGING默认有一个属性propagate&#xff0c;这个属性为True时&#xff0c;子日志记录…...

构建每个聚类的profile和deletion_mean特征

通过summarize_clusters函数构建每个聚类的protein[cluster_profile]和protein[cluster_deletion_mean]特征。目的是把extra_msa信息反映到msa中。 集成函数数据处理流程&#xff1a; sample_msa ->make_masked_msa -> nearest_neighbor_clusters -> summarize_clu…...

Milvus数据一致性介绍及选择方法

1、Milvus 时钟机制 Milvus 通过时间戳水印来保障读链路的一致性&#xff0c;如下图所示&#xff0c;在往消息队列插入数据时&#xff0c; Milvus 不光会为这些插入记录打上时间戳&#xff0c;还会不间断地插入同步时间戳&#xff0c;以图中同步时间戳 syncTs1 为例&#xff0…...

异常处理和单元测试python

一、实验题目 异常处理和单元测试 二、实验目的 了解异常的基本概念和常用异常类。掌握异常处理的格式、处理方法。掌握断言语句的作用和使用方法。了解单元测试的基本概念和作用。掌握在Python中使用测试模块进行单元测试的方法和步骤。 三、实验内容 编程实现如下功能&a…...

蓝牙物联网在汽车领域的应用

I、蓝牙的技术特点 ​ 1998 年 5 月&#xff0c;瑞典爱立信、芬兰诺基亚、日本东芝、美国IBM 和英特尔公司五家著名厂商&#xff0c;在联合拓展短离线通信技术的标准化活动时提出了蓝牙技术的概念。蓝牙工作在无需许可的 2.4GHz 工业频段 (SIM)之上(我国的频段范围为2400.0~248…...

用23种设计模式打造一个cocos creator的游戏框架----(二十二)原型模式

1、模式标准 模式名称&#xff1a;原型模式 模式分类&#xff1a;创建型 模式意图&#xff1a;用原型实例指定创建对象的种类&#xff0c;并且通过复制这些原型创建新的对象 结构图&#xff1a; 适用于&#xff1a; 1、当一个系统应该独立于它的产品创建、构成和表示时 2、…...

paddle 55 使用Paddle Inference部署嵌入nms的PPYoloe模型(端到端fps达到52.63)

Paddle Inference 是飞桨的原生推理库,提供服务器端的高性能推理能力。由于 Paddle Inference 能力直接基于飞桨的训练算子,因此它支持飞桨训练出的所有模型的推理。paddle平台训练出的模型转换为静态图时可以选用Paddle Inference的框架进行推理,博主以前都是将静态图转换为…...

自动化测试工具-Selenium:WebDriver的API/方法使用全解

我们上一篇文章介绍了Selenium的三大组件&#xff0c;其中介绍了WebDriver是最重要的组件。在这里&#xff0c;我们将看到WebDriver常用的API/方法&#xff08;注&#xff1a;这里使用Python语言来进行演示&#xff09;。 1. WebDriver创建 打开VSCode&#xff0c;我们首先引…...

如何通过蓝牙串口启动智能物联网?

1、低功耗蓝牙(BLE)介绍 BLE 技术是一种低成本、短距离、可互操作的鲁棒性无线技术&#xff0c;工作在免许可的 2,4 GHZ 工业、科学、医学(Industrial Scientific Medical&#xff0c;ISM)频段。BLE在设计之初便被定位为一种超低功耗(Ultra Low Power&#xff0c;ULP)无线技术&…...

Linux---基础操作命令

内容导航 类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统…...

uniapp怎么动态渲染导航栏的title?

直接在接口请求里面写入以下&#xff1a; 自己要什么参数就写什么参数 本人仅供参考&#xff1a; this.name res.data.data[i].name; console.log(名字, res.data.data[i].name); uni.setNavigationBarTitle({title: this.name}) 效果&#xff1a;...

【机器学习】决策树

参考课程视频&#xff1a;https://www.icourse163.org/course/NEU-1462101162?tid1471214452 1 概述 样子&#xff1a; 2 分裂 2.1 分裂原则 信息增益 信息增益比 基尼指数 3 终止 & 剪枝 3.1 终止条件 无需分裂 当前节点内样本同属一类 无法分裂 当前节点内…...

[node] Node.js的全局对象Global

[node] Node.js的全局对象Global 什么是全局对象 & 全局变量全局对象与全局变量全局变量-- __filename全局变量-- __dirname全局函数-- setTimeout(cb, ms)全局函数-- clearTimeout(t)全局函数-- setInterval(cb, ms)全局变量-- consoleconsole 方法概览 全局变量-- proces…...

完整的 Meteor NPM 集成

在Meteor中&#xff0c;你只能使用包内的模块。你不能直接将模块与流星应用一起使用。此软件包解决了该问题 文章目录 源码下载地址安装定义软件包使用软件包在 Meteor 方法中使用 npm 模块的示例应用程序接口异步实用程序Async.runSync&#xff08;函数&#xff09;Meteor.sy…...

智能优化算法应用:基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.骑手优化算法4.实验参数设定5.算法结果6.…...

解决 MATLAB 遗传算法中 exitflg=4 的问题

一、优化问题简介 以求解下述优化问题为例&#xff1a; P 1 : min ⁡ p ∑ k 1 K p k s . t . { ∑ k 1 K R k r e q l o g ( 1 α k ∗ p k ) ≤ B b s , ∀ k ∈ K p k ≥ 0 , ∀ k ∈ K \begin{align} {P_1:}&\mathop{\min}_{\bm{p}}{ \sum\limits_{k1}^K p_k } \no…...

云卷云舒:云原生业务应用成熟度模型

笔者最近学习了信通院发布的《云原生应用成熟度的评估模型》&#xff0c;做如下解读&#xff1a; 一、概述 云原生业务应用成熟度模型从企业业务应用基础设施域、应用研发域以及服务治理域等三个能力域二十个过程域综合评估企业业务应用在弹性、高可用、自愈性、可观测性以及…...

STM32的以太网外设+PHY(LAN8720)使用详解(5):MAC及DMA配置

0 工具准备 1.野火 stm32f407霸天虎开发板 2.LAN8720数据手册 3.STM32F4xx中文参考手册1 MAC及DMA配置 1.1 使能ETH时钟 stm32的ETH外设挂载在AHB1总线上&#xff0c;位于RCC_AHB1ENR的bit25-bit27&#xff1a; 相关语句如下&#xff1a; RCC_AHB1PeriphClockCmd(RCC_AHB1…...

GitHub、Gitee、Gitlab共用一个SSH密钥配置

目录 1. 说明2. 生成ssh2-1. 设置全局邮箱和用户名2-2. 生成全局ssh 3. Github、Gitee配置ssh3-1. Github配置3-2. Gitee配置 1. 说明 由于我的Github、Gitee、Gitlab用的邮箱不同&#xff0c;向不同的平台提交代码时都需要验证密码&#xff0c;非常麻烦所以配置了一个共用的S…...

ClickHouse(19)ClickHouse集成Hive表引擎详细解析

文章目录 Hive集成表引擎创建表使用示例如何使用HDFS文件系统的本地缓存查询 ORC 输入格式的Hive 表在 Hive 中建表在 ClickHouse 中建表 查询 Parquest 输入格式的Hive 表在 Hive 中建表在 ClickHouse 中建表 查询文本输入格式的Hive表在Hive 中建表在 ClickHouse 中建表 资料…...

用C求斐波那契数列-----(C每日一编程)

斐波那契数列: 斐波那契数列是指这样一个数列&#xff1a;1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;8&#xff0c;13&#xff0c;21&#xff0c;34&#xff0c;55&#xff0c;89……这个数列从第3项开始 &#xff0c;每一项都等于前两项之和。 递推…...

在Jetpack Compose中使用ExoPlayer实现直播流和音频均衡器

在Jetpack Compose中使用ExoPlayer实现直播流和音频均衡器 背景 ExoPlayer与Media3的能力结合&#xff0c;为Android应用程序播放多媒体内容提供了强大的解决方案。在本教程中&#xff0c;我们将介绍如何设置带有Media3的ExoPlayer来支持使用M3U8 URL进行直播流。此外&#x…...

持续集成交付CICD:Jira 远程触发 Jenkins 实现更新 GitLab 分支

目录 一、实验 1.环境 2.GitLab 查看项目 3.Jira新建模块 4. Jira 通过Webhook 触发Jenkins流水线 3.Jira 远程触发 Jenkins 实现更新 GitLab 分支 二、问题 1.Jira 配置网络钩子失败 2. Jira 远程触发Jenkins 报错 一、实验 1.环境 &#xff08;1&#xff09;主机 …...

基于SSM的面向TCP_IP的网络互联实验平台

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SSM的面向TCP和IP的网络互联实验平台…...