JVM 学习笔记二十五、JVM监控及诊断工具-命令行篇

2023-11-16

首图

二十五、JVM监控及诊断工具-命令行篇

在这里插入图片描述

1、概述

性能诊断是软件工程师在日常工作中经常面对和解决的问题,在用户体验至上的今天,解决好应用软件的性能问题能带来非常大的收益。

Java作为最流行的编程语言之一,其应用性能诊断一直受到业界广泛关注。可能造成Java应用出现性能问题的因素非常多,例如线程控制、磁盘读写、数据库访问、网络I/O、垃圾收集等。想要定位这些问题,一款优秀的性能诊断工具必不可少。

  • 体会1:使用数据说明问题,使用知识分析问题,使用工具处理问题
  • 体会2:无监控、不调优!

简单的命令行工具

在这里插入图片描述

这些命令对应的源码地址:源码

2、jps:查看正在运行的Java进程

  • jps:Java Process Status

显示指定系统内所有的HotSpot虚拟机进程(查看虚拟机进程信息),可用于查询正在运行的虚拟机进程。

说明:对于本地虚拟机进程来说,进程的本地虚拟机ID与操作系统的进程ID是一致的,是唯一的。

测试:

image-20210511104959348

另外注意:每次 jps 执行都是一个新的进程

基本语法

  • jps 的进本语法:jps [options] [hostid]

[options]:

  • -q:仅仅显示LVMID(local virtual machine id),即本地虚拟机唯一id。不显示主类的名称等。
  • -l:输出应用程序主类的全类名 或 如果执行的是jar包,则输出jar包的完整路径
  • -m:输出虚拟机进程启动时传递给主类main()的参数
  • -v:列出虚拟机进程启动时的JVM参数。比如:-Xms100m -Xmx100m是启动程序指定的JVM参数

说明:以上参数可以综合使用。

补充:如果某Java进程关闭了默认开启的UsePerfData参数(即使用参数-XX:-UsePerfData),那么jps命令(以及下面介绍的jstat)将无法探知该Java进程

image-20210511110629988

[hostid]:

  • RMI注册表中注册的主机名
  • 如果想要远程监控主机上的java程序,需要安装jstatd
  • 对于具有更严格的安全实践的网络场所而言,可以使用一个自定义的策略文件来显式对特定的可信主机或网络的访问,尽管这种技术很容易受到IP地址欺诈攻击。
  • 如果安全问题无法使用一个定制的策略文件来处理,那么最安全的操作是不运行jstatd服务器,而是本地使用jstat和jps工具。

3、jstat:查看JVM的统计信息

3.1、基本情况

  • jstat(JVM Statistics Monitoring Tool):用于监视虚拟机各种运行状态信息的命令工具。它可以显示本地或者远程虚拟机中的类装载、内存、垃圾收集、JIT编译等运行数据。

  • 在没有GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期间定位虚拟机性能问题的首选工具。常用于检测垃圾回收问题以及内存泄露问题。

  • 官方文档

3.2、基本语法

image-20210511120843790

测试命令所用代码:

public class ScannerTest {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String info = scanner.next();
    }
}

在这里插入图片描述

1、option参数,选项option可以由以下值构成:

  • 类装载相关的:

    • -class:显示ClassLoader的相关信息:类的装载、卸载数量、总空间、类装载所消耗的时间等
  • 垃圾回收相关的:

    • -gc:显示与GC相关的堆信息。包括Eden区,两个Survivor区、老年代、永久代的用量、已用空间、GC时间合计等信息。

      image-20210511123110400

      各参数含义如下:

      在这里插入图片描述

    • -gccapacity:显示内容与-gc基本相同,但输出主要关注Java堆各个区域使用的最大、最小空间。

    • -gcutil:显示内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比。

      image-20210511124230321

      image-20210511124251797

    • -gccause:与-gcutil功能一样,但是会额外输出导致最后一次或当前正在发生的GC产生的原因。

      image-20210511124500882

    • -gcnew:显示新生代GC状况

    • -gcnewcapacity:显示内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间。

    • -gcold:显示老年代GC状况

    • -gcoldcapacity:显示内容与-gcold基本相同,输出主要关注使用到的最大、最小空间。

    • -gcpermcapacity:显示永久代用到的最大、最小空间。

  • JIT相关的:

    • -compiler:显示JIT编译器编译过的方法、耗时等信息

    • -printcompilation:输出已被JIT编译的方法

      image-20210511124723558

