令人意想不到的宝贝,其实往往已经早就在你眼前,只不过你没发现它。VisualVM就是这样的。每当我们升级JDK、打开IDE时,其实我们就用上了它所带来的新特性。至少,我自己是这样认为的。
我第一次获知VisualVM是在去年二月份Geertjan Wielenga所写的一篇文章里,那时它的第三版都已经发布了。可以说VisualVM是Java开发者最为重要的工具,但同时这也是最不为人知的秘密。在Java的运行效率仍然是个问题的情况下,正是它有效的解决了这个问题。(有关VisualVM的简介,可参考51CTO之前发布的Sun VisualVM项目 开源Java问题解决方案一文)
VisualVM简介
简单说来,VisualVM是一种集成了多个JDK命令行工具的可视化工具,它能为您提供强大的分析能力。所有这些都是免费的!它囊括的命令行工具包括jstat, JConsole, jstack, jmap 和 jinfo,这些工具与JDK的标准版本是一致的。
你可以使用VisualVM生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和CPU分析,同时它还支持在MBeans上进行浏览和操作。尽管VisualVM自身要在JDK6这个版本上运行,但是JDK1.4以上版本的程序它都能监控。
对于我来说,这些功能都是至关重要的。以前我一直在使用如YourKit这样的一些付费软件来检测我的应用软件,但现在我可以用VisualVM这样一个开源工具来实现同样的功能。更何况,有谁比能Sun公司更了解JVM呢?
如何获取VisualVM
VisualVM的一个最大好处就是,它已经在你的JDK bin目录里了,只要你使用的是JDK1.6 Update7之后的版本。点击一下jvisualvm.exe图标它就可以运行了。
你所需要做的只是点一下jvisualvm.exe,就能启动它。运行中的所有Java应用程序将显示在右边的导航栏。你会发现根本不需要在VisualVM 里亲自为你的应用程序注册,因为它们全都会自动显示出来。你甚至还可以在导航栏里查看到远程的应用程序。
显示为“未知进程”(pid为5392)的程序是Eclipse
使用VisualVM
VisualVM有很多令人眼前一亮的功能,它能使你:
◆监控应用程序的性能和内存占用情况
◆监控应用程序的线程
◆分析(Profile)应用程序性能和内存分配情况
◆进行线程转储(Thread Dump)或堆转储(Heap Dump)
◆分析核心转储(Core Dump)
◆保存快照以便脱机分析应用程序。
用VisualVM评估IDE
我很想用VisualVM 做点什么,于是我决定,用它来对目前最先进的三个IDE进行评测。为此我特意新安装了 NetBeans 6.5.1 (JavaSE only version) , Eclipse (for Java Developers) 和 IntelliJ IDEA (8.1.2).
测试如下:
◆在VisualVM 中运行内存分析器(Memory Profiler)
◆在IDE中创建一个新的项目
◆创建一个简单的类,这个类只有一个可以打印“Hello World"的main方法
◆保存内存分析结果
◆生成这个应用程序的堆转储(Heap Dump)
◆从VisualVM 的监视视图(Monitor View)里获取信息
◆重新启动IDE,使用CPU分析器(CPU Profiler),在IDE中执行相同的步骤
◆保存CPU分析器(CPU Profiler)的结果
我意识到,CPU和内存评测其实是可以同时进行的,但为了便于下文的解释,我特意将它们分别进行。
我用IntelliJ做测试时,发现只有用我自己的JDK才能启动它,而不能用它自带的。虽然我太不熟悉这个IDE,但我发现当我用JSDK创建新工程时,它必须解析JDK中的文件。
此外,请注意,这些IDE都是我刚刚才下载的默认版本,没有针对Java开发作什么优化处理
堆转储
我发现要对软件进行全面对比时,最好的手段是进行堆转储(Heap Dump)。这在程序运行时,使用VisualVM可以让这项工作变得十分太简单,你随时都可以右键单击那个程序,然后选择 Heap Dump 就可以了。
在个领域我评测的两个指标是:字节总数和类(class)的总数
NetBeans:
◆总的字节数:31,576,772