久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

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

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

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

1: finalize() 方法

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

總結缺點

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

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

3:finalize中的錯誤可能導致內存泄漏;如果不在需要時,也沒有辦法取消垃圾回收;并且沒有指定不同執(zhí)行finalize對象的執(zhí)行順序。此外,沒有辦法保證finlize的執(zhí)行時間。遇到這些情況,對象調用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();// 創(chuàng)建者模式創(chuàng)建對象 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 是最終類 不能被重寫, 內部方法基本以靜態(tài)方法提供 掌握例子上面的方法即可

重點指出

static class State implements Runnable

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

什么時候被回收?

* 1. 注冊的Object處于幻象引用狀態(tài)

* 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(); } } // 模擬業(yè)務請求 @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
相關文章:
主站蜘蛛池模板: 99国产精品久久久 | 国产91 在线播放 | 国产精品久久久久久久久免费桃花 | 精品一区二区三区视频 | 色综合av | 五月天婷婷在线视频 | 国产99一区二区 | 日韩精品在线一区 | 日韩毛片免费看 | 色视频网站在线观看 | 中文字幕精品一区久久久久 | 夜夜骑天天干 | 色婷婷国产精品免费网站 | 免费一区| 黄色免费在线观看网址 | 看亚洲a级一级毛片 | 日日操天天爽 | 国产成人精品一区二区三区四区 | 鲁管视频| 性一级录像片片视频免费看 | 欧美久久一区二区三区 | 亚洲精品日韩精品 | 成人亚洲视频在线观看 | 精品国产鲁一鲁一区二区三区 | 天堂资源最新在线 | 天堂中文在线视频 | 亚洲精品一二三区 | 亚洲丶国产丶欧美一区二区三区 | 精品一区国产 | 黄久久久 | 丰满少妇久久久久久久 | 久久99一区二区 | 欧美一区二区三区视频 | 色噜噜狠狠狠综合曰曰曰88av | 午夜精品久久久 | 在线观看精品视频网站 | 麻豆.蜜桃.91.天美入口 | 亚洲第一网站 | 国内成人精品2018免费看 | 成人午夜精品一区二区三区 | 国产亚洲精品久久久456 |