精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产精品亚洲综合| 日韩中文字幕网址| 久久精品免费一区二区| 国产一级在线| 国产一区二区伦理片| 色综合久久中文字幕综合网小说| 天天躁日日躁狠狠躁免费麻豆| 日本蜜桃在线观看视频| 中文字幕免费一区| 亚洲va欧美va国产综合久久| 欧美成人精品欧美一级乱黄| 日韩精品2区| 亚洲电影av在线| 国产又黄又猛又粗| av小说在线播放| 国产精品久久久久aaaa| 精选一区二区三区四区五区| 91麻豆国产视频| 国产日韩亚洲欧美精品| 精品国产欧美一区二区五十路| 日韩综合第一页| 欧美日韩免费电影| 欧美日韩亚洲视频一区| 一级黄色片播放| 成人高清免费在线播放| 成人久久18免费网站麻豆| 国产精自产拍久久久久久蜜| 日本久久精品视频| 99久久国产综合色|国产精品| 国产一区二区三区免费观看在线| 一区二区小说| 欧美精品久久一区| 国产精品丝袜久久久久久消防器材| 日本高清在线观看wwwww色| 99免费精品在线| 91免费看蜜桃| 国产精品久久无码一三区| 视频一区二区三区入口| 97在线观看免费| 久久精品视频国产| 一区二区三区在线电影| 最近2019中文免费高清视频观看www99 | www.国产精品.com| 久久只精品国产| 国产在线资源一区| 动漫av一区二区三区| 国产精品一区二区无线| 国产在线观看91精品一区| 精品黑人一区二区三区| 性xx色xx综合久久久xx| 91国产中文字幕| 久久久精品视频免费| 91精品国产自产在线观看永久∴| 色99之美女主播在线视频| 人妻aⅴ无码一区二区三区| 麻豆成人入口| 日韩精品在线视频观看| 亚洲国产欧美视频| 偷拍一区二区| 亚洲色在线视频| av女人的天堂| 大片网站久久| 日韩中文字幕av| 91香蕉视频污在线观看| 国产精品伦理久久久久久| 日韩亚洲精品视频| 在线日韩国产网站| 亚洲女同另类| 欧美激情视频一区二区| 日韩免费av片| 亚洲尤物在线| 国产精品免费久久久| 在线观看毛片视频| 国产在线精品一区在线观看麻豆| 亚洲自拍偷拍福利| 男人天堂网在线视频| 久久99在线观看| 一区二区成人在线观看| 午夜精品一区二区在线观看 | 国产成人无码av| 日日摸夜夜添夜夜添国产精品| 国产精品com| 91tv国产成人福利| 国产精品99久久久久久久vr| 国产精品毛片一区视频| 青青草在线视频免费观看| 久久老女人爱爱| 一区二区三区三区在线| 黄页网站在线| 91福利精品第一导航| 午夜免费看视频| 999久久久精品一区二区| 精品亚洲一区二区| 国产午夜精品理论片| 在线日韩视频| 国产精品高潮粉嫩av| 国产成年妇视频| 国产人妖乱国产精品人妖| 日本一区二区三区四区五区六区| 欧美a级在线观看| 欧美日本高清视频在线观看| 制服丝袜在线第一页| 欧美色女视频| 国内精品久久久久久影视8| 亚洲欧美另类在线视频| 国产剧情一区二区| 欧美日韩精品免费在线观看视频| dy888亚洲精品一区二区三区| 精品久久香蕉国产线看观看gif| 在线观看岛国av| 神马久久影院| 欧美精品在线观看91| 国产精品久久久久久久久夜色| 国产精品538一区二区在线| 欧美日韩精品久久久免费观看| 亚洲区欧洲区| 欧美日韩午夜在线| 免费观看av网站| 欧美人成在线| 国产日韩av在线| 久久av少妇| 午夜日韩在线电影| 国产精欧美一区二区三区白种人| 一本色道久久综合亚洲精品酒店 | av不卡在线免费观看| 中文字幕在线直播| 精品国产一二三| 麻豆明星ai换脸视频| 免费欧美在线视频| 热re99久久精品国99热蜜月| 免费毛片b在线观看| 日韩三级免费观看| 色老板免费视频| 久久精品国产免费| 日韩少妇中文字幕| 91久久国产综合久久91猫猫| 精品国产伦一区二区三区免费| 卡通动漫亚洲综合| 精品亚洲aⅴ乱码一区二区三区| 日本午夜精品电影| 毛片免费看不卡网站| 亚洲精品久久在线| 日本一区二区网站| 成人免费视频一区二区| 国产美女永久无遮挡| 国产电影一区| 久久这里有精品视频| 一区二区精品视频在线观看| 国产精品美女久久久久久久| 国产91色在线观看| 日韩电影免费网站| 国产日韩欧美中文| 精品麻豆一区二区三区| 777午夜精品视频在线播放| 999精品视频在线观看播放| 蜜臀av国产精品久久久久 | 亚洲电影影音先锋| 91亚洲永久免费精品| 超碰在线无需免费| 日韩欧美卡一卡二| 亚洲一区二区91| 97久久超碰国产精品| 九色在线视频观看| 久久99蜜桃| 国产精品主播视频| 黄色网址免费在线观看| 日韩欧美第一区| 日本最新中文字幕| 久久精品在线免费观看| 青青草精品视频在线观看| 999久久久亚洲| 51午夜精品| 日韩欧美精品一区二区三区| 亚洲色图13p| 一级特黄aa大片| 亚洲自拍欧美精品| 美国黄色a级片| 蜜臀精品一区二区三区在线观看 | 欧美一级二级三级| 欧美另类激情| 国精产品一区一区三区有限在线| 天天影院图片亚洲| 欧美色综合网站| 国产亚洲第一页| 久久精品亚洲一区二区三区浴池| 人人干人人干人人| 欧美日韩伊人| 欧美一区观看| 精品久久久久久久久久岛国gif| 97香蕉久久超级碰碰高清版| 自拍视频在线免费观看| 精品久久久久久久久久久久久久久 | 国产成人精品无码片区在线| 日本系列欧美系列| 免费看日b视频| 国内亚洲精品| 超碰国产精品久久国产精品99| 筱崎爱全乳无删减在线观看| 日韩中文字幕在线播放| 无码精品在线观看| 欧美日韩黄视频| 毛片视频网站在线观看| 日韩一区在线看| 蜜桃传媒一区二区亚洲av| 极品少妇xxxx偷拍精品少妇| 欧美色图另类小说| 韩国自拍一区| 杨幂一区欧美专区| 亚洲精品**不卡在线播he| 96sao精品视频在线观看| 刘亦菲一区二区三区免费看| 欧美激情女人20p| 人人干在线视频| 亚洲日本中文字幕免费在线不卡| 乱精品一区字幕二区| 欧美福利视频一区| 日批视频免费在线观看| 亚洲成人av电影| 亚洲色婷婷一区二区三区| 国产精品免费观看视频| 公侵犯人妻一区二区三区| 成人动漫视频在线| 午夜一级免费视频| 人人爽香蕉精品| 国产免费成人在线| 日韩一区二区免费看| 国产制服91一区二区三区制服| 久久视频在线| 色爱区成人综合网| 国产91精品对白在线播放| 久久99精品久久久久久水蜜桃| 日韩高清一区| 亚洲精品欧美一区二区三区| 欧美一区二区三区婷婷| 国产精品极品在线| 香蕉久久免费电影| 日本91av在线播放| 性欧美18~19sex高清播放| 久久免费视频网站| 丰满诱人av在线播放| 九九九久久久久久| 天使と恶魔の榨精在线播放| 超碰97人人做人人爱少妇| 日本在线播放| 久久精品一偷一偷国产| 日本www在线观看视频| 久久网福利资源网站| a黄色片在线观看| 久久这里有精品| 羞羞视频在线免费国产| 欧美国产极速在线| 蜜臀av在线| 久久久影视精品| 川上优av中文字幕一区二区| 97色在线视频观看| 午夜激情电影在线播放| 日本亚洲欧美成人| 美女网站视频一区| 国产精品男女猛烈高潮激情| 日韩护士脚交太爽了| 国产日韩中文字幕在线| 精品国产伦一区二区三区观看说明 | 视频一区视频二区国产精品| 欧美天天影院| 欧美精品成人在线| 欧美伦理91| 国产精品极品在线| 麻豆一区在线| 国产一区二区免费电影| 国产一区二区三区电影在线观看| 亚洲国产一区在线| 亚洲欧美综合久久久| 被灌满精子的波多野结衣| 噜噜爱69成人精品| 免费一区二区三区在线观看| 国产一区二区三区综合| 国产免费a级片| 久久色中文字幕| 免费黄色国产视频| 亚州成人在线电影| 波多野结衣电影在线播放| 7777精品伊人久久久大香线蕉| 好男人www在线视频| 亚洲欧美中文另类| 免费av在线网站| 午夜精品久久久99热福利| 高清电影一区| 91传媒视频在线观看| 一区二区美女| 在线视频一二三区| 亚洲女人av| 能看毛片的网站| 久久亚洲精精品中文字幕早川悠里 | 国产精品三级| 国产 国语对白 露脸| 久久综合亚州| 无码人妻丰满熟妇啪啪网站| 国产亚洲欧美日韩俺去了| 国内偷拍精品视频| 色婷婷亚洲婷婷| 丰满岳乱妇国产精品一区| 亚洲最新视频在线| 性欧美videoshd高清| 国产成人精品免费久久久久| 97视频一区| 一区二区日本| 三级精品在线观看| 国产国语老龄妇女a片| 中文字幕不卡在线观看| 日韩伦理在线视频| 日韩一区二区高清| 日本暖暖在线视频| 欧美一级黄色网| 91在线一区| 裸体裸乳免费看| 日本欧洲一区二区| 亚洲第一黄色网址| 亚洲自拍欧美精品| 91九色蝌蚪91por成人| 亚洲视频在线观看网站| www.8ⅹ8ⅹ羞羞漫画在线看| 国产美女搞久久| 精品国产91久久久久久浪潮蜜月| www精品久久| 国产精品综合二区| 亚洲女人久久久| 欧美视频一区二区三区四区| 欧美孕妇性xxxⅹ精品hd| 欧美精品video| 欧美经典一区| 久久亚洲a v| 国产一区二区三区精品欧美日韩一区二区三区 | 久久99精品视频一区97| 欧美成人xxxx| 神马欧美一区二区| 久久午夜精品| 中文幕无线码中文字蜜桃| 欧美日韩免费看| 婷婷亚洲一区二区三区| 992tv在线成人免费观看| 超碰在线成人| www.夜夜爱| 成人免费视频免费观看| 久久免费黄色网址| 日韩久久精品一区| 青草在线视频在线观看| 96国产粉嫩美女| 国户精品久久久久久久久久久不卡| 亚洲第一区第二区第三区| 亚洲欧洲精品天堂一级 | 亚洲国产精品123| 蜜臀av性久久久久蜜臀aⅴ| 婷婷国产成人精品视频| 欧美日韩精品一区视频| 日本免费在线观看| 亚洲一区精品电影| 欧美三级在线| 少妇一级淫免费观看| 天天综合网天天综合色| 五月婷婷六月色| 国产福利视频一区二区| 欧美日韩激情| 欧美成人乱码一二三四区免费| 国产精品初高中害羞小美女文 | 亚洲国产精品va| 韩国成人二区| 日韩av一区二区三区美女毛片| 蜜桃一区二区三区四区| 暗呦丨小u女国产精品| 精品少妇一区二区三区视频免付费| 成人性生交大片免费看网站| 久久波多野结衣| 男女激情视频一区| 久久爱一区二区| 精品成人在线观看| 美女网站在线看| 亚洲高清在线观看一区| 国产成人亚洲综合a∨婷婷| 日韩成人免费在线观看| 亚洲天堂av高清| 99综合久久| www.com毛片| 欧美国产国产综合| 国产ts变态重口人妖hd| 欧美性视频网站| 三级电影一区| 艳妇乳肉豪妇荡乳xxx| 91激情在线视频| 日韩影视在线| 日韩av电影免费观看| 国内精品久久久久影院薰衣草| 国产精品6666| 深夜福利一区二区| 美女视频亚洲色图| 狠狠干狠狠操视频| 亚洲成人在线观看视频| 91在线高清| 精品无人区一区二区三区 | 91亚洲精品丁香在线观看| 噜噜噜躁狠狠躁狠狠精品视频|