《深入理解Java虚拟机》读后感 -- final

**

粗读《深入理解Java虚拟机》之后,对final关键字的思考

**

最近在读《深入理解Java虚拟机》之后产生的一些思考,故写这边文章表达自己的一些看法。笔者在去年曾把《java编程思想》略微学习了一遍,对书中的final关键字的***性能较高***的表述,产生了一定的印象。

在读《深入理解Java虚拟机》之前,对final的基本理解是:
1.final修饰的变量是不可变的,有变量升华为常量;
2.final修饰的方法是不可被重写的;
3.final修饰的对象是在堆内的位置是不可变的;
4.final和static修饰的静态常量是在方法区中“栈上分配”的,被全局共享;
5.final修饰的类是不可以被继承的;

在读《深入理解Java虚拟机》之后。对final的另外认识是,
1.final修饰的变量是不可变的,无论是在私有的工作内存,还是主内存中,final修饰的变量不存在缓存一致性问题;所以虚拟机在编译的时候,不需要对final修饰的变量进行校验,减少了校验时间;
2.对于final所修饰的方法,虚拟机在编译的时候可以直接使用“方法内联”,减少了不必要的方法调用成本,减少了栈帧的建立,减少了方法的弹栈和压栈的过程。

虽然暴力反射可以修改常量,但是大多数情况下,常量还是安全的。

文笔有限,仅作观后感而写。

你可能感兴趣的:(java)