0

在 Java 中对非原始静态数据使用 final 修饰符是否有任何性能提升?

例如:

static final Thread t2 = new Thread(new Thread_2());

相对:

static Thread t2 = new Thread(new Thread_2());

我的意思是,原语的静态 final 定义了一个真正的常量并且可以很好地使用,因为它的值在编译时是已知的,但是在这种非原始情况下使用 final 可以触发任何优化吗?

在这种情况下使用 final 有什么作用还是浪费?

请不要在风格方面/良好实践的答案,但仅在性能方面。

4

2 回答 2

3

如果 JVM 知道一个值永远不会改变(例如,禁用空检查),它可以进行一些优化,因此它会带来一些小的性能提升。然而,在几乎所有情况下,这种增益都太小而无法注意到或担心。我对您的程序了解不多,但我想花时间制作变量final会更好地用于开发更有效的算法。

于 2013-05-09T00:25:19.983 回答
2

虽然性能提升可能很小,并且一些static final值将嵌入到使用它们的类中,但在我看来,最大的好处是编译器强制执行值不变的意图和设计——也就是说,收益归开发者所有。

在我看来,骨架/框架代码应该在各个方面都是最好的,不仅是性能,而且在风格上也是如此。

我鼓励您将所有内容声明为 final ,除非它确实需要是可变的 - 也就是说,默认情况下事物是 final 的,除非需要另外设置。

于 2013-05-09T01:03:24.493 回答