关于设计模式:Java Singleton与静态-具有真正的性能优势吗?

关于设计模式:Java Singleton与静态-具有真正的性能优势吗?

Java Singleton vs static - is there a real performance benefit?

我正在合并一个CVS分支,其中最大的变化之一是用具有静态初始化块和所有静态方法的抽象类替换Singleton模式发生的任何地方。

这是值得保留的东西,因为它将需要合并很多冲突,对于这种重构我值得考虑的情况是什么?

我们正在Weblogic 8.1(因此是JDK 1.4.2)下运行此应用程序。

对不起,托马斯,让我澄清一下..

HEAD版本具有传统的单例模式(私有构造函数,getInstance()等)

分支版本没有构造函数,是\\'公共抽象类\\',并将对象上的所有方法修改为\\'static \\'。过去在私有构造函数中存在的代码被移到静态块中。

然后更改该类的所有用法,这会导致合并中出现多个冲突。

在某些情况下会进行此更改。


如果需要存储任何状态,我将使用单例,否则将使用静态类。实例化某个东西,即使是单个实例,也没有意义,除非它需要存储一些东西。


从严格的运行时性能angular来看,差异实际上可以忽略不计。两者之间的主要区别在于"静态"生命周期链接到类加载器,而对于单例来说,它是常规实例生命周期。通常最好还是远离ClassLoader业务,这样可以避免一些棘手的问题,尤其是当您尝试重新加载Web应用程序时。


静态对扩展性不利,因为静态方法和字段不能被子类扩展或覆盖。

对于单元测试也很不利。在单元测试中,由于无法控制类加载器,因此无法避免其他测试的副作用蔓延。在一个单元测试中初始化的静态字段将在另一个单元测试中可见,或者更糟的是,同时运行测试将产生不可预测的结果。

当少量使用时,Singleton通常是可以的。我更喜欢使用DI框架,并让它为我管理实例(可能在Guice中的不同范围内)。


根据我的经验,唯一重要的是在单元测试中哪个更容易模拟。我一直觉得Singleton更容易和自然地嘲笑出来。如果您的组织允许您使用JMockit,则没关系,因为您可以克服这些问题。


如果我的原始帖子是正确的理解,并且Sun所链接的讨论是准确的(我认为可能是正确的),那么我认为您必须在清晰度和性能之间进行权衡。

问自己以下问题:

  • Singleton对象是否使我正在做的事情更清楚?
  • 我需要一个对象来执行此任务还是更适合静态方法?
  • 我是否需要不使用Singleton即可获得的性能?

  • 编写一些代码来衡量性能。答案将取决于JVM(Sun的JDK的性能可能不同于JRockit)以及VM标记您的应用程序使用的。


    此讨论有帮助吗? (我不知道链接到另一个编程论坛是否是忌讳的,但我宁愿不只是引用整个讨论=))

    Sun关于此主题的讨论

    该裁决似乎是,尽管从技术上讲静态方法更有效,但在大多数情况下它并没有太大的区别。


    推荐阅读

      wps如何合并章节

      wps如何合并章节,WPS教程,1.WPS表格如何实现单元格合并?WPS 表格在新版本中增加了“合并单元格”系列按钮,同时配有下拉菜单和快捷键。新增

      提高3A四核羿龙II游戏配置的性能

      提高3A四核羿龙II游戏配置的性能,,以节能环保为主题的IT产业,目前3A低端平台处理器、主板芯片组、独立开发卡性能突出,特别是在与AMD的处理

      优化PostgreSQL中的批量更新性能

      优化PostgreSQL中的批量更新性能,数据,表格,在Ubuntu 12.04上使用PG 9.1. 我们目前需要24小时才能运行大量UPDATE数据库上的语句,其形式

      诺基亚威图性能好到哪里

      诺基亚威图性能好到哪里,诺基亚,手机,诺基亚威图性能好到哪里这是一部以前列出的手机。即使当时配置不高,该品牌的手机也不依赖于该功能吸

      魅蓝note6性能参数有哪些

      魅蓝note6性能参数有哪些,摄像头,蓝牙,魅蓝note6性能参数有哪些魅力蓝色Note6最好拍照。电池寿命更长。蓝色Note6使用高通 snapdragon 625

      国产电脑cpu测试|国产CPU性能

      国产电脑cpu测试|国产CPU性能,,国产CPU性能天玑9000答: 天玑9000更厉害。因为天玑9000是 最新发布的cpu,也是现在的天花板。而麒麟9000是 2

      主流电脑cpu性能分析|cpu性能对比表

      主流电脑cpu性能分析|cpu性能对比表,,1. cpu性能对比表一、参数对比1、r7 5800H:制程工艺为7nm,主频3.2GHz,睿频4.4GHz,线程数是8核16线程,45W

      新老酷睿i3性能对比试验i34130和i33220

      新老酷睿i3性能对比试验i34130和i33220,,新的英特尔酷睿i3-4130 Haswell处理器架构已经推出了很长一段时间,虽然市场的时间还不长,已经成为