2011-10-22 25 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(插座或網絡),並沒有理想的系統調用都和鎖定時間將是亞微秒簡單的任務。