2、interval参数

用于指定输出统计数据的周期,单位为毫秒。即:查询间隔

3、count参数

用于指定查询的总次数

4、-t 参数

  • 可以在输出信息前面加上一个Timestamp列,显示程序的运行时间。单位:秒
  • 经验:我们可以比较 Java进程的启动时间以及总GC时间(GCT列),或者两次测量的时间间隔以及总GC时间的增量,来得出GC时间栈运行时间的比例。如果该比例超过20%,则说明目前堆的压力较大;如果该比例超过90%,则说明堆里几乎没有可用空间,随时都可能抛出OOM异常。

5、-h参数

可以在周期性数据输出时,输出多少行数据后输出一个表头信息

3.3、补充

jstat还可以用来判断是否出现内存泄漏。

  • 第1步:在长时间运行的Java程序中,我们可以运行jstat命令连续获取多行性能数据,并取这几行数据中的OU列(即已占用的老年代内存)的最小值。
  • 第2步:然后,我们每隔一段较长的时间重复一次上述操作,来获取多组OU最小值。如果这些值呈现上涨趋势,则说明该Java程序的老年代内存已使用量不断上涨,这意味着无法回收的对象在不断增加,因此有可能存在内存泄露。

4、jinfo:实时查看和修改JVM配置参数

4.1、基本情况

  • jinfo(Configuration Info For Java):查看虚拟机配置参数信息,也可以用于调整虚拟机的配置参数

在很多情况下,Java应用程序不会指定所有的Java虚拟机参数。而此时,开发人员可能不知道某一个具体的Java虚拟机参数默认值。在这种情况下,可能需要查找文档获取某个参数的默认值。这个查找过程可能是非常艰难的。但是有了jinfo工具,开发人员可以很方便地找到Java虚拟机参数的当前值。

4.2、基本语法

image-20210511125910069

  • [option]:
选项 选项说明
-flag name 输出对应名称的参数
-flag [±]name 开启或者关闭对应名称的参数,只有被标为manageable的参数才可以被动态修改
-flag name=value 设置对应名称的参数
-flags 输出全部的参数
-sysprops 输出系统属性
no option 输出全部参数和系统属性

在这里插入图片描述

  • 查看:

    image-20210511130412101

image-20210511130736029

  • 修改:jinfo不仅可以查看运行时某一个Java虚拟机的实际取值,甚至可以在运行时修改部分参数,并使之立即生效。但是,并非所有的参数都支持动态修改。**参数只有被标记为manageable的flag可以实时修改。**其实,这个修改能力是极其有限的。

    # 可以查看被标记为manageable的参数
    java -XX:+PrintFlagsFinal -version | grep manageable
    

    在这里插入图片描述

image-20210511131116460

4.3、拓展

# 查看所有JVM参数启动的初始值
java -XX:+PrintFlagsInitial
# 查看所有JVM参数的最终值
java -XX:+PrintFlagsFinal
# 查看哪些已经被用户或者JVM设置过的详细的XX参数的名称和值
java -XX:+PrintCommandLineFlags

image-20210511131514709

5、jmap:导出内存映像文件&内存使用情况

5.1、基本情况

  • jmap(JVM Memory Map):作用一方面是获取dump文件(堆转储快照文件,二进制文件),它还可以获取目标Java进程的内存相关信息,包括Java堆各区域的使用情况、堆中对象的统计信息、类加载信息等。

  • 开发人员可以在控制台中输入命令jmap -help查阅jmap工具的具体使用方式和一些标准选项配置

  • 官方文档

image-20210511132501014

5.2、基本语法

jmap [option] <pid>
jmap [option] <executable <core>
jmap [option] [server_id@]<remote server IP or hostname>

[option]参数:

选项 作用
-dump 生成dump文件
-finalizerinfo 显示在F-Queue中等待Finalizer线程执行finalize方法的对象
-heap 输出整个堆空间的统计信息,包括GC的使用、堆配置信息,以及内存的使用信息等
-histo 输出堆空间中的对象的统计信息,包括类、实例数量和合计容量
-permstat 以ClassLoader为统计口径输出永久代的内存状态信息
-F 当虚拟机进程对-dump选项没有任何响应时,强制执行生成dump文件

