使用 JDK 自带的 VisualVM 进行 Java 程序的性能分析

VisualVM 是什么?

VisualVM 是 JDK 自带的一个用于 Java 程序性能分析的工具,JDK 安装完毕后就有啦,在 JDK 安装目录的 bin 文件夹下能找到名称为 jvisualvm.exe。

要使用 VisualVM 分析您的应用性能,首先得让 VisualVM 识别出您的应用。Eclipse 有个插件名叫“VisualVM Launcher for Eclipse”,可以帮助我们做到这一点。
Eclipse VisualVM Launcher 的安装和配置
1. 从下面的链接下载 VisualVM Launcher 插件。下载完毕后,放到您本地 Eclipse 文件夹的 plugins 文件夹下。
http://visualvm.java.net/eclipse-launcher.html
你可以参考下图我本地的 Eclipse 文件夹。注意这个插件解压之后,应该有一个名叫 site.xml 的文件。
2. 在 Eclipse 里,菜单 “Help->Install New Software”, 点 “Local”, 把第一步下载的插件文件加载进去。

Plugin 文件已经被成功识别出来,可以安装了。


3. 安装完毕,重启 Eclipse,能在 Eclipse 的 option 里能看到一个新的关于 VisualVM 的界面了。我们需要告诉 Eclipse 我们 JDK 自带的 VisualVM 的可执行文件具体路径。这里根据 JDK 的路径指定即可。

注意 JDK home 可别错误指定成 JRE 的路径了,否则 Eclipse 也会贴心地弹出错误提示:Error Starting VisualVM:You are running VisualVM using Java Runtime Environment(JRE)。


使用 VisualVM 进行性能测试
右键单击您的 Java 项目,从右键菜单里选择“Run as”->”Run configuration”, 创建一个新的应用程序启动配置。
因为前面我们已经成功安装了 Eclipse VisualVM Launcher,所以此时发现除了 Eclipse 自带的 Eclipse JDT launcher 之外,多了一个 VisualVM Launch 的选项。

2. 假设我自己实现了一个快速排序算法,我想测一测它的性能。
首先我在下图代码第 57 行执行我的快速排序算法之处设置一个断点。
然后使用前一步创建的基于 Eclipse VisualVM Launcher 的应用程序启动配置,以调试模式启动我的 Java 应用。
断点触发,这样 VisualVM 就成功识别到了我的 Java 应用。点击 Profiler 标签页:

当前状态: profiling inactive.
点击 CPU 按钮:

现在 Profile 处于激活状态了。

3. 回到 Eclipse,按 F8 结束应用程序的执行。应用程序一旦结束,VisualVM 会立即扑捉到这个事件,并弹出一个窗口通知我们:

点 Yes,就可以查阅 VisualVM 为我们产生的性能评测分析报告了。

版权声明: 本文为 InfoQ 作者【Jerry Wang】的原创文章。
原文链接:【http://xie.infoq.cn/article/75f298291f3baeb8db4674db0】。文章转载请联系作者。
评论