日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java永生代和新生代_Java:永生的对象和对象的复活

發布時間:2023/12/3 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java永生代和新生代_Java:永生的对象和对象的复活 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java永生代和新生代

什么是物體復活?

當沒有其他對象引用該對象時,該Java對象可以進行垃圾回收。 當JVM:s垃圾收集器最終將要刪除未使用的對象時,將調用該對象的finalize()方法。 但是,如果我們再次使用對象自己的finalize()方法重新創建對該對象的引用,則該對象可以復活。 在這種情況下,JVM將檢測到再次引用了該對象,并避免將其刪除。 隱喻地,該物體已經從死亡中復活了……

public class Immortal {private static final Set<Immortal> immortals = new HashSet<>();@Overrideprotected void finalize() throws Throwable {System.out.println(Immortal.class.getSimpleName() + "::finalize for " + this);immortals.add(this); // Resurrect the object by creating a new reference }}

可以通過以下方式測試復活屬性:

public class NewMain {public static void main(String[] args) {new Immortal();System.gc();sleep(1_000);System.gc();prompt("Press any key...");}private static void prompt(String msg) {try {System.out.println(msg);System.in.read();} catch (IOException io) {}}private static void sleep(long duration) {try {Thread.sleep(duration);} catch (InterruptedException ie) {}}}

這將給出以下輸出:

Immortal::finalize for com.blogspot.minborgsjavapot.resurected_object.Immortal@635cb856 Press any key...

通過檢查Java堆,我們還可以看到盡管對象的終結器被調用,該對象仍然存在:

pemi$ jps 21735 NewMain 21736 Jpspemi$ jmap -histo 21735 | grep Immortal164: 1 16 com.blogspot.minborgsjavapot.resurected_object.Immortal

終結器被調用了多少次?

如果以后取消引用了復活的對象,則該對象又有資格進行垃圾回收。 但是,這次
由于Java最多只能調用finalizer一次,因此不會再次調用finalize()方法。 我們可能還記得,不能保證終結器會被調用。 例如,如果程序由于任何原因終止,則僅放棄JVM中的對象,并且最終定形器將根本不被調用,如在本示例中可以看到的:

public class NewMain2 {public static void main(String[] args) {new Immortal();}}

當我們運行上面的代碼片段時,我們觀察到從不調用Immortal::finalizer 。

對象復活好嗎?

與使用finalize()方法一樣,我們必須非常謹慎。 對我們Java開發人員的一般建議是根本不要使用finalize() 。 此外,有人可能會爭辯說,復活一個對象與故意造成內存泄漏是一樣的。

但是,有一些有趣的對象復活應用程序。 也許我們想對我們的對象進行事后分析,而又不更改使用這些對象的實際應用程序。 通過使用對象復活,我們可以保存這些對象并在以后分析它們的內部狀態,而與使用它們的應用程序無關。

翻譯自: https://www.javacodegeeks.com/2016/03/java-immortal-objects-object-resurrection.html

java永生代和新生代

總結

以上是生活随笔為你收集整理的java永生代和新生代_Java:永生的对象和对象的复活的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。