返回介绍

D.2 寻找瓶颈

发布于 2024-10-15 23:56:39 字数 1458 浏览 0 评论 0 收藏 0

为找出最影响程序性能的瓶颈,可采取下述几种方法:

D.2.1 安插自己的测试代码

插入下述“显式”计时代码,对程序进行评测:

long start = System.currentTimeMillis();
// 要计时的运算代码放在这儿
long time = System.currentTimeMillis() - start;

利用 System.out.println(),让一种不常用到的方法将累积时间打印到控制台窗口。由于一旦出错,编译器会将其忽略,所以可用一个“静态最终布尔值”(Static final boolean)打开或关闭计时,使代码能放心留在最终发行的程序里,这样任何时候都可以拿来应急。尽管还可以选用更复杂的评测手段,但若仅仅为了量度一个特定任务的执行时间,这无疑是最简便的方法。

System.currentTimeMillis() 返回的时间以千分之一秒(1 毫秒)为单位。然而,有些系统的时间精度低于 1 毫秒(如 Windows PC),所以需要重复 n 次,再将总时间除以 n,获得准确的时间。

D.2.2 JDK 性能评测 [2]

JDK 配套提供了一个内建的评测程序,能跟踪花在每个例程上的时间,并将评测结果写入一个文件。不幸的是,JDK 评测器并不稳定。它在 JDK 1.1.1 中能正常工作,但在后续版本中却非常不稳定。

为运行评测程序,请在调用 Java 解释器的未优化版本时加上-prof 选项。例如:

java_g -prof myClass

或加上一个程序片(Applet):

java_g -prof sun.applet.AppletViewer applet.html

理解评测程序的输出信息并不容易。事实上,在 JDK 1.0 中,它居然将方法名称截短为 30 字符。所以可能无法区分出某些方法。然而,若您用的平台确实能支持-prof 选项,那么可试试 Vladimir Bulatov 的“HyperPorf”[3]或者 Greg White 的“ProfileViewer”来解释一下结果。

D.2.3 特殊工具

如果想随时跟上性能优化工具的潮流,最好的方法就是作一些 Web 站点的常客。比如由 Jonathan Hardwick 制作的“Tools for Optimizing Java”(Java 优化工具)网站:

http://www.cs.cmu.edu/~jch/java/tools.html

D.2.4 性能评测的技巧

■由于评测时要用到系统时钟,所以当时不要运行其他任何进程或应用程序,以免影响测试结果。

■如对自己的程序进行了修改,并试图(至少在开发平台上)改善它的性能,那么在修改前后应分别测试一下代码的执行时间。

■尽量在完全一致的环境中进行每一次时间测试。

■如果可能,应设计一个不依赖任何用户输入的测试,避免用户的不同反应导致结果出现误差。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文