电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java 為什么要避免使用finalizer和Cleaner

瀏覽:40日期:2022-08-15 09:03:11

java9之前finalizer,java9使用cleaner代替了finalizer。相比finalizer,cleaner(它存在于一個獨立類Cleaner中,需要時候注入到對應類中即可)不會污染API而且cleaner有類庫可以控制它的線程(它兩都在后臺線程中執行)。

避免使用的原因:行為的不穩定性

它兩都不能保證及時的執行,從方法可達到(對象被置空了)開始到最終的執行,時間是任意長的。所以千萬不要使用他們來更新重要的持久狀態,如釋放流資源、分布式鎖等。

System.gc和System.runFinalization這兩個方法會增加finalizer和cleaner被執行的機會,但是不保證一定會執行。唯一能保證它兩會被執行的兩個方法(System.runFinalizersOnExit和Runtime.runFinalizersOnExit)有致命的缺陷,已經被廢除很久了。

移植性問題

不同的JVM堆垃圾回收的算法不同,如果程序依賴finalizer或者cleaner被執行的時間點,那么程序的表現可能截然不同

性能問題

finalizer和cleaner有一個非常嚴重的性能損耗。

安全問題 finalizer中如果出現異常會導致線程終止,但是不會打印線程軌跡甚至警告都不會打印出來,而且使正在銷毀的對象處于破壞狀態,另一個線程如果使用這個破壞狀態的對象會出現行為的不確定性。cleaner沒有這個問題。 finalizer攻擊:利于finalizer方法,構建出惡意子類對象,非法調用父類方法。final類不會被構建惡意子類,所以不會遭到finalizer攻擊。對于非final類,重寫一個空的finalizer方法并用final修飾來防止finalizer攻擊。

//構建對象使用后不能再次被實例化public class Demo{ private boolean flag = true; //防止實例化 public Demo() { if (flag){ throw new RuntimeException('不準許再次創建對象'); } } public void say() { System.out.println('DemoUtils.say'); }}//構建非法子類class Demo2 extends Demo{ public Demo2(){} //構建finalizer攻擊 @Override protected void finalize() throws Throwable { //會調用父類方法 this.say(); System.exit(0); } public static void main(String[] args) throws InterruptedException { try { //創建子類對象必然會調用父類構造,所以會發生異常 //但是在gc中還是執行了父類的方法 Demo demo = new Demo2(); demo.say(); } catch (Exception e) { System.out.println(e); } System.gc(); //給垃圾回收提供時間 Thread.sleep(5000); }}//運行結果java.lang.RuntimeException: 不準許再次創建對象DemoUtils.say兩個用處:安全網

當資源的所有者忘記使用close方法的時候,finalizer和cleaner可以充當安全網,雖然不能保證及時的釋放資源,但是遲一點釋放總比永遠不釋放要好。要使用這樣的安全網就要認證的考慮清除是否值得付出這樣的代價。所以Java一些AutoCloseable實現中都添加了安全網。

這是FileOutputStream的源碼

Java 為什么要避免使用finalizer和Cleaner

回收本地對等體對象

本地對等體:java操作native方法其實是委托給一個本地對等體對象,使用完成后java對象會被GC回收,但是這個對等體對象不是java對象不會被會GC回收。如果這個對象性能可以接受,而且沒有需要及時釋放的資源那么就可以使用finalizer或者cleaner進行回收了。但是如果這個對等體性能無法接受且擁有必須被及時終止的資源,那么就需要提供一個close方法了。

