当前位置: 首页 > 面试题库 >

有推荐的Java性能分析教程吗?

壤驷子安
2023-03-14
问题内容

是否有推荐的Java应用程序性能分析教程?

我现在在分析时使用JProfiler和Eclipse


测试与性能工具平台(TPTP)。但是,尽管配备了出色的武器,但作为Java剖析新手还是新手,我仍然缺少指出瓶颈的一般理论和技能。


问题答案:

概要分析是一门多学科的学科。

比较流行的一种是您要进行 测量
。也就是说,您尝试查看每个函数花费多长时间和/或被调用多少次。显然,如果一个函数花费很少的时间,那么加快它的收益将很小。但是,如果要花费很多时间,那么您就必须进行侦探工作,以找出该功能的哪个部分负责该时间。不要期望函数时间加起来就是总时间,因为函数彼此调用,而函数A可能要花费很多时间的原因是它调用函数B也要花费很多时间。

这种方法可能会发现很多问题,但这取决于您是一名优秀的侦探,并且能够清楚地思考各种时间,例如挂钟时间与CPU时间,自拍时间与包含时间。例如,一个应用程序看起来可能很慢,但是功能时间可能全部报告为接近零。这可能是由于程序受I
/ O约束。如果I / O是您所期望的,那可能很好,但是它可能正在执行一些您不知道的I / O,然后您就可以返回侦探工作了。

探查器的普遍期望是,如果您可以解决足够的问题以使速度提高10%或20%,那将是非常不错的,而且我从未听说过探查器被反复使用以实现更大的提速的故事。

另一种方法不是测量,而是 捕获
。它基于以下想法:在程序花费的时间(以挂钟为单位的时间)长于您想要的时间期间,您主要想知道它在做什么,而找出原因的一种方法是停止它并询问或拍摄其状态的快照,然后对其进行分析,以完全了解其正在执行的操作以及为什么在特定的时间点正在执行此操作。如果您多次执行此操作,并且看到它多次尝试执行某项操作,则可以对该活动进行有效地优化。所不同的是,您没有问
多少 ?你在问 什么为什么
。这是另一个解释。
(请注意,获取此类快照的速度并不重要,因为您不是在询问时间,而是在询问程序在做什么以及为什么。)

就Java而言,这是一种技术含量低但高效的技术这样做的方法,或者您可以在Eclipse中使用“暂停”按钮。另一种方法是使用特定类型的探查器,该探查器在挂钟时间(例如,不希望对I
/
O视而不见的情况下,对CPU进行采样)对整个调用堆栈进行采样(例如,在等待用户输入时),并在代码行级别进行汇总,而不仅仅是功能级别,时间百分比,而不是绝对时间。为了获得时间百分比,对于任何示例中出现的每一行代码,它都应该告诉您包含该行的示例百分比,因为如果您可以使该行消失,则可以节省该百分比。(您应该忽略它试图告诉您的其他内容,例如调用图,递归和自拍时间。)满足此规范的探查器很少,但其中一个是RotateRight
/ Zoom。,但是我不确定它是否可以与Java一起使用,并且可能还有其他功能。

在某些情况下,在实际速度较慢的情况下,可能难以获得堆栈样本。然后,由于您追求的是百分比,因此您可以对代码执行任何操作,从而更轻松地获取样本而无需更改百分比。一种方法是通过在其周围环绕一个临时循环(例如100次迭代)来
放大
代码。另一种方法是在调试器下设置数据更改断点。这将导致代码解释速度比正常情况下慢10-100倍。另一种方法是使用闹钟计时器在缓慢的时间内关闭,并使用它来获取样本。

使用捕获技术,如果您反复使用它来查找并执行多个优化,则可以期望达到接近最佳的性能。对于大型软件而言,瓶颈更多,这可能意味着很多因素。堆栈溢出的人报告的系数是7倍至60倍。

捕获技术在难以弄清html" target="_blank">线程为何在等待时(例如,在另一个处理器上等待事务完成时)的情况下遇到麻烦。(测量也有同样的问题。)在这种情况下,我使用费力的方法来合并带时间戳的日志。



 类似资料:
  • 问题内容: 熟悉Java世界的我一直在寻找一种静态分析工具,该工具也足够智能,可以解决它发现的问题。我使用CodePro工具运行,但是我还是Java社区的新手,不知道供应商。 根据上述标准,您可以推荐哪种工具? 问题答案: FindBugs,PMD和Checkstyle都是绝佳的选择,尤其是将它们集成到构建过程中时。 在上一家公司,我们还使用Fortify检查潜在的安全问题。我们很幸运获得了企业许

  • 本文向大家介绍Java的JNI快速入门教程(推荐),包括了Java的JNI快速入门教程(推荐)的使用技巧和注意事项,需要的朋友参考一下 1. JNI简介 JNI是Java Native Interface的英文缩写,意为Java本地接口。 问题来源:由于Java编写底层的应用较难实现,在一些实时性要求非常高的部分Java较难胜任(实时性要求高的地方目前还未涉及,实时性这类话题有待考究)。 解决办法

  • 本文向大家介绍Mysql8.0.17安装教程【推荐】,包括了Mysql8.0.17安装教程【推荐】的使用技巧和注意事项,需要的朋友参考一下 1.因为系统重装 又双叒叕开始了装myql数据库 下载安装包    https://dev.mysql.com/downloads/mysql/ 2.解压到你想安装的地方 3.解压完是没有图红色框中的文件的 需要你配置my.ini文件 data文件夹是等会儿自

  • Nginx日志文件分析工具有没有推荐的 简单的就行

  • 本文向大家介绍Window10+Python3.5安装opencv的教程推荐,包括了Window10+Python3.5安装opencv的教程推荐的使用技巧和注意事项,需要的朋友参考一下 1.确定Python版本,电脑64位或者32位 打开cmd(window键+R,输入cmd就出现),在命令行输入:打开cmd(window键+R,输入cmd就出现),在命令行输入:python 可以看到版本是3.

  • 本文向大家介绍用Python编写分析Python程序性能的工具的教程,包括了用Python编写分析Python程序性能的工具的教程的使用技巧和注意事项,需要的朋友参考一下 虽然并非你编写的每个 Python 程序都要求一个严格的性能分析,但是让人放心的是,当问题发生的时候,Python 生态圈有各种各样的工具可以处理这类问题。 分析程序的性能可以归结为回答四个基本问题:     正运行的多快