说明:这些参数和linux下输入显示的命令多少会有些不同,包括也受jdk版本的影响。

在这里插入图片描述

5.3、使用1:导出内存映像文件

内存的映像文件:一般来说,使用 jmap指令生成dump文件的操作算得上是最常用的jmap命令之一,将堆中所有存活对象导出至一个文件之中。

说明:

(1)通常在写Heap Dump文件前会触发一次Full GC,所以heap dump文件里保存的都是Full GC后留下的对象信息。

(2)由于生成dump文件比较耗时,因此大家需要耐心等待,尤其是大内存镜像生成的dump文件则需要耗费更长的时间来完成。

分为两种导出的方式

  • 自动的方式
jmap -dump:format=b,file=<filename.hprof> <pid>
jmap -dump:live,format=b,file=<filename.hprof> <pid>

在这里插入图片描述

  • 自动的方式

当程序发生OOM退出系统时,一些瞬时信息都随着程序的终止而消失,而OOM问题往往比较困难或者耗时。此时若能在OOM时,自动导出dump文件就显得非常迫切。这里介绍一种比较常用的取得堆快照文件的方法,即:

# 当程序发生OOM时,导出应用程序的当前堆快照
-XX:+HeapDumpOnOutOfMemoryError
# 可以指定堆快照的保存位置
-XX:HeapDumpPath=<filename.hprof>

比如:

-Xms60m -Xmx60m -XX:SurvivorRatio=8 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:\oom.hprof

5.4、使用2:显示堆内存相关信息

# 获取某一时刻整个堆空间的统计信息,包括GC的使用、堆配置信息,以及内存的使用信息等
jmap -heap pid
# 获取某一时刻堆空间中的对象的统计信息,包括类、实例数量和合计容量
jmap -histo pid

image-20210511141301933

image-20210511141427151

5.5、使用3:其他作用

# 查看系统的ClassLoader信息
jmap -permstat pid
# 查看堆积在finalizer队列中的对象
jmap -finalizerinfo

5.6、小节

  • 由于jmap将访问堆中的所有对象,为了保证在此过程中不被应用线程干扰,jmap需要借助安全点机制,让所有线程都停留在不改变堆中数据的状态。也就是说,由jmap导出的堆快照必定是安全点位置的。这可能导致基于该堆快照的分析结果存在偏差。
  • 举个例子,假设在编译生成的机器码中,某些对象的生命周期在两个安全点之间,那么:live选项将无法探知到这些对象。
  • 另外,如果某个线程长时间无法跑到安全点,jmap将一直等下去。与前面将的jstat则不同,垃圾回收器会主动将jstat所需要的数据保存至固定位置之中,而jstat只需直接读取即可。

6、jhat:JDK自带堆分析工具

6.1、基本情况

  • jhat(JVM Heap Analysis Tool):Sun JDK提供的 jhat 命令与 jmap 命令搭配使用,用于分析jmap生成的heap dump文件(堆转储快照)。jhat内置了一个微型的HTTP/HTML服务器,生成dump文件的分析结果后,用户可以在浏览器中分析查看结果(分析虚拟机转储快照信息)。
  • 使用了jhat命令,就启动了一个http服务,端口是7000,即http://localhost:7000/,既可以在服务器里分析。
  • 说明:jhat命令在JDK9,JDK10中已经被删除,官方建议使用VisualVM代替。

6.2、基本语法

image-20210511142340642

在这里插入图片描述

7、jstack:打印JVM中线程快照

7.1、基本情况

  • jstack(JVM Stack Trace):用于生成虚拟机指定进程当前时刻的线程快照(虚拟机堆栈跟踪)。线程快照就是当前虚拟机内指定进程的每一条线程正在执行的方法堆栈的集合。

  • 生成线程快照的作用:可用于定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待问题。这些都是导致线程长时间停顿的常见原因。当线程出现停顿时,就可以用jstack显示各个线程调用的堆栈情况。

  • 官方文档

在thread dump中,要留意下面几种状态:

  • 死锁,Deadlock(重点关注)
  • 等待资源,Waiting on condition(重点关注)
  • 等待获取监视器,Waiting on monitor entry(重点关注)
  • 阻塞,Blocked(重点关注)
  • 执行中,Runnable
  • 暂停,Suspended

