final对程序执行性能有影响吗?
还是说只是编译器的检查而已
-
1.final修饰的全局变量会被当做常量来使用,放入Constant pool中。被final修饰的局部变量会直接被优化成常量,字节码直接存储运算后的常量。由于Java规范规定,final修饰的方法不能被重写,所以jvm实现中invokevirtual在调用final修饰的方法(final方法是非虚方法)时会省去对方法接收者的多态选择,从而提高一点性能。知道final修饰的类不能被继承,至于这一点有什么性能优势就不清楚了。
2.final有两种用法,对基本类型,和对普通对象,用基本类型的时候编译期就可以带入常量对可以执行的运算式进行计算,减少运行时负担。对于对象来用的时候,是所指向的引用不可以改变,引用的对像本身并不是不可变的,所以并不影响程序运行时的性能
-
往往看似平静的表面,内部却是异常汹涌澎湃,大神高见,小生拜读。传送门在此: JVM对于声明为final的局部变量(local var)做了哪些性能优化? - Java 个人对final的一点小认识,不知对错:final修饰的全局变量会被当做常量来使用,放入Constant pool中。被final修饰的局部变量会直接被优化成常量,字节码直接存储运算后的常量。由于Java规范规定,final修饰的方法不能被重写,所以jvm实现中invokevirtual在调用final修饰的方法(final方法是非虚方法)时会省去对方法接收者的多态选择,从而提高一点性能。知道final修饰的类不能被继承,至于这一点有什么性能优势就不清楚了。
-
final有两种用法,对基本类型,和对普通对象,用基本类型的时候编译期就可以带入常量对可以执行的运算式进行计算,减少运行时负担。对于对象来用的时候,是所指向的引用不可以改变,引用的对像本身并不是不可变的,所以并不影响程序运行时的性能。
发表回复