Java Singleton vs static - 是否有真正的性能优势?

2022-09-03 08:47:41

我正在合并一个 CVS 分支,其中一个较大的变化是将 Singleton 模式替换为具有静态初始化块和所有静态方法的抽象类。

这是值得保留的东西吗,因为它需要合并很多冲突,我会考虑什么样的情况才能使这种重构值得?

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


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

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

分支版本没有构造函数,是一个“公共抽象类”,并将对象上的所有方法修改为“静态”。专用构造函数中曾经存在的代码将移动到静态块中。

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

在少数情况下,进行了此更改。


答案 1

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


答案 2

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


推荐