JVM 调优工具研究
JDK自带了一系列的工具,一般可用于JVM的调优实践,这里做一个研究。
1、jps
jps工具可以查看到当前机器上运行的Java程序的JVM进程id,这个id通常是后续其他工具使用的基础。另外,jps工具还有一些其他的参数,可以
允许我们查看到Java程序的启动参数和当前JVM的启动参数。
exp:
[root@test13 tmp]# jps
8636 QuorumPeerMain
3497 Bootstrap
2486 Jps
参数: -l 显示当前java启动类的全程
-v 显示JVM实例的启动参数
-m 显示java程序的启动参数
2、jstat
jstat工具可以查看到指定JVM实例的内存使用情况,如新生代、老年代等的gc情况。
参数详解: jstat -option vmid interval
vmid 是jps查到的JVM实例的id
interval 是连续执行的间隔时间,可选参数,不填将只执行一次
-option 是启动参数,指定jstat命令显示哪些信息
-gcutil 最常用的命令了,可以查看各个内存部分的使用情况和gc时间等信息
-gc 更详细的内存信息,是gcutil的升级版本
-class 加载class的情况
-gccause 可以打印出gc原因
jstat -gcutil vmid 1s
output:
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 22.02 3.27 5.50 49.12 63 186.797 0 0.000 186.797
每秒输出一次
S0 是0号Survivor Space
S1 是1号Survivor Space
E 是Eden
O 是Old Generation
P 是Permanent Generation
YGC 是young gc的次数
YGCT 是young gc花费的总时间
FGC 是full gc的次数
FGCT 是full gc花费的总时间
GCT 是所有gc的时间
jstat -gc vmid 1s
output
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
9088.0 9088.0 0.0 2001.0 72832.0 24685.2 728192.0 40082.0 131072.0 64380.4 63 186.797 0 0.000 186.797
C代表Capacity,是可使用的空间
U代表Used, 是已用空间
3、jmap
jmap工具可以查到堆内存的具体使用情况,可以看到堆内存中每个类占的空间大小。
参数: jmap -option vmid
-option 是启动参数,指定jmap要做的事情
-heap 可以看到堆内存的使用情况
-dump 常用的参数,可以导出一个内存映像文件,解析之后可以看到内存的使用情况。jmap -dump:format=b,file=file.hprof vmid
jmap的导出文件可以用eclipse mat工具来解析。
关于性能调优的一些思考:一般来说,java程序出现性能问题,是由机器本身的两个瓶颈造成,一者是内存问题,另一则是CPU问题。java的性能问题基本可以由这两个方面来解决。当出现性能问题,首先观察问题出现的症状,如果是方法执行时间过长或出现死锁问题,则归类于CPU问题,这类问题一般是由于代码质量不高,或者是线程安全问题或者是算法效率太低引起的,那么应该定位到问题所在,修改代码;如果是程序出现偶发性的卡顿之类的问题,则诊断为内存问题,经常出现的情况就是频繁GC导致的卡顿等问题,这时候就可以用到我们的JDK工具来定位问题所在,从而解决问题。
分享到:
相关推荐
此外,JDK 8引入了lambda表达式、Stream API等新特性,这些都值得深入研究。 总之,JDK 8u181的安装和使用是Linux系统上开发Java应用程序的基础,通过内置教程和文档,开发者可以更好地理解和掌握Java编程语言。...
JDK8u262提供了如JConsole、VisualVM等强大的JVM监控和调优工具,它们的背后都与HotSpot虚拟机的源码紧密关联。通过源码,我们可以更深入地了解这些工具的工作原理,从而更有效地进行性能调优。 总结,深入研究JDK8...
Java开发工具包(Java Development Kit,简称JDK)是Java编程语言的核心组件,它提供了编译、调试和...通过阅读和研究这些文档,你可以更好地理解JDK 1.8的新特性,提升编程技能,从而写出更高效、更优雅的Java代码。
了解JDK源码对于优化至关重要,例如,通过研究`ScheduledThreadPoolExecutor`的源码,可以发现其任务取消机制的细节,进而理解为何任务未从队列中移除。 **结论** Java性能调优是一个涉及多个层面的过程,需要结合...
通过深入研究JDK 1.6.0_35的源码,开发者可以了解Java语言的设计哲学、内存管理机制、线程模型、异常处理、反射机制等核心概念。此外,源码还揭示了类加载器、垃圾收集器、编译器优化等方面的细节,对于提升Java性能...
对于有经验的开发者,可以深入研究其内部实现,提升性能调优的技巧。 总的来说,JDK 1.5.0_22作为Java发展史上的里程碑,其对泛型、枚举、并发工具等的引入,以及对AMD64架构的支持,都为Java开发者提供了强大的...
OpenJDK 是Java开发工具包(Java Development Kit)的一个开源实现,由全球开发者社区共同维护,而BiSheng JDK则是这个开放源代码项目的一个分支,其目标是通过特定的优化来提升Java应用程序的运行效率。 首先,让...
JDK(Java Development Kit)是Oracle公司提供的Java编程环境,包含了编译器、运行时环境、调试工具和其他实用工具。JDK1.6,也被称为Java SE 6,是Java历史上的一个重要版本,发布于2006年,为开发者提供了丰富的...
**Java Development Kit (JDK)...通过深入阅读和研究这个 "jdk-11.0.11_doc-all.zip" 压缩包中的文档,开发者不仅可以掌握 JDK 11.0.11 的核心功能,还能了解最佳实践、性能优化和陷阱,从而提升自己的 Java 开发技能。
深入研究JDK1.8源码,开发者可以更好地理解Java语言的底层实现,学习到如何优化代码,以及如何利用新特性的最佳实践。同时,这对于解决实际开发中的问题,如性能调优、内存泄漏定位等都大有裨益。对于想要成为Java...
10. **性能优化**:书中可能会介绍如何通过分析JDK源码来找出性能瓶颈,并提供优化建议,例如通过JVM调优参数调整内存配置,或者使用并发工具进行性能提升。 以上只是部分可能涵盖的内容,实际书籍可能还涉及更多的...
Java Development Kit(JDK)是Oracle公司发布的用于开发和运行Java应用程序的重要工具集。JDK 8u212是Java 8的一个更新版本,包含了Java编程语言、Java类库以及编译器、调试器和其他开发工具。这个版本的更新主要...
JDK10是Java开发工具包的一个重要版本,它在Java的发展历程中引入了多个创新特性,优化了开发者的工作流程。本篇文章将聚焦于JDK10的源码,通过对源代码的深入剖析,揭示其背后的运行机制与设计理念。 首先,我们...
通过深入研究这些源码,开发者可以更好地理解Java平台的内部工作原理,提高代码质量和性能,同时也能掌握如何利用这些工具进行问题排查和优化。对于任何希望成为Java专家的人来说,对JDK源码的研读都是不可或缺的一...
10. **JVM内存模型**:JDK源码也涉及JVM内存模型,如栈内存、堆内存、方法区等,有助于理解JVM的工作原理和性能调优。 通过《JDK源码选读》,开发者不仅能深化对Java语言的理解,还能学习到软件设计模式和最佳实践...
【标签】"源码"意味着我们能够深入研究JDK10的内部工作机制,包括虚拟机(JVM)、编译器、垃圾收集器等核心组件。这对于开发者来说是一份宝贵的资源,可以提升对Java平台的理解,并有助于解决实际开发中的问题。 ...
2. **实践其他工具**:除了VisualVM外,还可以尝试使用其他性能监控和调优工具,比如JProfiler、YourKit等,以获取更多元化的解决方案。 3. **探索自动化调优方案**:考虑到手动调优的局限性,可以考虑研究自动化...
通过分析热点代码(使用JDK自带的JProfiler或VisualVM等工具),我们可以找出CPU密集型的方法,并尝试优化它们。 3. **I/O操作**:I/O操作通常是最耗时的部分。使用NIO(非阻塞I/O)可以提高I/O性能,减少线程等待...
在JRockit中,这些库可能包含JVM的特定实现、工具或者与Java标准库相关的扩展。 2. **launcher目录**:这是JRockit启动器的源码,负责解析命令行参数,初始化JVM,并加载应用程序。通过研究这部分源码,我们可以...
通过深入研究JDK中文帮助文档,开发者不仅可以掌握Java语言的基础,还能了解高级特性和最佳实践,从而编写出高效、稳定和可维护的Java应用程序。无论你是初学者还是经验丰富的开发者,都应该充分利用这个宝贵的资源...