嗨:我有一个多线程的Java程序。有很多单身人士。我想知道singleton是否会降低多线程程序的性能,特别是吞吐量。一些Singleton只是一个单一的对象,一些单例是并发的Hashmap和/或原子整数。单身和性能
Q
单身和性能
3
A
回答
8
如果你的单身人士是不可变的,那么他们不会导致性能下降。然而,正如你所说,如果在你的代码中有并发()数据结构单例,那么与非并发数据结构相比,你的性能会下降。
基本上,将对象视为数据持有者,并在其上使用一些方法,现在认为代码中有链接列表,并且许多线程正在同时运行并修改该链接列表。类似于这个例子,你的单例数据结构是数据持有者,许多线程正试图更新它,系统与锁保持一致。长期以来,我并不认为在并发系统中使用单例将会使性能发生显着变化,除非他们持有由多个线程更新的数据结构。
2
如果您在任何对象上进行同步,则所有线程必须等待才能在执行同步代码块之前获取该对象的锁定。其他线程将排队,等待锁被释放。通过推论,在单例实例或单例类上同步将导致性能下降。用简单的话来说,性能的下降是锁定粒度的一个因素;如果你在一个有n个方法的单例上进行同步,所有线程将不得不等待一个锁,即使他们试图执行n个不同的方法。
如果可以,请重新设计您的应用程序,以免在性能热点中的单身人士身上同步。鉴于您正在使用专为并发访问而设计的类,这可能不成问题。这比试图减少对单例的锁争用要好得多。另一方面,如果你根本不同步单身人士(有意,因为没有共享数据),那么使用单身人士不会导致性能下降。
0
具有单例的唯一开销是同步开销,因为单例对象通常具有状态。如果他们没有状态,它就像任何其他的java方法。
相关问题
- 1. 可达性和单身
- 2. 性能:asp.net缓存与单身人士
- 3. 单身职能
- 4. 不能让单身的JSON和AFNetworking 3
- 5. 身份插入 - 性能
- 6. 单身属性的KVO?
- 7. 单身和可可
- 8. 单身和ASP.NET MVC
- 9. 角ng重复和表单性能
- 10. 移动和HTML清单缓存性能
- 11. 如何缓存和得到扩展身份,ASPUSER性能在ASP身份2.2
- 12. SQL Express 2005查询和SQL本身性能调谐
- 13. 单身人士和常量
- 14. 阿卡和单身演员
- 15. AFNetworking和单身人士
- 16. 单身人士和范围
- 17. 单身人士和DbSimple
- 18. 单身人士和例外
- 19. JQuery身高和单位
- 20. 单身人士和线程
- 21. 没有身份验证的MySQL性能
- 22. MySQL的性能加入上表本身
- 23. 本身的表格连接 - 性能
- 24. 狮身人面像更新性能
- 25. 单声道性能
- 26. 单身属性变量发布和访问
- 27. PDO和性能
- 28. OSGi和性能?
- 29. LINQ和性能
- 30. Ninject和性能