final
- final可以用来修饰类、方法、变量,修饰对象不同所代表的意义也不同
- 修饰类则代表该类不可继承扩展
- 修饰方法则代表该方法不可重写
- 修饰变量则代表该变量某种程度不可更改。为什么说是某种程度呢,因为这需要根据变量的类型来区分
- 如果修饰的变量是基本类型,则该变量赋值一次之后就无法修改,这是final就是不可变的标志
- 如果修饰的变量是引用类型,那么该变量赋值一次之后,就无法修改该变量的引用,但是该引用对象的属性还是可以更改的,比较常见的就是变量引用了一个
List
,虽说用了final修饰,但是依然可以对该List
的元素进行各种操作
- 将变量或参数使用final修饰可以清楚的避免意外赋值导致的编码错误
- 因为final修饰变量产生了某种程度的不可变的特性,所以它可以保护只读数据,因此在并发编程中使用final修饰变量有利于减少额外的同步开销,也可以省去一些防御性拷贝必要,从而提升性能
finally
finally是java保证重点代码一定要被执行的一种机制。我们可以使用try-finally
或try-catch-finally
来进行类型关闭JDBC链接、保证unlock锁等操作
finalize
finalize 是基础类java.lang.Object
的一个方法,它的作用是保证对象在被垃圾收集器收集前完成特定资源的回收。finalize机制现在已经不推荐使用,并且在JDK9开始被标记为deprecated。
如果调用了finalize方法,则会导致该对象称为“特殊公民”,JVM需要对它进行额外的处理。这样反而导致了finalize成为了快速回收的阻碍者,它可能导致你的对象经过多个垃圾收集周期才能被回收。
在实践中因为finalize拖慢垃圾收集,导致大量对象堆积,也是一种典型的导致OOM的原因。
因为我们要确保回收资源就是因为资源都是有限的,垃圾收集的时间不可预测,可能会极大加剧资源占用。所以对于消耗非常高频的资源,千万不要指望finalize去承担资源释放的职责。
资源用完立刻显示释放,或者利用资源池尽量重用
原创文章,转载请出处注明。
下面是我的个人公众号,欢迎关注交流