在Java中对非原始静态数据使用final修饰符是否有任何性能提升?
例如:
static final Thread t2 = new Thread(new Thread_2());
与
static Thread t2 = new Thread(new Thread_2());
我的意思是,对于基元的静态final定义了一个真正的常量并且很好用,在某种意义上它的值在编译时是已知的,但是在这种非原始情况下可以使用final触发任何优化吗? / p>
在这种情况下使用final是做某事还是浪费?
不是风格/好的做法,请回答,但仅限于表现。
答案 0 :(得分:3)
如果JVM知道值永远不会改变(例如,禁用空检查),JVM可以进行一些优化,因此它会带来一些小的性能提升。但是,在几乎所有情况中,这种收益太小而无法注意或担心。我对你的程序了解不多,但我猜想花时间制作变量final
会更好地花在开发更有效的算法上。
答案 1 :(得分:2)
虽然可以获得较小的性能提升,并且某些static final
值将嵌入到使用它们的类中,但在我看来,最大的好处是编译器强制执行intent&设计价值不会改变 - 也就是说,增益是给开发者的。
按照我的思维方式,骨架/框架代码应该是各方面最好的,不仅仅是性能,还有风格。
我鼓励你宣布一切都是最终的,除非它真的需要是可变的 - 也就是说,默认情况下是最终的,除非另有要求。