Java中的性能分析是否会带来性能问题?

时间:2016-05-02 06:04:18

标签: java performance optimization profiling visualvm

我经常介绍我的团队的高性能Java程序,因为低效的功能会导致严重的速度下降。为此,我使用以下Java机器参数保持打开端口以连接Java VisualVM:

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9011 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=localhost

今天令我印象深刻的是:对Java程序进行概要分析 - 或者只是为了分析而保持端口打开 - 进一步降低速度?如果是这样,一些分析方法是否比其他方法更昂贵?什么样的速度降低或开销 - 例如,1%的运行时间,10%的运行时间 - 是正常的预期?

虽然我的问题是针对更广泛的Java用户,但我注意到我们的程序是内存轻但CPU密集型的模拟:具体来说,有大量小但计算成本高的函数调用永远存在制作。在我们的情况下,考虑到函数调用的数量很多,优化成本可能很高,但对其他函数来说则不那么好?

1 个答案:

答案 0 :(得分:2)

  

分析Java程序

大约10% - 30%取决于你在做什么。

  

或者只是为了分析而保持一个端口打开

可能几乎没有开销。

  

是内存轻但CPU密集型的模拟:具体来说,有大量小但计算量很大的函数调用是永久性的。

我会认真考虑FlightRecorder(来自Java 7,Java 8更好)。这具有更低的开销,并且具有更多的CPU记录细节。在Java 8中,您可以在不添加任何命令行参数的情况下运行它。