7.2、基本语法

image-20210511143716117

image-20210511143828702

  • jstack远程管理的话,需要在远程程序的启动参数中增加:
-Djava.rmi.server.hostname=......
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8888
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
  • 演示

在这里插入图片描述

8、jcmd:多功能的命令行

8.1、基本情况

  • 在JDK1.7以后,新增了一个命令行工具jcmd

  • 它是一个多功能的工具,可以用来实现前面除了jstat之外所有命令的功能。比如:用它来导出堆,内存使用,查看Java进程、导出线程信息、执行GC、JVM运行时间等。

  • 官方文档

  • jcmd拥有jmap的大部分功能,并且在Oracle的官方网站上页推荐使用jcmd命令代替jmap命令。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J6kz7SFD-1621043302356)(http://zhy-blog.oss-cn-chengdu.aliyuncs.com/typora/202105/11/150626-835556.png)]

image-20210511150757260

示例:

image-20210511151045380

9、jstatd:远程主机信息收集

  • 之前的命令值涉及到监控本机的Java应用程序,而在这些工具中,一些监控工具也支持对远程计算机的监控(如jps、jstat)。为了启用远程监控,则需要配合使用jstatd工具。
  • 命令jstatd是一个RMI服务端程序,它的作用相当于代理服务器,建立本地计算机与远程监控工具的通信。jstatd服务器将本机的Java应用程序传递到远程计算机。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JVM 学习笔记二十五、JVM监控及诊断工具-命令行篇 的相关文章

  • 16-DFS(深度优先搜索算法)

    DFS 深度优先算法 是常见的搜索算法 早期常用于需要搜索的地方 并且还拓展出很多其它算法 深度优先算法 DFS DFS 深度优先算法 是早期开发爬虫时常用的算法 它的搜索思路是从树根开始一直找直到找到树型数据结构的叶节点 以搜索一个节点数
  • 小程序iOS兼容问题总结

    1 IOS 上 JS 只支持 new Date YYYY MM DD 这一种格式 YYYY MM DD 等格式都不支持
  • Raft 一致性算法

    文章目录 1 CAP 定理 1 Raft 基本概念 2 Raft 算法核心 2 1 Leader 选举 2 2 日志复制 3 总结 1 CAP 定理 文章参考 lt 零声教育 gt 的C C linux服务期高级架构系统教程学习 服务器高级
  • POI框架导出EXCEL的简单列子(跨行跨列)合并单元格

    public static void main String args throws IOException try HSSFWorkbook wb new HSSFWorkbook HSSFSheet sheet wb createShe
  • 十八. Kubernetes Ingress

    目录 一 Ingress 基础解释 二 ingressController 安装 六 ingress 使用示例 pathType 详细 annotations 基于k8s注解为 nginx 添加功能示例 路径重写 Session Affin
  • (二)selenium IDE 插件下载与安装

    前面selenium已经下载安装成功 接下来尝试录制下脚本 此时有个IDE插件是必备的 1 下载Chrome插件 进入网址 https www extfans com 搜索 selenium IDE 然后下载 2 安装插件 打开Chrome
  • plsql 返回结果集的存储过程

    返回结果集的存储过程 1 创建一个包 在该包中定义了一个游标类型test corsor create or replace package testpackage as type test cursor is ref cursor end
  • Linux内核自带SPI设备驱动测试程序分析:spidev_test.c

    在Linux系统中 SPI 的用户模式设备接口的驱动源码位于 drivers spi spidev c 在应用层生成 dev spidev 的节点 可以通过 read write 达到与硬件设备的 SPI 通信 下面介绍spidev驱动移植
  • js获取当前月、上一月和下一月

    获得当前月 function getNowMonth var date new Date var year date getFullYear var month date getMonth 1 month month gt 9 month
  • K8S 基础概念学习

    1 K8S 通过Deployment 实现滚动发布 比如左边的ReplicatSet 的 pod 中 是V1版本的镜像 Deployment通过 再启动一个 ReplicatSet 中启动 pod中 镜像就是V2 2 每个pod 中都有一个
  • 渗透测试工程师面试题大全(二)

    渗透测试工程师面试题大全 二 from backlion大佬 整理 51 sql 注入写文件都有哪些函数 1 select 一句话 into outfile 路径 2 select 一句话 into dumpfile 路径 3 select
  • 如何安装 IntelliJ IDEA 最新版本——详细教程

    IntelliJ IDEA 简称 IDEA 被业界公认为最好的 Java 集成开发工具 尤其在智能代码助手 代码自动提示 代码重构 代码版本管理 Git SVN Maven 单元测试 代码分析等方面有着亮眼的发挥 IDEA 产于捷克 开发人
  • Allure在自动化测试中的应用!

    01 Allure的简介及使用 1 应用场景 自动化的结果一定是通过一个报告来进行体现 Allure 是一个独立的报告插件 生成美观易读的报告 目前支持Python Java PHP C 等语言 为dev QA 提供详尽的测试报告 测试步骤
  • 微信小程序实现视频号跳转

    三种类型 1 跳转到视频号主页 wx openChannelsUserProfile finderUserName 视频号id 2 跳转到视频号视频 wx openChannelsActivity feedId 视频id finderUse
  • 文件上传-图片webshell上传

    图片webshell制作 在服务器端的PHP代码中 对于用户上传的文件做文件类型检查 查看文件格式是否符合上传规范 可以检查文件二进制格式的前几个字节 从而判断文件类型是否正确 针对这种情况可以直接新建要给1 jpg 其中代码内容如下 GI
  • 【数据结构】 二叉树面试题讲解->壹

    文章目录 引言 相同的树 https leetcode cn problems same tree description 题目描述 示例 示例一 示例二 示例三 题目解析 代码实现 另一棵树的子树 https leetcode cn pr
  • 华为OD机试-找出重复代码-2022Q4 A卷-Py/Java/JS

    小明负责维护项目下的代码 需要查找出重复代码 用以支撑后续的代码优化 请你帮助小明找出重复的代码 重复代码查找方法 以字符串形式给出两行代码 字符审长度1 lt length lt 100 由英文字母 数字和空格组成 找出两行代码中的最长公
  • 深度学习之感知器的python实现,及用感知器实现鸢尾花的分类

    机器学习一般用来处理结构化的数据 深度学习一般用来处理非结构化的数据 例如图像 视频 文字等 权重更新过程 如果真实是1 预测是0 则权重会增加 相当于为了达到阈值增加权重 如果真实是0 预测是1 则权重会降低 相当于为了达到阈值减少权重

随机推荐

  • 玩客云通过openwrt作为旁路由

    前置条件 玩客云安装 docker 安装 OpenWrt 这边又两套方案可供选择 下面是具体教程的链接镜像一 https www right com cn forum thread 8024126 1 1 html镜像二 https hub
  • 在Idea中调试ant应用

    Ant调试 Ant调试 ant 是一种非常方便的打包 部署的工具 通过ant 可以一键构建整个项目 虽然MVN也支持这种功能 但是MVN混杂了package管理的功能 并且不是很自由 学习成本比较高 通常 我们调试ant构成的程序 是通过远
  • 零散算法

    1 字符串匹配 朴素的串匹配算法 KMP匹配算法 2 广度优先搜索BFS 3 深度优先搜索DFS 4 狄克斯特拉算法Dijkstra 5 贪婪算法 6 动态规划 7 安全散列算法SHA 用递归分析问题 基于循环写代码 10 关于查找算法 1
  • unity+射线检测

    private Camera aRCamera Ray ray RaycastHit hit aRCamera GameObject Find RenderCamera GetComponent
  • JavaScript节流与防抖

    一 节流 概念 在规定的间隔时间范围内不会重复触发回调 只有大于这个时间间隔才会触发回调 把频繁触发变为少量触发 类似于技能CD 应用 点击按钮 轮播图点击左右箭头 插件lodash js 它里面封装了函数的防抖与节流业务 p 计数器 sp
  • 抓包工具篇|Charles

    1 简介 Charles 是在 Mac 下常用的网络封包截取工具 在做 移动开发时 我们为了调试与服务器端的网络通讯协议 常常需要截取网络封包来分析 Charles 是收费软件 可以免费试用 30 天 试用期过后 未付费的用户仍然可以继续使
  • 怎样使用BAT脚本实现自动按键盘的某个键

    批处理是不行的 用VBS 很简单 例子如下 Set objShell CreateObject Wscript Shell do WScript Sleep 3000 objShell SendKeys F5 WScript Sleep 3
  • Weblogic 12c 集群部署和session复制

    在上一篇Weblogic12c集群搭建的基础上 这一篇介绍Weblogic12c集群应用的部署和session复制 1 启动服务 首先在weblogic12c控制台 启动受托管服务server1 server2 server3 2 将要部署
  • 前端实现微信支付(H5,微信小程序)

    一 微信支付 H5 微信小程序 通常一些电商项目使用到微信支付操作 所以简单地介绍一下微信支付的具体流程 1 1 什么是微信支付 在什么业务场景会使用到微信支付 微信支付是微信内置微信浏览器 其他浏览器不支持 或者微信小程序的支付接口 主要
  • ubuntu如何修改首次登入不是anaconda的base环境

    ubuntu安装anaconda后 每次用户登录进去后所在环境都是anaconda的base虚拟环境 如果用户不想一开始登进去就是anaconda的base环境 想在需要使用anaconda时再激活anaconda环境 输入下面的命令就可以
  • 在Flutter里面构建布局

    https flutter io tutorials layout 可以学到 Flutter的布局机制 如何水平与垂直布局控件 如何构建一个Flutter布局 布局的效果图 https flutter io tutorials layout
  • 西山小菜鸟之Scrapy学习笔记---splash简介

    前言 本文主要介绍scrapy splash的理论知识 文中如有不正确的地方望大家指正 本文的主要内容出自书 精通Scrapy网络爬虫 虫术 Python绝技 背景 近几年随着前端技术和手机端App的飞速发展 互联网架构也发生了巨大的变化
  • 经典兔子问题python(头歌教学实践平台)

    第1关 经典兔子问题 递归 任务描述 问题 有一对兔子 从出生后的第三个月起 每个月都生一对兔子 小兔子再长三个月后每个月又生一对兔子 假如兔子都不死 请问每个月的兔子的数量是多少对 本关任务 编写程序求解上面的问题 相关知识 兔子问题的分
  • java——集合框架

    文章目录 接口 实现 类 算法 1 排序算法 2 查找算法 3 拷贝算法 4 填充算法 5 比较算法 6 随机算法 7 迭代器算法 8 交集 并集 差集 9 分割集合 10 数组和集合的互转 集合框架是一个用来代表和操纵集合的统一架构 所有
  • EFSM(事件驱动型有限状态机:Event Finite State Machine)

    一 介绍 EFSM event finite state machine 事件驱动型有限状态机 是一个基于事件驱动的有限状态机 主要应用于嵌入式设备的软件系统中 EFSM的设计原则是 简单 EFSM的使用者只需要关心 当事件到来时 通过EF
  • 手撸算法-最大子数组和-牛客

    描述 给定一个数组arr 返回子数组的最大累加和 例如 arr 1 2 3 5 2 6 1 所有子数组中 3 5 2 6 可以累加出最大的和12 所以返回 题目保证没有全为负数的数据 要求 时间复杂度为O n O n 空间复杂度为O 1 O
  • css如何让块无间隙,CSS 去掉inline-block间隙的几种方法

    最近做移动端页面时 经常会用到inline block元素来布局 但无可避免都会遇到一个问题 就是inline block元素之间的间隙 这些间隙会导致一些布局上的问题 需要把间隙去掉 对于inline block元素及去掉间隙的方法 在这
  • antd中的Cascader级联选择框怎么清空重置React

    项目场景 React项目 使用antd中的Cascader级联选择框 问题描述 通过其他按钮无法重置选择框中的项 原因分析 对应解决办法一和二 1 级联选择框的数据默认是根据options绑定的数组中的value值来进行赋值显示的 可以使用
  • Python中Update()函数的使用

    简介 Python 字典 update 方法用于更新字典中的键 值对 可以修改存在的键对应的值 也可以添加新的键 值对到字典中 语法 d update e 参数说明 将e中键 值对添加到字典d中 e可能是字典 也可能是键 值对序列 详见实例
  • JVM 学习笔记二十五、JVM监控及诊断工具-命令行篇

    二十五 JVM监控及诊断工具 命令行篇 1 概述 性能诊断是软件工程师在日常工作中经常面对和解决的问题 在用户体验至上的今天 解决好应用软件的性能问题能带来非常大的收益 Java作为最流行的编程语言之一 其应用性能诊断一直受到业界广泛关注