`
wengge
  • 浏览: 39468 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

VisualVM监控备忘(2)

阅读更多

内存和CPU评测(Profile)结果

我注意到,当我开始评测(profiling)时,类和方法中的指令执行总是要让我等上好一段时间。尤其是在IDE里,这段时间不算短,不过还算可以接受吧。

内存和CPU评测对这些IDE的意义不是很大。但进行这个分析所带来的一个方便之处就是:你很容易就可以找到程序哪个地方发生了内存泄漏。以下是对这几个IDE的评测结果。

在这些IDE的评测结果中,我们可以看到一些很有趣的几点。例如,NetBeans中用到了大量了byte[] ,而在Eclipse和IntelliJ中就明显少得多了。另外我们还可以看到char[]在所有IDE里均被大量使用了。

◆NetBeans:内存的19.6%

◆Eclipse:内存的31.6%

◆IntelliJ:内存的32.7%

NetBeans 内存分析视图
NetBeans 内存分析视图

Eclipse内存分析视图
Eclipse内存分析视图

IntelliJ IDEA内存分析视图
IntelliJ IDEA内存分析视图

通过CPU评测我们能看出程序的哪个地方耗时最多。在这方面,各个IDE分别把时间用在了不同的方法(method)上,这一点有很大的不同:

◆NetBeans大部分时间花费在org.openide.util.RequestProcessor $ Processor.run()- 58.1 %

◆Eclipse的时间花在java.lang.reflect.Method.invoke()- 约占45.5 %

◆IntelliJ在java.net.SocketInputStream.read()上耗费掉了38.7 %的时间

NetBeans CPU 分析视图
NetBeans CPU 分析视图

EclipseCPU 分析视图
EclipseCPU 分析视图

IntelliJ IDEA CPU 分析视图
IntelliJ IDEA CPU 分析视图

虽然这么一个横向对比不一定能够说明什么问题。但能够看到这些IDE在幕后不同的工作方式,也是一件很有趣的事情。

至此,我不得不认为VisualVM 让这项评测变得相当的简单。我只需要在这些IDE启动之前运行VisualVM,它就能自动发现并挂载随后启动的每个IDE实例,然后就可以在VisualVM里作评测了。

IDE集成

Java开发人员大多都是被IDE惯坏了的,一旦没有顺手的IDE可用就会无所适从。不过不用担心,当前流行的这些IDE都已经有了VisualVM插件,这样你就可以在你最喜欢的IDE里工作了,不用再跟命令行打交道了。

VisualVM在NetBeans里的集成很有意思,它其实已经是NetBeans默认的分析器了。在NetBeans中,它作为一个RCP程序,可以与其它的NetBeans模块一起进行更好地扩展。

Eclipse和 IntelliJ IDEA的集成包可以通过点击这里获取。MyEclipse 7.5也已经集成了VisualVM的插件。作为一个Eclipse开发者,我很感兴趣这是究竟怎么办到的,因为这个工具毕竟是在NetBeans平台基础之上构建的。

与Eclipse的集成

首先,你得下载VisualVM Launcher插件,将它解压到你的Eclipse主目录里。这样当你打开Run Configurations对话框时,就会看到程序启动器选项。默认的启动器是可以在偏好(Preferences)设置里修改的。

在我的设置里,我选择当使用启动器时让VisualVM Launcher运行,其它时候就使用Eclipse默认的程序Launcher。你可以针对你的应用、小程序或者是Eclipse项目修改这些设置。

当使用启动器时让VisualVM Launcher运行

然后你还得指定你所要采用的VisualVM 可执行文件和JDK的路径。

指定你所要采用的VisualVM 可执行文件和JDK的路径

这样与Eclipse的集成就算完成了,它会自动启动一个VisualVM ,你就可以用了。以后可能会有更深度的集成 ,那样的话说不定我就直接可以在IDE里启用它去分析程序了。

扩展VisualVM

如果上面列举的这些功能还不能满足你的需要,那么你还可以编写自己的VisualVM插件。VisualVM提供了许多的API调用入口,如下图所示:

VisualVM提供了许多的API调用入口

主要的一些调用入口有:

◆标签扩展(Tab extension)。默认情况下,VisualVM提供了像“Overview",Monitor,Threads这样的一些标签。你可以自己定制一些类似的标签。此外,这些标签自身也可以扩展,你可以为它们设置二级标签,还可以设置这些标签是对所有VisualVM数据源都可见,还是只针对一些特定的数据源类型。

◆二级标签扩展(Subtab extension)。在上面所说的这些标签里,你可以插入新的标签,当然,这是在标签被设置为可扩展的前提下。可扩展的标签有:"Overview"、"Monitor"、"Threads"、"Heap Dump"和"Host"。当你插入一个新的子标签时,你可以指定它与其它子标签的相对位置关系。子标签也可以设置是对所有VisualVM数据源都可见,还是只针对一些特定的数据源类型。

◆菜单扩展(Menu extension)。一个数据源以及它的子节点,都可以为它们的上下文菜单添加一个或若干个菜单。

◆应用类型扩展(Application type extension)。在默认情况下,除非提供了一个特定的插件,否则在VisualVM里可见的这些应用都是一样的,它们有着同样的图标和标签。在定义了一种应用类型之后,你可以为这种特定的应用再安装一个插件,这样做可以为不同的应用具有不同的图标(比较简单),也可以提供像绘图这样的额外功能。

◆数据源的扩展(Data source extension)。 “应用程序”的数据源只是VisualVM可以监管的一种数据源类型。另一种数据源类型是“主机”数据源,它可让你监控和管理本地的和远程的主机。如果VisualVM的默认配置不能满足你的需求,你可以创建新的数据源类型让它监管。

在VisualVM的官方网站上,有一个关于编写VisualVM插件的详细说明,这份说明浅显易懂,如果你以前有过在NetBeans或者Eclipse上有过开发插件的经历,那就更容易上手了。不仅如此,VisualVM的插件中心里已经有不少现成的插件可用,只需进入“工具”/“插件”就可以看到了。

VisualVM的插件中心

VisualVM 简单易用(相信你已经会用它了),还具备可供扩展的平台,这些都必将使它成为开发者不可或缺的工具。让我印象非常深刻的是,它能够自动挂载运行中的程序,而不用开发者去做注册工作。在理论上,我们甚至还可以在完善和再次启动Java应用程序的时,让它一直在后台运行,这实在是太妙了。

JDK中还藏着一个宝贝,它的名字叫做VisualVM。赶快去下载运行,让它帮你找出程序中的所有不足吧。

分享到:
评论

相关推荐

    tomcat6 单独启动做测试服务器备忘

    在标签中提到的“源码”和“工具”,意味着这个备忘可能还涵盖了如何查看和调试Tomcat源码,以及使用相关工具(如JConsole、VisualVM等)监控Tomcat的运行状态,分析性能和内存使用情况。 总之,这个备忘录是关于...

    Java八股文面经-精炼面试题资料整理(八股文)

    2. 性能监控:使用JConsole、VisualVM等工具进行性能监控。 3. 调优实践:分析内存、CPU、GC日志,找出性能瓶颈并优化。 以上就是Java八股文面经中的主要知识点,通过深入理解和掌握这些内容,Java开发者可以有效...

    java面试题与技巧

    3. 调优工具:掌握JConsole、VisualVM等JVM监控工具的使用。 九、Spring框架 1. 依赖注入:理解DI的概念,以及@Autowired、@Resource等注解的使用。 2. AOP:了解切面编程,包括通知、切点、织入等概念。 3. Spring...

    2015年腾讯Java工程师笔试题.zip

    2. 调优工具:了解JConsole、VisualVM等JVM监控工具的使用,能进行性能分析和调优。 这份笔试题集涵盖了Java程序员必备的核心技能,对于任何希望在Java领域深造或从事Java开发工作的人员来说,都是不可多得的学习...

    java面试题.zip

    4. 调优工具:如JConsole、VisualVM、JProfiler等,用于监控和优化JVM性能。 以上只是Java面试中可能涉及的一部分核心知识点,实际面试可能会更加深入,包括对具体框架(如Spring、MyBatis)的理解和使用,数据库...

    java笔试面试题 比较全

    - 调优:JVM参数设置,性能监控工具(VisualVM、JConsole)。 5. **IO/NIO**: - 流的概念:字节流与字符流,输入流与输出流,缓冲流,转换流。 - NIO(New IO):非阻塞I/O,选择器,通道,缓冲区。 6. **网络...

    java求职常见试题java面试题

    - 性能监控:使用JConsole或VisualVM工具进行性能分析 10. **设计模式**: - 创建型模式:单例、工厂、建造者、原型、代理 - 结构型模式:适配器、装饰器、桥接、组合、外观、享元、代理 - 行为型模式:责任链...

    JAVA面试

    - 调优工具:学习使用VisualVM、JConsole等JVM监控工具进行性能分析。 8. **其他**: - IO流:掌握字节流、字符流、缓冲流、转换流、对象流等。 - 泛型方法与类型擦除:理解泛型方法的声明和使用,了解类型擦除...

    最全 java23种设计模式 Debug模式+内存分析

    - **备忘录模式(Memento)**:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 - **解释器模式(Interpreter)**:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个...

    architect-awesome-java:《后端架构师技术图谱》java实现

    - **行为型模式**:策略、模板方法、观察者、迭代器、职责链、访问者、命令、状态、备忘录。 5. **Spring框架**: - **IoC(控制反转)**:Bean的生命周期、依赖注入、AOP。 - **Spring MVC**:模型-视图-控制器...

Global site tag (gtag.js) - Google Analytics