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

【JVM-9】Java性能调优利器:jmap工具使用指南与应用案例

在Java应用程序的性能调优和故障排查中,jmap(Java Memory Map)是一个不可或缺的工具。它可以帮助开发者分析Java堆内存的使用情况,生成堆转储文件(Heap Dump),并查看内存中的对象分布。无论是内存泄漏、堆内存溢出,还是对象分布不均的问题,jmap都能提供关键的数据支持。本文将详细介绍jmap的使用方法,并结合实际案例展示其应用场景。


1. 什么是jmap?

jmap 是JDK自带的一款命令行工具,用于生成Java进程的内存快照(Heap Dump)和查看堆内存的详细信息。它可以显示堆内存中的对象分布、类加载器信息、以及垃圾回收器的状态等。

jmap 的主要功能包括:

  • 生成堆转储文件(Heap Dump)。
  • 查看堆内存的概要信息。
  • 查看堆内存中的对象分布。
  • 查看类加载器的统计信息。

2. jmap的基本用法

2.1 查看Java进程的PID

在使用jmap之前,首先需要找到目标Java进程的PID(进程ID)。可以使用以下命令:

jps -l

输出示例:

1234 com.example.MyApplication
5678 sun.tools.jps.Jps

这里,1234 是目标Java进程的PID。

2.2 生成堆转储文件(Heap Dump)

使用以下命令生成堆转储文件:

jmap -dump:format=b,file=heapdump.hprof <PID>
  • format=b:指定输出格式为二进制(Heap Dump的标准格式)。
  • file=heapdump.hprof:指定输出文件名。
  • <PID>:目标Java进程的PID。

示例:

jmap -dump:format=b,file=heapdump.hprof 1234

生成的 heapdump.hprof 文件可以使用工具(如Eclipse MAT、VisualVM)进一步分析。
在这里插入图片描述

2.3 查看堆内存概要信息

使用以下命令查看堆内存的概要信息:

jmap -heap <PID>

输出示例:

Attaching to process ID 1234, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 11.0.12+7using thread-local object allocation.
Parallel GC with 4 thread(s)Heap Configuration:MinHeapFreeRatio         = 40MaxHeapFreeRatio         = 70MaxHeapSize              = 1048576000 (1000.0MB)NewSize                  = 34865152 (33.25MB)MaxNewSize               = 174063616 (166.0MB)OldSize                  = 699400192 (667.0MB)NewRatio                 = 2SurvivorRatio            = 8MetaspaceSize            = 21807104 (20.796875MB)CompressedClassSpaceSize = 1073741824 (1024.0MB)MaxMetaspaceSize         = 17592186044415 MBG1HeapRegionSize         = 0 (0.0MB)Heap Usage:
PS Young Generation
Eden Space:capacity = 33554432 (32.0MB)used     = 16777216 (16.0MB)free     = 16777216 (16.0MB)50.0% used
From Space:capacity = 5242880 (5.0MB)used     = 0 (0.0MB)free     = 5242880 (5.0MB)0.0% used
To Space:capacity = 5242880 (5.0MB)used     = 0 (0.0MB)free     = 5242880 (5.0MB)0.0% used
PS Old Generationcapacity = 699400192 (667.0MB)used     = 0 (0.0MB)free     = 699400192 (667.0MB)0.0% used

2.4 查看堆内存中的对象分布

使用以下命令查看堆内存中的对象分布:

jmap -histo <PID>

输出示例:

 num     #instances         #bytes  class name
