gpt4 book ai didi

java - Singleton/Static 会影响多线程 Java 应用程序的性能吗?

转载 作者:行者123 更新时间:2023-12-01 17:23:30 25 4
gpt4 key购买 nike

使用单例/静态是否会减慢多线程应用程序(在多核系统上运行)?我正在运行一个在 8 核机器上创建 6 个线程的应用程序。最初,一些单例对象在所有线程之间共享。而且我没有获得从单线程模型到多线程模型的预期性能提升。之后,我更改了代码,这样就不存在单例或静态(即尝试不在线程之间共享任何内容),并且我的性能提升了大约 6 倍。有人可以解释一下这种行为吗?

最佳答案

  1. static 绝对与速度变慢无关。事实上,静态字段是所有访问中最快的。

  2. 单例本身也不是问题。您可能有延迟初始化的单例,其访问器方法是同步的。在这种情况下,您的代码只是使用了错误的习惯用法。 static 单例的首选习惯用法是 lazy initialization holder class ,它会产生零惩罚并且完全线程安全。

  3. 您在单例上调用的方法也可能需要同步。通常,如果我们使用可变单例,那是因为我们别无选择,只能使用它们。如果您确实有这样的选择,那么请务必避免使用单例。

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

  1. 共享尽可能少的可变状态。变异需要相互排斥并损害性能;

  2. 共享尽可能多的不可变状态。这将减少 CPU 缓存未命中并提高性能。

关于java - Singleton/Static 会影响多线程 Java 应用程序的性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16830271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com