2011-10-22 64 views
5

我有一个Java应用程序,这是不是如我所料速度不够快。我已经做了很多关于如何改进它的搜索,但并不幸运。如何通过Java中的“同步”代码知道多少时间成本?

现在我检查代码,发现里面有很多的代码​​关键字。我在想如果他们花太多时间等待锁定。

是否有任何工具来检查他们多少时间成本?因此,如果他们花费太多时间,我可以找到更好的解决方案。

+2

如果'synchronization'在更大的块超过必要,他们可能会导致性能降低因不必要的等待完成。 – Cratylus

+1

你有没有尝试过任何分析工具? – xappymah

回答

4

我打算建议jvisualvm的线程监视器功能,并在寻找屏幕截图时,遇到此博客文章:Detecting Thread Contentions。它不仅仅是一个截图:)。

但在这里它是无论如何: thread contention in jvisualvm (图片来源:上述博客文章)

1

一个优秀的分析器将能够找出那些造成缓慢它可能不会在所有涉及到同步的方法。同时查看profiler中线程的状态可能会揭示是否由于同步而导致等待时间过长。无论如何,除非无故使用synchronized关键字,否则为了提高性能可能会将其删除。

+0

如果不需要'sunchronization',则会导致性能损失。如果需要'同步',我应该做到适当的粒度级别ii)如果它被移除,它不会适得其反 - 它会变得一团糟 – Cratylus

+0

user384706我同意。 OP需要理解为什么代码是同步的,只有这样才能采取适当的补救措施。 –

1

同步的开销通常很小。问题通常是你在同步块中做什么。确保你没有做任何IO(插座或网络),并没有理想的系统调用都和锁定时间将是亚微秒简单的任务。