----------------------------------------------	1:         12345        12345678  [B2:          6789         8765432  java.lang.String3:          2345         3456789  java.lang.Object
  • #instances:对象的实例数量。
  • #bytes:对象占用的内存大小。
  • class name:对象的类名。

2.5 查看类加载器信息

使用以下命令查看类加载器的统计信息:

jmap -clstats <PID>

输出示例:

在这里插入图片描述


3. jmap的应用案例

3.1 案例1:诊断内存泄漏

问题描述:Java应用程序运行一段时间后,堆内存持续增长,最终导致 OutOfMemoryError

解决步骤

  1. 使用 jmap 生成堆转储文件:

    jmap -dump:format=b,file=heapdump.hprof <PID>
    
  2. 使用 Eclipse MAT 或 VisualVM 分析 heapdump.hprof 文件。

  3. 查找内存中占用最多的对象,分析其引用链,定位内存泄漏的根源。

3.2 案例2:优化对象分布

问题描述:Java应用程序的性能下降,怀疑是某些对象占用了过多内存。

解决步骤

  1. 使用 jmap -histo 查看堆内存中的对象分布:

    jmap -histo <PID>
    
  2. 分析输出结果,找出占用内存最多的对象。

  3. 优化代码,减少这些对象的创建或缩短其生命周期。

3.3 案例3:分析类加载器问题

问题描述:Java应用程序在运行过程中出现 ClassNotFoundExceptionNoClassDefFoundError

解决步骤

  1. 使用 jmap -clstats 查看类加载器的统计信息:

    jmap -clstats <PID>
    
  2. 检查类加载器的父子关系,确认类加载是否正确。

  3. 修复类加载器的配置或类路径问题。


4. 注意事项

  • 权限问题:在某些操作系统上,使用 jmap 需要管理员权限。
  • 性能影响:生成堆转储文件可能会导致应用程序暂停,建议在非生产环境中使用。
  • 文件大小:堆转储文件可能非常大,确保磁盘空间充足。

5. 总结

jmap 是Java开发者进行性能调优和故障排查的利器。通过生成堆转储文件、查看堆内存信息和对象分布,开发者可以快速定位内存泄漏、优化对象分布,并解决类加载器问题。结合其他工具(如Eclipse MAT、VisualVM),jmap 的功能更加强大。

相关文章:

【JVM-9】Java性能调优利器:jmap工具使用指南与应用案例

在Java应用程序的性能调优和故障排查中&#xff0c;jmap&#xff08;Java Memory Map&#xff09;是一个不可或缺的工具。它可以帮助开发者分析Java堆内存的使用情况&#xff0c;生成堆转储文件&#xff08;Heap Dump&#xff09;&#xff0c;并查看内存中的对象分布。无论是内…...

使用vscode在本地和远程服务器端运行和调试Python程序的方法总结

1 官网下载 下载网址&#xff1a;https://code.visualstudio.com/Download 如下图所示&#xff0c;可以分别下载Windows,Linux,macOS版本 历史版本下载链接: https://code.visualstudio.com/updates 2 安装Python扩展工具 打开 VS Code&#xff0c;安装 Microsoft 提供的官…...

AI 编程工具—Cursor 对话模式详解 Chat、Composer 与 Normal/Agent 模式

Cursor AI 对话模式详解:Chat、Composer 与 Normal/Agent 模式 一、简介 Cursor 是一个强大的 AI 辅助编程工具,它提供了多种对话模式来满足不同的开发需求。主要包括: Chat 模式:直接对话交互Composer 模式:结构化编程助手Normal/Agent 模式:不同的 AI 响应策略打开Ch…...

【MySQL】数据库基础知识

欢迎拜访&#xff1a;雾里看山-CSDN博客 本篇主题&#xff1a;【MySQL】数据库基础知识 发布时间&#xff1a;2025.1.21 隶属专栏&#xff1a;MySQL 目录 什么是数据库为什么要有数据库数据库的概念 主流数据库mysql的安装mysql登录使用一下mysql显示数据库内容创建一个数据库创…...

ChatGPT开发教程指南

ChatGPT开发教程指南 一、ChatGPT 概述二、开发环境搭建&#xff08;一&#xff09;硬件要求&#xff08;二&#xff09;软件要求 三、开发流程&#xff08;一&#xff09;数据处理&#xff08;二&#xff09;模型选择与训练&#xff08;三&#xff09;接口开发 四、示例代码 随…...

OpenEuler学习笔记(四):OpenEuler与CentOS的区别在那里?

OpenEuler与CentOS的对比 一、基本信息 起源与背景&#xff1a; OpenEuler&#xff1a;由华为发起&#xff0c;后捐赠给开放原子开源基金会&#xff0c;旨在构建一个开放、多元化的云计算和边缘计算平台&#xff0c;以满足华为及其他企业的硬件和软件需求。CentOS&#xff1a;…...

spring cloud如何实现负载均衡

在Spring Cloud中&#xff0c;实际上并没有直接支持lb:\\这样的URL前缀来自动解析为负载均衡的服务地址。lb:\\这样的表示可能是在某些特定框架、文档或示例中自定义的&#xff0c;但它并不是Spring Cloud官方API或规范的一部分。 Spring Cloud实现负载均衡的方式通常依赖于服…...

LeetCode:37. 解数独

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;37. 解数独 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff…...

如何在idea中搭建SpringBoot项目

如何在idea中快速搭建SpringBoot项目 目录 如何在idea中快速搭建SpringBoot项目前言一、环境准备&#xff1a;搭建前的精心布局 1.下载jdk &#xff08;1&#xff09;安装JDK&#xff1a;&#xff08;2&#xff09;运行安装程序&#xff1a;&#xff08;3&#xff09;设置安装…...

STM32补充——FLASH

目录 1.内部FLASH构成&#xff08;F1&#xff09; 2.FLASH读写过程&#xff08;F1&#xff09; 2.1内存的读取 2.2闪存的写入 2.3FLASH接口寄存器&#xff08;写入 & 擦除相关&#xff09; 3.FLASH相关HAL库函数简介&#xff08;F1/F4/F7/H7&#xff09; 4.编程实战 …...

ASP.NET Core 中的 JWT 鉴权实现

在当今的软件开发中&#xff0c;安全性和用户认证是至关重要的方面。JSON Web Token&#xff08;JWT&#xff09;作为一种流行的身份验证机制&#xff0c;因其简洁性和无状态特性而被广泛应用于各种应用中&#xff0c;尤其是在 ASP.NET Core 项目里。本文将详细介绍如何在 ASP.…...

Docker配置国内镜像源

访问docker hub需要科学上网 在 Docker 中配置镜像地址&#xff08;即镜像加速器&#xff09;可以显著提升拉取镜像的速度&#xff0c;尤其是在国内访问 Docker Hub 时。以下是详细的配置方法&#xff1a; 1. 配置镜像加速器 Docker 支持通过修改配置文件来添加镜像加速器地址…...

qiankun+vite+vue3

基座与子应用代码示例 本示例中,基座为Vue3,子应用也是Vue3,由于qiankun不支持Vite构建的项目,这里还要引入 vite-plugin-qiankun 插件 基座(主应用) 加载qiankun依赖 npm i qiankun -S qiankun配置(src/qiankun) src/qiankun/config.ts export default {subApp…...

如何使用AI工具cursor(内置ChatGPT 4o+claude-3.5)

⚠️温馨提示&#xff1a; 禁止商业用途&#xff0c;请支持正版&#xff0c;充值使用&#xff0c;尊重知识产权&#xff01; 免责声明&#xff1a; 1、本教程仅用于学习和研究使用&#xff0c;不得用于商业或非法行为。 2、请遵守Cursor的服务条款以及相关法律法规。 3、本…...

Linux内核编程(二十一)USB驱动开发-键盘驱动

一、驱动类型 USB 驱动开发主要分为两种&#xff1a;主机侧的驱动程序和设备侧的驱动程序。一般我们编写的都是主机侧的USB驱动程序。 主机侧驱动程序用于控制插入到主机中的 USB 设备&#xff0c;而设备侧驱动程序则负责控制 USB 设备如何与主机通信。由于设备侧驱动程序通常与…...

vue3+ts watch 整理

watch() 一共可以接受三个参数&#xff0c;侦听数据源、回调函数和配置选项 作用&#xff1a;监视数据的变化&#xff08;和Vue2中的watch作用一致&#xff09; 特点&#xff1a;Vue3中的watch只能监视以下四种数据&#xff1a; ref定义的数据。 reactive定义的数据。 函数返…...

2025年最新深度学习环境搭建:Win11+ cuDNN + CUDA + Pytorch +深度学习环境配置保姆级教程

本文目录 一、查看驱动版本1.1 查看显卡驱动1.2 显卡驱动和CUDA对应版本1.3 Pytorch和Python对应的版本1.4 Pytorch和CUDA对应的版本 二、安装CUDA三、安装cuDANN四、安装pytorch五、验证是否安装成功 一、查看驱动版本 1.1 查看显卡驱动 输入命令nvidia-smi可以查看对应的驱…...

USART_串口通讯轮询案例(HAL库实现)

引言 前面讲述的串口通讯案例是使用寄存器方式实现的&#xff0c;有利于深入理解串口通讯底层原理&#xff0c;但其开发效率较低&#xff1b;对此&#xff0c;我们这里再讲基于HAL库实现的串口通讯轮询案例&#xff0c;实现高效开发。当然&#xff0c;本次案例需求仍然和前面寄…...

CAN 网络介绍

背景 在T-Box 产品开发过程中&#xff0c;我们离不开CAN总线&#xff0c;因为CAN总线为我们提供了车身的相关数据&#xff0c;比如&#xff0c;车速、油耗、温度等。用于上报TSP平台&#xff0c;进行国标认证&#xff1b;也帮助我们进行车身控制&#xff0c;比如车门解锁/闭锁…...

pytorch 多机多卡训练方法

在深度学习训练中&#xff0c;使用多机多卡&#xff08;多台机器和多块 GPU&#xff09;可以显著加速模型训练过程。 PyTorch 提供了多种方法来实现多机多卡训练&#xff0c;以下是一些常用的方法和步骤&#xff1a; 1. 使用 torch.distributed 包 PyTorch 的 torch.distribut…...

【智能控制】年末总结,模糊控制,神经网络控制,专家控制,遗传算法

关注作者了解更多 我的其他CSDN专栏 毕业设计 求职面试 大学英语 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 …...

Linux系统 C/C++编程基础——使用make工具和Makefile实现自动编译

ℹ️大家好&#xff0c;我是练小杰&#xff0c;今天周二了&#xff0c;距离除夕只有&#xff16;天了&#xff0c;新的一年就快到了&#x1f606; 本文是有关Linux C/C编程的make和Makefile实现自动编译相关知识点&#xff0c;后续会不断添加相关内容 ~~ 回顾:【Emacs编辑器、G…...

kafka学习笔记7 性能测试 —— 筑梦之路

kafka 不同的参数配置对 kafka 性能都会造成影响&#xff0c;通常情况下集群性能受分区、磁盘和线程等影响因素&#xff0c;因此需要进行性能测试&#xff0c;找出集群性能瓶颈和最佳参数。 # 生产者和消费者的性能测试工具 kafka-producer-perf-test.sh kafka-consumer-perf-t…...

C#与AI的共同发展

C#与人工智能(AI)的共同发展反映了编程语言随着技术进步而演变&#xff0c;以适应新的挑战和需要。自2000年微软推出C#以来&#xff0c;这门语言经历了多次迭代&#xff0c;不仅成为了.NET平台的主要编程语言之一&#xff0c;还逐渐成为构建各种类型应用程序的强大工具。随着时…...

multus使用教程

操作步骤如下&#xff1a; 1.在vmware vsphere上配置所有主机使用的端口组安全项 Forged transmits 设置为&#xff1a; Accept Promiscuous Mode 设置为&#xff1a;Accept Promiscuous Mode&#xff08;混杂模式&#xff09;和Forged Transmits&#xff08;伪传输&#xff09…...

用JAVA写算法之输入输出篇

本系列适合原来用C语言或其他语言写算法&#xff0c;但是因为找工作或比赛的原因改用JAVA语言写算法的同学。当然也同样适合初学算法&#xff0c;想用JAVA来写算法题的同学。 常规方法&#xff1a;使用Scanner类和System.out 这种方法适用于leetcode&#xff0c;以及一些面试手…...

场馆预定平台高并发时间段预定实现V2

&#x1f3af; 本文档介绍了场馆预订系统接口V2的设计与实现&#xff0c;旨在解决V1版本中库存数据不一致及性能瓶颈的问题。通过引入令牌机制确保缓存和数据库库存的最终一致性&#xff0c;避免因服务器故障导致的库存错误占用问题。同时&#xff0c;采用消息队列异步处理库存…...

(1)STM32 USB设备开发-基础知识

开篇感谢&#xff1a; 【经验分享】STM32 USB相关知识扫盲 - STM32团队 ST意法半导体中文论坛 单片机学习记录_桃成蹊2.0的博客-CSDN博客 USB_不吃鱼的猫丿的博客-CSDN博客 1、USB鼠标_哔哩哔哩_bilibili usb_冰糖葫的博客-CSDN博客 USB_lqonlylove的博客-CSDN博客 USB …...

Spring Boot 整合 ShedLock 处理定时任务重复执行的问题

&#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Micro麦可乐的博客 &#x1f425;《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程&#xff0c;入门到实战 &#x1f33a;《RabbitMQ》…...

缓存之美:万文详解 Caffeine 实现原理(上)

由于社区最大字数限制&#xff0c;本文章将分为两篇&#xff0c;第二篇文章为缓存之美&#xff1a;万文详解 Caffeine 实现原理&#xff08;下&#xff09; 大家好&#xff0c;我是 方圆。文章将采用“总-分-总”的结构对配置固定大小元素驱逐策略的 Caffeine 缓存进行介绍&…...

PHP语言的网络编程

PHP语言的网络编程 网络编程是现代软件开发中不可或缺的一部分&#xff0c;尤其是在日益发展的互联网时代。PHP&#xff08;Hypertext Preprocessor&#xff09;是一种广泛使用的开源脚本语言&#xff0c;专门用于Web开发。它的灵活性、易用性以及强大的社区支持使得PHP在网络…...

【技巧】优雅的使用 pnpm+Monorepo 单体仓库构建一个高效、灵活的多项目架构

单体仓库&#xff08;Monorepo&#xff09;搭建指南&#xff1a;从零开始 单体仓库&#xff08;Monorepo&#xff09;是一种将多个相关项目集中管理在一个仓库中的开发模式。它可以帮助开发者共享代码、统一配置&#xff0c;并简化依赖管理。本文将通过实际代码示例&#xff0…...

算法项目实时推流

1、搭建流媒体服务器 下载mediamtx 2、视频流直推 ffmpeg -stream_loop -1 -i DJI_20250109112715_0002_W.MP4 -r 30 -c:v libx264 -preset ultrafast -f flv rtmp://192.168.100.20:1935/live/test_chengdu1 3、硬件加速 如果硬件支持&#xff0c;可以使用硬件加速编码器&am…...

软件测试—— 接口测试(HTTP和HTTPS)

软件测试—— 接口测试&#xff08;HTTP和HTTPS&#xff09; HTTP请求方法GET特点使用场景URL结构URL组成部分URL编码总结 POST特点使用场景请求结构示例 请求标头和响应标头请求标头&#xff08;Request Headers&#xff09;示例请求标头 响应标头&#xff08;Response Header…...

PCL K4PCS算法实现点云粗配准【2025最新版】

目录 一、算法原理1、算法概述2、算法流程3、参考文献二、 代码实现1、原始版本2、2024新版三、 结果展示本文由CSDN点云侠原创,原文链接,首发于:2020年4月27日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的抄袭狗。 博客长期更新,本文最近一次更新时间为…...

Docker 学习总结(85)—— docker cp 使用总结

前言 在现代软件开发中,Docker 已成为一种流行的容器化技术。无论是在开发、测试还是生产环境中,管理容器内的文件都是一项常见且重要的任务。本文将详细介绍如何使用 docker cp 命令在 Docker 容器与宿主机之间拷贝文件和目录,并结合一些实际使用场景,帮助您更高效地管理…...

《FMambaIR:一种基于混合状态空间模型和频域的方法用于图像恢复》学习笔记

paper&#xff1a;(PDF) FMambaIR: A Hybrid State Space Model and Frequency Domain for Image Restoration 目录 摘要 一、引言 二、相关工作 1、图像恢复 2、频率学习 3、状态空间模型&#xff08;SSM&#xff09; 三、框架 1、基本知识 2、整体框架 3、F-Mamba…...

PyQt5 超详细入门级教程上篇

PyQt5 超详细入门级教程 上篇&#xff1a;1-3部分&#xff1a;PyQt5基础与常用控件 第1部分&#xff1a;初识 PyQt5 和安装 1.1 什么是 PyQt5&#xff1f; PyQt5 是 Python 的图形用户界面 (GUI) 框架&#xff0c;它基于强大的 Qt 库。Qt 是一个跨平台的 C 框架&#xff0c;用…...

通信协议—WebSocket

一、WebSocket编程概念 1.1 什么是WebSocket WebSocket 是一种全双工通信协议&#xff0c;允许在客户端&#xff08;通常是浏览器&#xff09;和服务器之间建立持久连接&#xff0c;以实现实时的双向通信。它是 HTML5 标准的一部分&#xff0c;相比传统的 HTTP 请求&#xff…...

FFmpeg音视频采集

文章目录 音视频采集音频采集获取设备信息录制麦克风录制声卡 视频采集摄像机画面采集 音视频采集 DirectShow&#xff08;简称DShow&#xff09;是一个Windows平台上的流媒体框架&#xff0c;提供了高质量的多媒体流采集和回放功能&#xff0c;它支持多种多样的媒体文件格式&…...

【微机原理与接口技术】定时控制接口

文章目录 8253的引脚和工作方式内部结构和引脚工作方式方式0&#xff1a;计数结束中断方式1&#xff1a;可编程单稳脉冲方式2&#xff1a;周期性负脉冲输出方式3&#xff1a;方波发生器方式4&#xff1a;软件触发的单次负脉冲输出方式5&#xff1a;硬件触发的单次负脉冲输出各种…...

AG32 FPGA 的 Block RAM 资源:M9K 使用

1. 概述 AG32 FPGA 包含了 4 个 M9K 块&#xff0c;每个 M9K 块的容量为 8192 bits&#xff0c;总计为 4 个 M9K&#xff08;4K bytes&#xff09;。这使得 AG32 的内部存储非常适合嵌入式应用&#xff0c;能够有效地利用片上资源。 M9K 参数 参考自《AGRV2K_Rev2.0.pdf》。…...

第3天:阿里巴巴微服务解决方案概览

一、阿里巴巴微服务解决方案概述 阿里巴巴在微服务领域贡献了多个开源项目&#xff0c;形成了完整的微服务解决方案&#xff0c;广泛应用于分布式系统开发。其中&#xff0c;Spring Cloud Alibaba 是基于 Spring Cloud 构建的一站式微服务解决方案&#xff0c;集成了多个阿里巴…...

在Ubuntu上安装RabbitMQ教程

1、安装erlang 因为rabbitmq是基于erlang开发的&#xff0c;所以要安装rabbitmq&#xff0c;首先需要安装erlang运行环境 apt-get install erlang执行命令查是否安装成功&#xff1a;erl&#xff0c;疯狂 Ctrlc 就能退出命令行 2、安装rabbitmq 1、查看erlang与rabbitmq版本…...

WPF 引发类型为“System.Windows.Forms.AxHost+InvalidActiveXStateException”的异常 解决办法

本章讲述&#xff1a;引发类型为“System.Windows.Forms.AxHostInvalidActiveXStateException”的异常 解决办法。 这几天在做一个WPF功能时&#xff0c;因为引用了第三方的OCX控件&#xff0c;一般来说一个对象只要实例化就行了, 但是在引用这个控件时就报引发类型为“System.…...

Vue 3中导航守卫(Navigation Guard)结合Axios实现token认证机制

在Vue 3中&#xff0c;导航守卫&#xff08;Navigation Guard&#xff09;用于拦截路由的变化&#xff0c;可以在用户访问页面前进行检查。结合Axios进行token认证机制时&#xff0c;我们可以通过导航守卫在路由跳转时&#xff0c;检查用户的认证状态&#xff0c;确保用户有有效…...

代码随想录算法【Day28】

Day28 122.买卖股票的最佳时机 II 最终利润是可以分解的 假如第 0 天买入&#xff0c;第 3 天卖出&#xff0c;那么利润为&#xff1a;prices[3] - prices[0]。 相当于(prices[3] - prices[2]) (prices[2] - prices[1]) (prices[1] - prices[0])。 所以把利润分解为每天…...

【21】Word:德国旅游业务❗

目录 题目 NO1.2.3 NO4 NO5.6 NO7 NO8.9.10.11 题目 NO1.2.3 F12&#xff1a;另存为布局→页面设置→页边距&#xff1a;上下左右选中“德国主要城市”→开始→字体对话框→字体/字号→文本效果&#xff1a;段落对话框→对齐方式/字符间距/段落间距 NO4 布局→表对话框…...

基于 MDL 行情插件的中金所 L1 数据处理最佳实践

本文介绍了如何通过 DolphinDB 的 MDL 插件订阅并处理中金所 Level 1 实时数据。首先&#xff0c;文章简要介绍了 MDL 插件的功能和作用。它是基于 MDL 官方提供的行情数据服务 C SDK&#xff08;即 TCP 版本 MDL &#xff09;实现&#xff0c;提供了实时数据获取和处理的能力。…...

在 vscode + cmake + GNU 工具链的基础上配置 JLINK

安装 JLINK JLINK 官网链接 下载安装后找到安装路径下的可执行文件 将此路径添加到环境变量的 Path 中。 创建 JFlash 项目 打开 JFlash&#xff0c;选择新建项目 选择单片机型号 在弹出的窗口中搜索单片机 其他参数根据实际情况填写 新建完成&#xff1a; 接下来设置…...