嗨:我有一個多線程的Java程序。有很多單身人士。我想知道singleton是否會降低多線程程序的性能,特別是吞吐量。一些Singleton只是一個單一的對象,一些單例是併發的Hashmap和/或原子整數。單身和性能
Q
單身和性能
3
A
回答
8
如果你的單身人士是不可變的,那麼他們不會導致性能下降。然而,正如你所說,如果在你的代碼中有併發()數據結構單例,那麼與非併發數據結構相比,你的性能會下降。
基本上,將對象視爲數據持有者,並在其上使用一些方法,現在認爲代碼中有鏈接列表,並且許多線程正在同時運行並修改該鏈接列表。類似於這個例子,你的單例數據結構是數據持有者,許多線程正試圖更新它,系統與鎖保持一致。長期以來,我並不認爲在併發系統中使用單例將會使性能發生顯着變化,除非他們持有由多個線程更新的數據結構。
2
如果您在任何對象上進行同步,則所有線程必須等待才能在執行同步代碼塊之前獲取該對象的鎖定。其他線程將排隊,等待鎖被釋放。通過推論,在單例實例或單例類上同步將導致性能下降。用簡單的話來說,性能的下降是鎖定粒度的一個因素;如果你在一個有n個方法的單例上進行同步,所有線程將不得不等待一個鎖,即使他們試圖執行n個不同的方法。
如果可以,請重新設計您的應用程序,以免在性能熱點中的單身人士身上同步。鑑於您正在使用專爲併發訪問而設計的類,這可能不成問題。這比試圖減少對單例的鎖爭用要好得多。另一方面,如果你根本不同步單身人士(有意,因爲沒有共享數據),那麼使用單身人士不會導致性能下降。
0
具有單例的唯一開銷是同步開銷,因爲單例對象通常具有狀態。如果他們沒有狀態,它就像任何其他的java方法。
相關問題
- 1. 可達性和單身
- 2. 性能:asp.net緩存與單身人士
- 3. 單身職能
- 4. 保留和一個「單身」屬性?
- 5. 不能讓單身的JSON和AFNetworking 3
- 6. 身份插入 - 性能
- 7. 單身屬性的KVO?
- 8. 單身和可可
- 9. 單身和ASP.NET MVC
- 10. 移動和HTML清單緩存性能
- 11. 角ng重複和表單性能
- 12. jquery UI選擇菜單和knockout.js性能
- 13. Postgres的性能改進和清單
- 14. opengl單色和多色性能問題
- 15. 如何緩存和得到擴展身份,ASPUSER性能在ASP身份2.2
- 16. 獅身人面像和PHP集成。低性能
- 17. 循環語句性能和預分配循環語句本身
- 18. SQL Express 2005查詢和SQL本身性能調諧
- 19. 單身和多線程
- 20. JQuery身高和單位
- 21. 單身人士和範圍
- 22. 阿卡和單身演員
- 23. AFNetworking和單身人士
- 24. 單身人士和DbSimple
- 25. 單身人士和例外
- 26. 單身人士和線程
- 27. 單身人士和常量
- 28. 本身的表格連接 - 性能
- 29. MySQL的性能加入上表本身
- 30. 沒有身份驗證的MySQL性能