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

时间:2013-05-09 00:22:32

标签: java performance final primitive compiler-theory

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

例如:

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

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

我的意思是,对于基元的静态final定义了一个真正的常量并且很好用,在某种意义上它的值在编译时是已知的,但是在这种非原始情况下可以使用final触发任何优化吗? / p>

在这种情况下使用final是做某事还是浪费?

不是风格/好的做法,请回答,但仅限于表现。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

虽然可以获得较小的性能提升,并且某些static final值将嵌入到使用它们的类中,但在我看来,最大的好处是编译器强制执行intent&设计价值不会改变 - 也就是说,增益是给开发者的。

按照我的思维方式,骨架/框架代码应该是各方面最好的,不仅仅是性能,还有风格。

我鼓励你宣布一切都是最终的,除非它真的需要是可变的 - 也就是说,默认情况下是最终的,除非另有要求。