我正在开发一个简单文本标记Java库,除了其他要求之外,它应该是快速的。
为此目的,我做了一些分析,但结果给了我更糟的数字,然后在非配置文件模式下运行时被测量。
因此,我的问题是-分析有多可靠?,这仅仅提供了方法所花费时间的信息比率吗?这是否考虑到JIT编译器,还是只解释了分析模式?我使用NetBeans Profiler和SunJDK1.6。
谢谢。
发布于 2010-01-17 15:37:50
在运行分析时,您总是会受到性能损失,因为某些东西必须测量方法的开始/停止时间,跟踪堆的对象(用于内存分析),因此存在管理开销。
但是,它将为您提供明确的指针,以找出瓶颈所在。我倾向于寻找花费最多累积时间的方法,并检查是否可以进行优化。确定方法是否不必要地被调用也是有用的。
对于非常小的方法,只需一点点盐就可以得到概要结果,有时测量过程可能比方法本身所用的时间更长,并且会使结果倾斜(通常称为小的方法可能会对性能产生更大的影响)。
希望这能有所帮助。
发布于 2010-01-17 15:36:22
由于检测分析代码的平均运行速度将慢于非配置文件代码。然而,测量速度并不是轮廓测量的目的。
分析输出将指向瓶颈、线程花费更多时间的地方、行为比预期更糟糕的代码或可能的内存泄漏。
您可以使用这些提示来改进上述方法和配置文件,直到您对结果满意为止。
分析器不会是一种编码风格的解决方案,它比最优的速度慢x%,但是,您仍然需要花时间微调代码中那些比其他代码更经常使用的部分。
发布于 2010-01-17 16:01:57
我并不惊讶于这样一个事实,即当您将应用程序分析为检测java代码时,其执行速度通常会减慢,从而得到最糟糕的结果。实际上,分析上的维基百科页面很好地捕捉到了这一点,该页面提到,工具可以导致程序性能的变化,可能导致不准确的结果和http://en.wikipedia.org/wiki/Heisenbug (由于观测器效应:观察者仅仅通过观察它的行为就会影响他们所观察到的内容)。
话虽如此,如果你想测量速度,我认为你没有使用正确的工具。分析器用于查找应用程序中的瓶颈(因此,您并不真正关心总体影响)。但是,如果您想对库进行基准测试,则应该使用性能测试工具(例如,类似于JMeter的工具),该工具可以为您提供每个调用的平均执行时间。使用正确的工具,您将得到更好和更可靠的结果。
https://stackoverflow.com/questions/2081417
复制相似问题