网站首页 > 技术教程 正文
JVM调优是java开发实践中的一大重点和难点,许多程序员在开发过程中碰到过jvm调优的难题,但是熟悉一款强大的java调优工具可以令开发工作事半功倍,java调优工具除了我们前面介绍的jinfo、jmap之外还有很多。本篇来继续介绍几款其他的jvm调优工具。
1、 jstack:java堆栈跟踪工具
jstatck(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(threaddump或者javacore文件),线程快照是当前虚拟机内每一条线程正在执行的堆栈的集合,生成线程快照的目的通常是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间挂起等,都是导致线程出现长时间停顿的常见原因,线程出现停顿时通过jstack来查看各个线程的调用栈,就可以知道没有响应的线程在后台干什么,或者等待什么资源,jstack的命令格式如下:
jstack [option] vmid
option选项的合法值与具体含义如表4-4所示:
选项 | 作用 |
-F | 当正常输出的请求不被响应时,强制输出线程堆栈 |
-l | 除了堆栈外,显示关于锁的附加信息 |
-m | 如果调用到本地方法的话,可以显示C/C++的堆栈 |
表:4-4
从jdk5起,java.lang.Thread类新增了一个getAllStackTraces()的方法用于获取虚拟机中所有线程的StackTraceElement对象,使用这个方法可以通过简单的几行代码就可以实现jstack的大部分功能,在实际项目中不妨调用这个方法做个管理员,可以使用浏览器来查看线程堆栈,如代码清单4-5所示。
2、 基础工具总结:
其实除了以上介绍的这些工具之外,java还有很多jdk附带的工具,如图4-7所示,这些工具已经拥有了很长的历史,并且有些工具已经被java移除了。在更高版本的jadk中,这些工具已经拥有了功能强大的替代品,譬如:JCMD、JHSDB的命令行模式,但使用方法也是相似的,无论jdk发展到了什么版本,学习这些基础的工具命令都对自己了解java有很大的帮助。
基础工具:用于支持基本的程序运行和创建(表4-7)。
名称 | 主要作用 |
appletviewer | 在不使用web浏览器的情况下运行和调试Applet、JDK11中移除。 |
extcheck | 检查jar包冲突工具,jdk9中被移除。 |
jar | 创建和管理jar文件 |
java | java运行工具,用于运行class文件或者jar文件 |
javac | 用于java编程语言的编译器 |
javadoc | java的api文档生成器 |
javah | c语言头文件和sub函数生成器,用于编写JNI方法。 |
javap | java字节码分析工具。 |
jlink | 将Module和它的依赖打包成一个运行时镜像文件。 |
jdb | 基于JPDA协议的调试器,以类似于GDB的方式进行调试Java代码。 |
jdeps | java类依赖性分析器。 |
jdeprscan | 用于搜索JAR包中使用了"deprecated"的类,从JDK9开始提供。 |
表4-7
安全:用于程序签名,设置安全测试等(见表4-8)
名称 | 主要作用 |
keytool | 管理密钥库和证书、主要用于获取或缓存kerbeors协议的票据授权票据,允许用户查看本地凭据缓存和密钥表中的条目(用于kerberos协议)。 |
jarsigner | 生成并验证JAR签名。 |
policytool | 管理策略文件的GUI工具,用于管理用户策略文件(.java.policy)。在JDK10中被移除。 |
表4-8
国际化:用于创建本地语言文件,详见表4-9
名称 | 主要作用 |
native2ascii | 本地编码到ASCII编码的转换器(native-to-ASCII Converter),"用于任意支持的字符编码"和与之对应的"ascii编码和Unicode转义"之间的相互转换。 |
表4-9
远程方法调用:用于跨web或者网络的服务交互,见表4-10
名称 | 主要作用 |
mic | Java RMI编译器,为使用JRMP或者HOP协议的远程对象生成stub、skeleton和tie类,也用于生成OMG IDL |
rmiregistry | 远程对象注册表服务,用于在当前主机的指定端口上创建 |
rmid | 启动激活系统守护进程,允许在虚拟机中注册或者激活对象 |
serialver | 生成并返回指定类的序列化版本id |
java还有许多的其他基础开发工具,我们下篇接着介绍。
- 上一篇: 自学了java之后,最好要知道这些?
- 下一篇: 企业即时通讯是什么?可以应用在哪些场景?
猜你喜欢
- 2025-01-14 自学了java之后,最好要知道这些?
你 发表评论:
欢迎- 最近发表
-
- linux日志文件的管理、备份及日志服务器的搭建
- Linux下挂载windows的共享目录操作方法
- Linux系统中的备份文件命令(linux系统中的备份文件命令有哪些)
- 麒麟KYLINOS|通过不同方法设置用户访问文件及目录权限
- 「Linux笔记」系统目录结构(linux目录的结构及含义)
- linux中修改归属权chown命令和chgrp命令
- 工作日报 2021.10.27 Android-SEAndroid权限问题指南
- Windows和Linux环境下,修改Ollama的模型默认保存路径
- 如何强制用户在 Linux 上下次登录时更改密码?
- 如何删除Linux文件夹中除某些扩展名之外的所有文件?
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)