小王你这个功能怎么写的,性能那么低啊?去优化一下吧,要求达到20TPS……
这貌似是很多开发人员会遇到的问题吧,但是如何优化呢?一行一行的看代码,加System.out.println(time)这也太老土了吧!今天给大家推荐几款性能优化中比较好用的性能监控工具。
Profiler4j是用于分析Java程序CPU使用情况的开源工具。你可以定义规则来分析选择哪一个包,类和方法。在改变这些规则时不需要重启你的应用程序。易于使用只要添一个JVM参数到你的应用程序中。纯Java实现,没有依赖任何本地类库。它由两部分组成:一个分析代理与你的应用程序运行在同一个JVM中。另一个是一个远程控制台能够连接到远程代码并允许用户查看分析数据和改变设置。
项目主页:http://profiler4j.sourceforge.net
BTrace
BTrace是一个实时监控工具,使用了java agent 和jvm attach技术,可以在不停机的情况下实时监控线上程序的运行情况。并且做到最少的侵入,占用最少的系统资源。 Btrace基于动态字节码修改技术(Hotswap)来实现运行时java程序的跟踪和替换。Btrace的脚本是用纯java编写的,基于一套官方提供的annotation,使跟踪逻辑实现起来非常简单。简单来说,就是能在不改动当前程序的情况下,运行时的去监控Java程序的执行状况,例如可以做到内存状况的监控、方法调用的监控等等。
项目主页:http://kenai.com/projects/btrace
org.inmemprofiler
org.inmemprofiler是一个基于Instrumentation的内存Profiler。
利用 Java 代码,即 java.lang.instrument 做动态 Instrumentation 是 Java SE 5 的新特性,它把 Java 的 instrument 功能从本地代码中解放出来,使之可以用 Java 代码的方式解决问题。使用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的定义。有了这样的功能,开发者就可以实现更为灵活的运行时虚拟机监控和 Java 类操作了,这样的特性实际上提供了一种虚拟机级别支持的 AOP 实现方式,使得开发者无需对 JDK 做任何升级和改动,就可以实现某些 AOP 的功能了。
在 Java SE 6 里面,instrumentation 包被赋予了更强大的功能:启动后的 instrument、本地代码(native code)instrument,以及动态改变 classpath 等等。这些改变,意味着 Java 具有了更强的动态控制、解释能力,它使得 Java 语言变得更加灵活多变。
项目主页:https://github.com/mchr3k/org.inmemprofiler
JETM
JETM是一个Java程序执行时间测量工具。
帮助开发人员定位Java程序中的性能问题。
[main] INFO etm-raw-data - measurementPoint=<Testpoint A>, parent=<>, transactionTime=<1.850>, recordingTime=<1148251400451> [main] INFO etm-raw-data - measurementPoint=<Testpoint B>, parent=<Testpoint A>, transactionTime=<0.667>, recordingTime=<1148251400453> [main] INFO etm-raw-data - measurementPoint=<Testpoint A>, parent=<>, transactionTime=<1.730>, recordingTime=<1148251400453> [main] INFO etm-raw-data - measurementPoint=<Testpoint A>, parent=<>, transactionTime=<1.680>, recordingTime=<1148251400454> [main] INFO etm-raw-data - measurementPoint=<Testpoint C>, parent=<Testpoint B>, transactionTime=<0.230>, recordingTime=<1148251400454> [main] INFO etm-raw-data - measurementPoint=<Testpoint A>, parent=<>, transactionTime=<1.567>, recordingTime=<1148251400459>
项目主页:http://jetm.void.fm/