精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

小心點,別被當成垃圾回收了。

開發 后端
我們說的不同的引用類型其實都是邏輯上的,而對于虛擬機來說,主要體現的是對象的不同的可達性(reachable) 狀態和對垃圾收集(garbage collector)的影響。

 我們說的不同的引用類型其實都是邏輯上的,而對于虛擬機來說,主要體現的是對象的不同的可達性(reachable) 狀態和對垃圾收集(garbage collector)的影響。

[[323398]]

初識引用

對于剛接觸 Java 的 C++ 程序員而言,理解棧和堆的關系可能很不習慣。在 C++ 中,可以使用 new 操作符在堆上創建對象,或者使用自動分配在棧上創建對象。下面的 C++ 語句是合法的,但是 Java 編譯器卻拒絕這么寫代碼,會出現 syntax error 編譯錯誤。

  1. Integer foo = Integer(1); 

Java 和 C 不一樣,Java 中會把對象都放在堆上,需要 new 操作符來創建對象。本地變量存儲在棧中,它們持有一個指向堆中對象的引用(指針)。下面是一個 Java 方法,該方法具有一個 Integer 變量,該變量從 String 解析值

  1. public static void foo(String bar){ 
  2.     Integer baz = new Integer(bar); 

這段代碼我們使用堆棧分配圖可以看一下它們的關系

 

首先先來看一下 foo() 方法,這一行代碼分配了一個新的 Integer 對象,JVM 嘗試在堆空間中開辟一塊內存空間。如果允許分配的話,就會調用 Integer 的構造方法把 String 字符串轉換為 Integer 對象。JVM 將指向該對象的指針存儲在變量 baz 中。

上面這種情況是我們樂意看到的情況,畢竟我們不想在編寫代碼的時候遇到阻礙,但是這種情況是不可能出現的,當堆空間無法為 bar 和 baz 開辟內存空間時,就會出現 OutOfMemoryError,然后就會調用垃圾收集器(garbage collector) 來嘗試騰出內存空間。這中間涉及到一個問題,垃圾收集器會回收哪些對象?

垃圾收集器

Java 給你提供了一個 new 操作符來為堆中的對象開辟內存空間,但它沒有提供 delete 操作符來釋放對象空間。當 foo() 方法返回時,如果變量 baz 超過最大內存,但它所指向的對象仍然還在堆中。如果沒有垃圾回收器的話,那么程序就會拋出 OutOfMemoryError 錯誤。然而 Java 不會,它會提供垃圾收集器來釋放不再引用的對象。

當程序嘗試創建新對象并且堆中沒有足夠的空間時,垃圾收集器就開始工作。當收集器訪問堆時,請求線程被掛起,試圖查找程序不再主動使用的對象,并回收它們的空間。如果垃圾收集器無法釋放足夠的內存空間,并且JVM 無法擴展堆,則會出現 OutOfMemoryError,你的應用程序通常在這之后崩潰。還有一種情況是 StackOverflowError ,它出現的原因是因為線程請求的棧深度要大于虛擬機所允許的深度時出現的錯誤。

標記 - 清除算法

Java 能永久不衰的一個原因就是因為垃圾收集器。許多人認為 JVM 會為每個對象保留一個引用計數,當每次引用對象的時候,引用計數器的值就 + 1,當引用失效的時候,引用計數器的值就 - 1。而垃圾收集器只會回收引用計數器的值為 0 的情況。這其實是 引用計數法(Reference Counting) 的收集方式。但是這種方式無法解決對象之間相互引用的問題,如下

  1. class A{ 
  2.   public B b; 
  3.  
  4. class B{ 
  5.   public A a; 
  6. public class Main{ 
  7.     public static void main(String[] args){ 
  8.     A a = new A(); 
  9.     B b = new B(); 
  10.     a.b=b; 
  11.     b.a=a; 
  12.     } 

然而實際上,JVM 使用一種叫做 標記-清除(Mark-Sweep)的算法,標記清除垃圾回收背后的想法很簡單:程序無法到達的每個對象都是垃圾,可以進行回收。

標記-清除收集具有如下幾個階段

  • 階段一:標記

垃圾收集器會從 根(root) 引用開始,標記它到達的所有對象。如果用老師給學生判斷卷子來比喻,這就相當于是給試卷上的全部答案判斷正確還是錯誤的過程。

 

  • 階段二:清理

在第一階段中所有可回收的的內容都能夠被垃圾收集器進行回收。如果一個對象被判定為是可以回收的對象,那么這個對象就被放在一個 finalization queue(回收隊列)中,并在稍后會由一個虛擬機自動建立的、低優先級的 finalizer 線程去執行它。

 

  • 階段三:整理(可選)

一些收集器有第三個步驟,整理。在這個步驟中,GC 將對象移動到垃圾收集器回收完對象后所留下的自由空間中。這么做可以防止堆碎片化,防止大對象在堆中由于堆空間的不連續性而無法分配的情況。

 

 

所以上面的過程中就涉及到一個根節點(GC Roots) 來判斷是否存在需要回收的對象。這個算法的基本思想就是通過一系列的 GC Roots 作為起始點,從這些節點向下搜索,搜索所走過的路徑稱為 引用鏈(Reference Chain),當一個對象到 GC Roots 之間沒有任何引用鏈相連的話,則證明此對象不可用。引用鏈上的任何一個能夠被訪問的對象都是強引用 對象,垃圾收集器不會回收強引用對象。

因此,返回到 foo() 方法中,僅在執行方法時,參數 bar 和局部變量 baz 才是強引用。一旦方法執行完成,它們都超過了作用域的時候,它們引用的對象都會進行垃圾回收。

下面來考慮一個例子

  1. LinkedList foo = new LinkedList(); 
  2. foo.add(new Integer(111)); 

變量 foo 是一個強引用,它指向一個 LinkedList 對象。LinkedList(JDK.18) 是一個鏈表的數據結構,每一個元素都會指向前驅元素,每個元素都有其后繼元素。

 

當我們調用add() 方法時,我們會增加一個新的鏈表元素,并且該鏈表元素指向值為 111 的 Integer 實例。這是一連串的強引用,也就是說,這個 Integer 的實例不符合垃圾收集條件。一旦 foo 對象超出了程序運行的作用域,LinkedList 和其中的引用內容都可以進行收集,收集的

  1. protected void finalize() throws Throwable 
  2.     // 清除對象 

前提是沒有強引用關系。

Finalizers

C++ 允許對象定義析構函數方法:當對象超出作用范圍或被明確刪除時,會調用析構函數來清理使用的資源。對于大多數對象來說,析構函數能夠釋放使用 new 或者 malloc 函數分配的內存。在Java中,垃圾收集器會為你自動清除對象,分配內存,因此不需要顯式析構函數即可執行此操作。這也是 Java 和 C++ 的一大區別。

然而,內存并不是唯一需要被釋放的資源。考慮 FileOutputStream:當你創建此對象的實例時,它從操作系統分配文件句柄。如果你讓流的引用在關閉前超過了其作用范圍,該文件句柄會怎么樣?實際上,每個流都會有一個 finalizer 方法,這個方法是垃圾回收器在回收之前由 JVM 調用的方法。對于 FileOutputStream 來說,finalizer 方法會關閉流,釋放文件句柄給操作系統,然后清除緩沖區,確保數據能夠寫入磁盤。

任何對象都具有 finalizer 方法,你要做的就是聲明 finalize() 方法。如下

  1. protected void finalize() throws Throwable 
  2.     // 清除對象 

雖然 finalizers 的 finalize() 方法是一種好的清除方式,但是這種方法產生的負面影響非常大,你不應該依靠這個方法來做任何垃圾回收工作。因為 finalize 方法的運行開銷比較大,不確定性強,無法保證各個對象的調用順序。finalize 能做的任何事情,可以使用 try-finally 或者其他方式來做,甚至做的更好。

對象的生命周期

綜上所述,可以通過下面的流程來對對象的生命周期做一個總結

 

對象被創建并初始化,對象在運行時被使用,然后離開對象的作用域,對象會變成不可達并會被垃圾收集器回收。圖中用紅色標明的區域表示對象處于強可達階段。

JDK1.2 介紹了 java.lang.ref 包,對象的生命周期有四個階段:􏲧強可達􏰛(Strongly Reachable􏰜)、軟可達(Soft Reachable􏰜)、弱可達(Weak Reachable􏰜)、 幻象可達(Phantom Reachable􏰜)。

 

如果只討論符合垃圾回收條件的對象,那么只有三種:軟可達、弱可達和幻象可達。

  • 軟可達:軟可達就是􏱬我們只能通過軟引用􏳂才能訪問的狀態,軟可達的對象是由 SoftReference 引用的對象,并且沒有強引用的對象。軟引用是用來描述一些還有用但是非必須的對象。垃圾收集器會盡可能長時間的保留軟引用的對象,但是會在發生 OutOfMemoryError 之前,回收軟引用的對象。如果回收完軟引用的對象,內存還是不夠分配的話,就會直接拋出 OutOfMemoryError。
  • 弱可達:弱可達的對象是 WeakReference 引用的對象。垃圾收集器可以隨時收集弱引用的對象,不會嘗試保留軟引用的對象。
  • 幻象可達:幻象可達是由 PhantomReference 引用的對象,幻象可達就是沒有強、軟、弱引用進行關聯,并且已經被 finalize 過了,只有幻象引用指向這個對象的時候。

除此之外,還有強可達和不可達的兩種可達性判斷條件

  • 強可達:就是一個對象剛被創建、初始化、使用中的對象都是處于強可達的狀態
  • 不可達(unreachable):處于不可達的對象就意味著對象可以被清除了。

下面是一個不同可達性狀態的轉換圖

 

判斷可達性條件,也是 JVM 垃圾收集器決定如何處理對象的一部分考慮因素。

所有的對象可達性引用都是 java.lang.ref.Reference 的子類,它里面有一個get() 方法,返回引用對象。如果已通過程序或垃圾收集器清除了此引用對象,則此方法返回 null 。也就是說,除了幻象引用外,軟引用和弱引用都是可以得到對象的。而且這些對象可以人為拯救,變為強引用,例如把 this 關鍵字賦值給對象,只要重新和引用鏈上的任意一個對象建立關聯即可。

ReferenceQueue

引用隊列又稱為 ReferenceQueue,它位于 java.lang.ref 包下。我們在􏰓建各種引用(軟引用,弱引用,幻象引用)并關聯到響應對象􏰐時,可以選擇是否需要關聯引用隊列。JVM 會在特定的時機將引用入隊到隊列中,程序可以通過判斷引用隊列中是否已經加入引用,來了解被引用的對象是否被GC回收。

Reference

java.lang.ref.Reference 為軟(soft)引用、弱(weak)引用、虛(phantom)引用的父類。因為 Reference 對象和垃圾回收密切配合實現,該類可能不能被直接子類化。

文章參考:

https://www.jianshu.com/p/f86d3a43eec5

《深入理解Java虛擬機》第二版

http://www.kdgregory.com/index.php?page=java.refobj

責任編輯:武曉燕 來源: Java建設者
相關推薦

2020-04-22 14:40:26

虛擬機技術Java

2017-08-04 10:53:30

回收算法JVM垃圾回收器

2022-01-20 10:34:49

JVM垃圾回收算法

2021-01-04 10:08:07

垃圾回收Java虛擬機

2022-03-21 11:33:11

JVM垃圾回收器垃圾回收算法

2021-11-05 15:23:20

JVM回收算法

2021-11-16 15:26:23

強化學習火箭人工智能

2017-10-12 11:48:09

iOS系統彈窗Apple ID

2023-08-08 10:29:55

JVM優化垃圾回收

2010-12-13 11:14:04

Java垃圾回收算法

2023-12-19 21:52:51

Go垃圾回收開發

2021-03-03 08:13:57

模式垃圾回收

2009-06-25 17:48:24

Java垃圾回收

2020-07-09 08:26:42

Kubernetes容器開發

2009-12-30 10:14:29

JVM垃圾回收

2017-03-03 09:26:48

PHP垃圾回收機制

2010-09-25 15:33:19

JVM垃圾回收

2017-08-17 15:40:08

大數據Python垃圾回收機制

2010-01-27 10:52:15

Android垃圾回收

2015-07-06 10:14:25

Java垃圾回收實戰
點贊
收藏

51CTO技術棧公眾號

日韩精品电影在线| 欧美精品中文| 亚洲一区在线播放| 欧美高清视频一区| 国产又大又长又粗| 亚洲福利精品| 中日韩午夜理伦电影免费| 三级黄色片免费观看| 理论不卡电影大全神| 国产精品国产三级国产三级人妇| av免费观看久久| 中文字幕 人妻熟女| 伊人成人在线视频| 中文字幕亚洲无线码a| 欧美双性人妖o0| 欧洲亚洲精品| 色噜噜狠狠色综合中国| 大伊香蕉精品视频在线| 免费网站免费进入在线| 久久影视一区二区| 国产经典一区二区三区| 亚洲天堂手机在线| 老司机午夜免费精品视频| 欧美国产视频一区二区| 精品无码一区二区三区蜜臀| 在线看成人短视频| 精品日韩在线一区| 三区视频在线观看| 丁香婷婷久久| 日本久久精品电影| 欧美a v在线播放| 天天干在线视频论坛| 日韩理论片一区二区| 日韩欧美三级一区二区| 欧美孕妇性xxxⅹ精品hd| 国产成人av自拍| 4444kk亚洲人成电影在线| 中文字幕精品无码亚| 久久亚洲欧洲| 青草成人免费视频| 日本免费观看视| 激情欧美丁香| 欧美激情精品久久久久久变态| 永久免费未视频| 91九色精品| 日韩专区中文字幕| 呻吟揉丰满对白91乃国产区| heyzo久久| 中文字幕在线视频日韩| 美女福利视频网| 91日韩免费| 久久久www成人免费精品| 国产喷水在线观看| 99久久婷婷国产综合精品电影√| 少妇av一区二区三区| 最新日韩免费视频| 欧美一区免费| 欧美精品激情在线观看| 青青草av在线播放| 久久先锋资源| 国产精品免费久久久久久| 少妇无套内谢久久久久| 精品中文av资源站在线观看| 成人www视频在线观看| 国产精品视频一区二区三区,| 国产综合色在线| 99精品国产高清在线观看| 亚洲精品国产精| 99精品国产视频| 欧美重口乱码一区二区| 阿v免费在线观看| 最新日韩在线视频| 国产黄色激情视频| √天堂8资源中文在线| 无码av免费一区二区三区试看| 99999精品视频| 成人国产精品一区二区免费麻豆| 欧美丰满高潮xxxx喷水动漫| 中文在线字幕观看| 一本久久青青| 日韩视频永久免费观看| 九九热只有精品| 翔田千里一区二区| 国产精品自产拍在线观| 亚洲av无码专区在线| 久久综合给合久久狠狠狠97色69| 亚洲精品电影在线一区| 日本伦理一区二区| 色素色在线综合| 毛毛毛毛毛毛毛片123| 少妇一区二区三区| 俺去亚洲欧洲欧美日韩| 91看片在线播放| 久久精品国产**网站演员| 国产成人亚洲欧美| a黄色在线观看| 亚洲最快最全在线视频| 日本在线视频www| 久久在线观看| 国产亚洲精品久久久久久牛牛| 好吊色视频在线观看| 国产精品美女| 91pron在线| 超碰97在线免费观看| 亚洲高清不卡在线观看| 日韩高清第一页| 日韩精品欧美大片| 欧美老肥婆性猛交视频| av首页在线观看| youjizz国产精品| 久久视频免费在线| 乡村艳史在线观看| 精品精品国产高清a毛片牛牛| 91动漫免费网站| 亚洲一卡久久| 都市激情久久久久久久久久久| 在线观看完整版免费| 欧美日韩国产激情| 制服.丝袜.亚洲.中文.综合懂| 日韩.com| 国产精品精品久久久| 天堂在线观看视频| 亚洲精品免费一二三区| 香蕉视频禁止18| 女人丝袜激情亚洲| 91精品国产乱码久久久久久蜜臀| 国产高中女学生第一次| 成人欧美一区二区三区白人| 看欧美ab黄色大片视频免费| 欧美一区二区三区久久| 韩国精品美女www爽爽爽视频| 国产黄频在线观看| 亚洲精品免费视频| 97人人模人人爽人人澡| 婷婷亚洲图片| 国产欧美精品va在线观看| yjizz视频网站在线播放| 日韩欧美精品免费在线| 少妇真人直播免费视频| 午夜在线视频观看日韩17c| 精品国产第一页| 九色porny丨首页入口在线| 亚洲国产成人91精品| 日本三级黄色大片| caoporen国产精品视频| 欧美成人高潮一二区在线看| 国产精品乱战久久久| 久久久久久综合网天天| 国产 欧美 精品| 香蕉影视欧美成人| 国产福利在线观看视频| 美女诱惑一区| 日韩一区不卡| 欧美特黄色片| 久久久国产影院| 精品欧美在线观看| 亚洲成a人v欧美综合天堂下载| 69亚洲乱人伦| 噜噜噜91成人网| 视频一区二区三| 99精品视频在线免费播放| 久久资源免费视频| 黄色一级大片在线免费看国产一 | 成人爱爱电影网址| 国产免费黄色小视频| 秋霞影院一区二区三区| 国产91在线播放精品91| 色欧美激情视频在线| 日韩一区二区三| 日韩成人免费在线视频| 国产日韩av一区| 中文字幕一区二区在线观看视频| 欧美日韩中文| 美女被啪啪一区二区| 成人在线高清| 欧美激情一区二区三区在线视频观看| 天堂av在线免费| 欧美日韩高清影院| 国产亚洲精久久久久久无码77777| 97精品电影院| 日本黄色的视频| 99成人在线| 一区二区视频在线观看| 午夜视频在线观看精品中文| 日本一区二区在线免费播放| 色网站免费在线观看| 精品免费国产二区三区| 永久免费无码av网站在线观看| 综合久久久久久| 日本69式三人交| 久久精品国产亚洲高清剧情介绍| youjizz.com在线观看| 国产精品欧美三级在线观看| 99r国产精品视频| 久久亚洲精品爱爱| 久久久久日韩精品久久久男男| 成人在线观看一区| 精品噜噜噜噜久久久久久久久试看 | 久久国产中文字幕| 国内视频一区| 亚洲欧洲日韩精品在线| 91av在线影院| 污污视频在线| 日韩中文字幕精品| 韩国三级在线观看久| 精品免费99久久| 国产免费视频一区二区三区| 一本一道久久a久久精品| 欧美色图一区二区| 国产精品毛片久久久久久| 伊人网综合视频| 国内国产精品久久| 九九九在线观看视频| 国产视频一区欧美| 女人帮男人橹视频播放| 亚洲精品a级片| 午夜视频久久久| 美女久久久久| 久久99九九| 久久a级毛片毛片免费观看| 91免费版网站入口| 狠狠久久综合| 国产91免费看片| 中文字幕在线视频网站| 久久久久成人精品| 最新国产在线拍揄自揄视频| 视频在线观看一区二区| 成人18在线| 国产亚洲精品美女久久久| 精品美女视频在线观看免费软件| 亚洲精品国产精品久久清纯直播| 黄色一级大片在线免费看国产一| 日韩视频一区二区在线观看| 国产精品熟女久久久久久| 欧美日韩一区二区三区视频 | √天堂8资源中文在线| 欧美成人自拍视频| 久草免费在线观看| 久久久精品欧美| 国产福利在线播放麻豆| 日韩一区二区福利| 黄色动漫在线观看| 免费99精品国产自在在线| 国产在线高清视频| 欧美成人一区二区三区电影| 亚洲色图美国十次| 欧美日韩高清在线观看| 黄色大片在线| 欧美亚州一区二区三区| 综合在线影院| 国产精品免费观看在线| 在线播放成人| 亚洲一区中文字幕在线观看| 深夜福利一区| 久久久com| 成人激情免费视频| 日韩视频在线免费播放| 一二三区不卡| 亚洲人精品午夜射精日韩| 久久蜜桃精品| 日本人69视频| 国产69精品久久777的优势| 丰满岳乱妇一区二区| 久久久五月婷婷| 911国产在线| 一区二区免费看| 久久国产黄色片| 欧美人伦禁忌dvd放荡欲情| 99视频在线观看免费| 精品国产一区二区在线观看| 西西人体44www大胆无码| 亚洲欧洲自拍偷拍| 成人在线网址| 日本欧美精品在线| 四虎国产精品免费久久5151| 国产乱码精品一区二区三区中文 | 亚洲图片欧美日产| 久操视频在线| 91av在线精品| 国产一区二区三区免费观看在线 | 国产日韩视频一区| 91欧美一区二区| 内射一区二区三区| 精品日本高清在线播放| 136福利视频导航| 亚洲精品wwww| 日本不卡视频| 97国产在线观看| 自拍偷拍欧美日韩| 精品日本一区二区| 91久久夜色精品国产按摩| 国产极品尤物在线| 久久精品999| 大地资源二中文在线影视观看| 中文字幕永久在线不卡| 日韩不卡视频在线| 日韩视频一区二区三区在线播放| 国产人成在线观看| 国内成人精品视频| 91精品一久久香蕉国产线看观看| 玖玖玖精品中文字幕| 中文字幕一区二区三区乱码图片| 日本黄色三级大片| 高清成人在线观看| 性欧美videos| 欧美三级日韩三级国产三级| 熟妇人妻中文av无码| 欧美成人免费在线视频| 国产精品久久久久久吹潮| 麻豆av一区二区三区| 激情文学一区| 欧美xxxx日本和非洲| 中文字幕亚洲在| 欧美成人精品网站| 亚洲激情第一页| 欧美日韩经典丝袜| 亚洲自拍另类欧美丝袜| 欧美残忍xxxx极端| 一区二区三区免费播放| 久久久久国产精品麻豆ai换脸| 国产无套粉嫩白浆内谢| 日韩欧美成人激情| 最新av在线播放| 91久久国产婷婷一区二区| 成人久久综合| 亚洲精品怡红院| 国产欧美日韩卡一| 国产精品xxxxxx| 国产亚洲欧洲黄色| 日韩精品专区| 欧美一区亚洲二区| 日韩电影网1区2区| 亚洲一区视频在线播放| 色狠狠色噜噜噜综合网| 日韩精品福利| 日本精品久久久久久久| 少妇一区二区三区| 97在线播放视频| 国产日产欧美一区| 91porny九色| 国产一区二区三区18| 日韩中文视频| 日本精品免费| 免费成人美女在线观看.| 一二三四在线观看视频| 欧美精品在线观看一区二区| sm国产在线调教视频| 97av影视网在线观看| 很黄很黄激情成人| 亚洲一区二区在线免费| 欧美午夜精品久久久久久久| 激情小视频在线观看| 国产精品一区av| 亚洲国产一区二区在线观看 | 国产1区2区在线| 欧美国产精品久久| 国产精品羞羞答答在线| 欧美激情2020午夜免费观看| 国产精品一区二区中文字幕 | 国产成人精品一区二三区在线观看 | 在线电影一区| 丝袜美腿中文字幕| 欧美性三三影院| 黄色av电影在线观看| 高清视频在线观看一区| 国产亚洲激情| 婷婷综合在线视频| 欧美不卡一二三| 特黄毛片在线观看| 亚洲欧美99| 国产电影一区二区三区| 久久精品无码av| 久久精品国产亚洲一区二区| 大桥未久女教师av一区二区| 成人免费观看视频在线观看| 国产精品精品国产色婷婷| 亚洲成人一级片| 国产成人精品一区二区三区| 综合视频在线| 自拍偷拍中文字幕| 日韩午夜三级在线| 2022成人影院| 加勒比海盗1在线观看免费国语版| 91免费看`日韩一区二区| 日本免费福利视频| 精品国产中文字幕第一页| 精品动漫一区二区三区在线观看| 国产自产自拍视频在线观看| 先锋影音网一区| 成人精品在线视频观看| 人人妻人人爽人人澡人人精品| 欧美日韩国产成人| 国产探花一区在线观看| 色欲欲www成人网站| 欧美亚洲综合久久| heyzo高清国产精品| 亚洲最大免费| 久久久一区二区三区| www.成人免费视频| 国产精品日韩专区|