以上就是Java 為什么要避免使用finalizer和Cleaner的詳細內容,更多關于Java 避免使用finalizer和Cleaner的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | 三佳互联一站式网站建设服务|网站开发|网站设计|网站搭建服务商 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | uv固化机-丝印uv机-工业烤箱-五金蚀刻机-分拣输送机 - 保定市丰辉机械设备制造有限公司 | 通风气楼_通风天窗_屋顶风机-山东美创通风设备有限公司 | 北京浩云律师事务所-企业法律顾问_破产清算等公司法律服务 | 首页-恒温恒湿试验箱_恒温恒湿箱_高低温试验箱_高低温交变湿热试验箱_苏州正合 | 120kv/2mA直流高压发生器-60kv/2mA-30kva/50kv工频耐压试验装置-旭明电工 | SMN-1/SMN-A ABB抽屉开关柜触头夹紧力检测仪-SMN-B/SMN-C-上海徐吉 | 长江船运_国内海运_内贸船运_大件海运|运输_船舶运输价格_钢材船运_内河运输_风电甲板船_游艇运输_航运货代电话_上海交航船运 | 冰雕-冰雪世界-大型冰雕展制作公司-赛北冰雕官网 | 酒吧霸屏软件_酒吧霸屏系统,酒吧微上墙,夜场霸屏软件,酒吧点歌软件,酒吧互动游戏,酒吧大屏幕软件系统下载 | 福州甲醛检测-福建室内空气检测_环境检测_水质检测-福建中凯检测技术有限公司 | 环氧铁红防锈漆_环氧漆_无溶剂环氧涂料_环氧防腐漆-华川涂料 | 筛分机|振动筛分机|气流筛分机|筛分机厂家-新乡市大汉振动机械有限公司 | 云阳人才网_云阳招聘网_云阳人才市场_云阳人事人才网_云阳人家招聘网_云阳最新招聘信息 | 361°官方网站| 防潮防水通风密闭门源头实力厂家 - 北京酷思帝克门窗 | 风淋室生产厂家报价_传递窗|送风口|臭氧机|FFU-山东盛之源净化设备 | 矿用履带式平板车|探水钻机|气动架柱式钻机|架柱式液压回转钻机|履带式钻机-启睿探水钻机厂家 | 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | LHH药品稳定性试验箱-BPS系列恒温恒湿箱-意大利超低温冰箱-上海一恒科学仪器有限公司 | 防爆鼓风机-全风-宏丰鼓风机-上海梁瑾机电设备有限公司 | 油罐车_加油机_加油卷盘_加油机卷盘_罐车人孔盖_各类球阀_海底阀等车用配件厂家-湖北华特专用设备有限公司 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 蒸汽吸附分析仪-进口水分活度仪|康宝百科 | 科研ELISA试剂盒,酶联免疫检测试剂盒,昆虫_植物ELISA酶免试剂盒-上海仁捷生物科技有限公司 | LOGO设计_品牌设计_VI设计 - 特创易 | 东莞ERP软件_广州云ERP_中山ERP_台湾工厂erp系统-广东顺景软件科技有限公司 | 飞扬动力官网-广告公司管理软件,广告公司管理系统,喷绘写真条幅制作管理软件,广告公司ERP系统 | 水厂自动化-水厂控制系统-泵站自动化|控制系统-闸门自动化控制-济南华通中控科技有限公司 | 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 齿轮减速马达一体式_蜗轮蜗杆减速机配电机-德国BOSERL齿轮减速电动机生产厂家 | 深圳市索富通实业有限公司-可燃气体报警器 | 可燃气体探测器 | 气体检测仪 | 立式硫化罐-劳保用品硫化罐-厂家直销-山东鑫泰鑫硫化罐厂家 | 彼得逊采泥器-定深式采泥器-电动土壤采样器-土壤样品风干机-常州索奥仪器制造有限公司 | 硅胶布|电磁炉垫片|特氟龙胶带-江苏浩天复合材料有限公司 | 重庆磨床过滤机,重庆纸带过滤机,机床伸缩钣金,重庆机床钣金护罩-重庆达鸿兴精密机械制造有限公司 | 基本型顶空进样器-全自动热脱附解吸仪价格-AutoHS全模式-成都科林分析技术有限公司 | 电子巡更系统-巡检管理系统-智能巡检【金万码】 | 长沙发电机-湖南发电机-柴油发电机供应厂家-长沙明邦智能科技 | 威海防火彩钢板,威海岩棉复合板,威海彩钢瓦-文登区九龙岩棉复合板厂 |