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

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

Java9垃圾回收方法finalize() 原理解析

瀏覽:5日期:2022-09-05 11:47:48

1: finalize() 方法

finallize() 方法是Object類的方法, 用于在類被GC回收時 做一些處理操作, 但是JVM并不能保證finalize(0 ) 方法一定被執行,由于finalize()方法的調用時機具有不確定性,從一個對象變得不可到達開始,到finalize()方法被執行,所花費的時間這段時間是任意長的。我們并不能依賴finalize()方法能及時的回收占用的資源,可能出現的情況是在我們耗盡資源之前,gc卻仍未觸發,因而通常的做法是提供顯示的close()方法供客戶端手動調用所以一般不建議使用finalize 方法, JDK9 開始已久被廢除

總結缺點

1: finalize機制本身就是存在問題的。

2:finalize機制可能會導致性能問題,死鎖和線程掛起。

3:finalize中的錯誤可能導致內存泄漏;如果不在需要時,也沒有辦法取消垃圾回收;并且沒有指定不同執行finalize對象的執行順序。此外,沒有辦法保證finlize的執行時間。遇到這些情況,對象調用finalize方法只有被無限期延后

- 觀察finalize方法延長類生命周期#

class User{ public static User user = null; @Override protected void finalize() throws Throwable { System.out.println('User-->finalize()'); user = this; } } public class FinalizerTest { public static void main(String[] args) throws InterruptedException { User user = new User(); user = null; System.gc(); Thread.sleep(1000); user = User.user; System.out.println(user != null);//true user = null; System.gc(); Thread.sleep(1000); System.out.println(user != null);//false }}

- JDk9 以前的垃圾回收代碼

public class Finalizer { @Override protected void finalize() throws Throwable { System.out.println('Finalizer-->finalize()'); } public static void main(String[] args) { Finalizer f = new Finalizer(); f = null;System.gc();//手動請求gc }}//輸出 Finalizer-->finalize()

2:Cleaner類的使用

簡介:

在Java9 以后 提供了最終類Clear來代替實現,下面看一下官方例子

package Thread;import java.lang.ref.Cleaner;public class CleaningExample implements AutoCloseable{ private final static Cleaner CLEANER=Cleaner.create();// 創建者模式創建對象 static class State implements Runnable{ // 清理對象 下面說 State() { System.out.println('init'); } @Override public void run() { System.out.println('close'); } } private final State state; private final Cleaner.Cleanable cleanable; // clearner 中的接口 實現唯一的清理方法 public CleaningExample() { super(); this.state = new State(); this.cleanable=CLEANER.register(this, state); // 注冊清理容器中 并且需要清理對象的引用 } @Override public void close() throws Exception { cleanable.clean(); //進行清理操作 } public static void main(String[] args) { while(true) { new CleaningExample(); } }}

上面可以看出:

Cleaner 是最終類 不能被重寫, 內部方法基本以靜態方法提供 掌握例子上面的方法即可

重點指出

static class State implements Runnable

如果直接在類中直接定義實現, 必須提供一個靜態內部類 (強制),否者不能進行回收 原因(: 普通內部類 局部內部類 對于外部類有依賴(引用),無法真正實現內存的釋放 ) 可以選擇直接定義外部類 (較為復雜,需要傳遞清理引用 Cleanable)

什么時候被回收?

* 1. 注冊的Object處于幻象引用狀態

* 2. 顯式調用 clean 方法

實際例子(模版)

public class CleaningExample extends Thread implements AutoCloseable { private final static Cleaner CLEANER = Cleaner.create(); private final State state; private final Cleaner.Cleanable cleanable; public CleaningExample() { this.state = new State(); this.cleanable = CLEANER.register(this, state); } @Override public void close() throws Exception { cleanable.clean(); } @SuppressWarnings('resource') public static void main(String[] args) { while (true) { CleaningExample example = new CleaningExample(); } } // 模擬業務請求 @Override public void run() { System.out.println('數據庫 海量 查詢請求 ................'); } // 清理模版 class State implements Runnable { State() { System.out.println('<--- init --->'); } @Override public void run() { System.out.println('<--- close --->'); } }}

實現基礎

/** * Heads of a CleanableList for each reference type. */ final PhantomCleanable<?> phantomCleanableList; final WeakCleanable<?> weakCleanableList; final SoftCleanable<?> softCleanableList; // The ReferenceQueue of pending cleaning actions final ReferenceQueue<Object> queue;

在CleanerImpl 類進行clearner類的最終實現,看以看到定義的這些個字段,基本上明確了 他的基本原理

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 集装箱箱号识别_自重载重图像识别_铁路车号自动识别_OCR图像识别 | 天津货架厂_穿梭车货架_重型仓储货架_阁楼货架定制-天津钢力仓储货架生产厂家_天津钢力智能仓储装备 | 合肥抖音SEO网站优化-网站建设-网络推广营销公司-百度爱采购-安徽企匠科技 | 无菌水质袋-NASCO食品无菌袋-Whirl-Pak无菌采样袋-深圳市慧普德贸易有限公司 | 青州开防盗门锁-配汽车芯片钥匙-保险箱钥匙-吉祥修锁店 | 工业PH计|工业ph酸度计|在线PH计价格-合肥卓尔仪器仪表有限公司 济南画室培训-美术高考培训-山东艺霖艺术培训画室 | 专业广州网站建设,微信小程序开发,一物一码和NFC应用开发、物联网、外贸商城、定制系统和APP开发【致茂网络】 | 美名宝起名网-在线宝宝、公司、起名平台 | 液压油缸-液压缸厂家价格,液压站系统-山东国立液压制造有限公司 液压油缸生产厂家-山东液压站-济南捷兴液压机电设备有限公司 | 拖鞋定制厂家-品牌拖鞋代加工厂-振扬实业中国高端拖鞋大型制造商 | 棉服定制/厂家/公司_棉袄订做/价格/费用-北京圣达信棉服 | 杭州厂房降温,车间降温设备,车间通风降温,厂房降温方案,杭州嘉友实业爽风品牌 | Maneurop/美优乐压缩机,活塞压缩机,型号规格,技术参数,尺寸图片,价格经销商 | 浙江清风侠环保设备有限公司| 高压分散机(高压细胞破碎仪)百科-北京天恩瀚拓 | 专业深孔加工_东莞深孔钻加工_东莞深孔钻_东莞深孔加工_模具深孔钻加工厂-东莞市超耀实业有限公司 | 学习安徽网| 山东聚盛新型材料有限公司-纳米防腐隔热彩铝板和纳米防腐隔热板以及钛锡板、PVDF氟膜板供应商 | 全自动翻转振荡器-浸出式水平振荡器厂家-土壤干燥箱价格-常州普天仪器 | 济南品牌包装设计公司_济南VI标志设计公司_山东锐尚文化传播 | 两头忙,井下装载机,伸缩臂装载机,30装载机/铲车,50装载机/铲车厂家_价格-莱州巨浪机械有限公司 | 冷藏车厂家|冷藏车价格|小型冷藏车|散装饲料车厂家|程力专用汽车股份有限公司销售十二分公司 | 中式装修设计_全屋定制家具_实木仿古门窗花格厂家-喜迎门 | 日本SMC气缸接头-速度控制阀-日本三菱伺服电机-苏州禾力自动化科技有限公司 | 变色龙云 - 打包app_原生app_在线制作平台_短链接_ip查询 | 酒店品牌设计-酒店vi设计-酒店标识设计【国际级】VI策划公司 | 篷房[仓储-婚庆-展览-活动]生产厂家-江苏正德装配式帐篷有限公司 | 单螺旋速冻机-双螺旋-流态化-隧道式-食品速冻机厂家-广州冰泉制冷 | 苏州同创电子有限公司 - 四探针测试仪源头厂家 | 喷砂机厂家_自动喷砂机生产_新瑞自动化喷砂除锈设备 | 山东锐智科电检测仪器有限公司_超声波测厚仪,涂层测厚仪,里氏硬度计,电火花检漏仪,地下管线探测仪 | 煤机配件厂家_刮板机配件_链轮轴组_河南双志机械设备有限公司 | 北京公司注册_代理记账_代办商标注册工商执照-企力宝 | 盘式曝气器-微孔曝气器-管式曝气器-曝气盘-斜管填料 | 郑州市前程水处理有限公司 | 不锈钢复合板厂家_钛钢复合板批发_铜铝复合板供应-威海泓方金属复合材料股份有限公司 | 世界箱包品牌十大排名,女包小众轻奢品牌推荐200元左右,男包十大奢侈品牌排行榜双肩,学生拉杆箱什么品牌好质量好 - Gouwu3.com | 广东高华家具-公寓床|学生宿舍双层铁床厂家【质保十年】 | 专业广州网站建设,微信小程序开发,一物一码和NFC应用开发、物联网、外贸商城、定制系统和APP开发【致茂网络】 | 不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰]-不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰] | 北京环球北美考试院【官方网站】|北京托福培训班|北京托福培训 | 铸铝门厂家,别墅大门庭院大门,别墅铸铝门铜门[十大品牌厂家]军强门业 |