首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单例/静态影响多线程Java应用程序的性能?

单例/静态影响多线程Java应用程序的性能?
EN

Stack Overflow用户
提问于 2013-05-30 07:23:07
回答 1查看 2.1K关注 0票数 0

使用Singleton / Static是否会减慢多线程应用程序(在多核系统上运行)?我正在运行一个应用程序,在8台核心机器上创建6个线程。最初,在所有线程之间共享了一些单例对象。我没有得到预期的性能提升,从单线程到多线程模式。在此之后,我修改了我的代码,使其不存在单例或静态(即试图不在线程之间共享任何内容),并且我的性能提高了大约6次。谁能解释一下你的行为吗?

EN

回答 1

Stack Overflow用户

发布于 2013-05-30 07:37:42

  1. static肯定与经济放缓无关。事实上,静态字段是所有访问中最快的。
  2. 单身人士本身也不是问题。您可能已经惰性地初始化了单例,其访问器方法是同步的。在这种情况下,您的代码ss只是使用错误的成语。static单例选择的成语是http://www.oracle.com/technetwork/articles/javase/bloch-effective-08-qa-140880.html,它带来零惩罚,并且完全线程安全。
  3. 您对单例调用的方法也可能需要同步。通常情况下,如果我们使用的是可变的单子,那是因为我们别无选择,只能使用它们。如果你有这样的选择,那么一定要避免单身。

为了获得最佳性能,请遵守以下简单规则:

  1. 共享尽可能少的可变状态。突变需要互斥,影响性能;
  2. 尽可能多地共享不变的状态。这将减少CPU缓存丢失并提高性能。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16830271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档