我经常介绍我的团队的高性能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密集型的模拟:具体来说,有大量小但计算成本高的函数调用永远存在制作。在我们的情况下,考虑到函数调用的数量很多,优化成本可能很高,但对其他函数来说则不那么好?
答案 0 :(得分:2)
分析Java程序
大约10% - 30%取决于你在做什么。
或者只是为了分析而保持一个端口打开
可能几乎没有开销。
是内存轻但CPU密集型的模拟:具体来说,有大量小但计算量很大的函数调用是永久性的。
我会认真考虑FlightRecorder(来自Java 7,Java 8更好)。这具有更低的开销,并且具有更多的CPU记录细节。在Java 8中,您可以在不添加任何命令行参数的情况下运行它。