1. 程式人生 > >垃圾回收機制-----軟引用與弱引用

垃圾回收機制-----軟引用與弱引用

1.強引用是使用最普遍的引用。如果一個物件具有強引用,那垃圾回收器絕不會回收它。當記憶體空間不足,Java虛擬機器寧願丟擲OutOfMemoryError錯誤,使程式異常終止,也不會靠隨意回收具有強引用的物件來解決記憶體不足的問題。
 2.軟引用(SoftReference)
    如果一個物件只具有軟引用,則記憶體空間足夠,垃圾回收器就不會回收它;如果記憶體空間不足了,就會回收這些物件的記憶體。只要垃圾回收器沒有回收它,該物件就可以被程式使用。軟引用可用來實現記憶體敏感的快取記憶體(下文給出示例)。
    軟引用可以和一個引用佇列(ReferenceQueue)聯合使用,如果軟引用所引用的物件被垃圾回收器回收,Java虛擬機器就會把這個軟引用加入到與之關聯的引用佇列中。

3) 弱引用(WeakReference)
    弱引用與軟引用的區別在於:弱引用的物件擁有更短暫的生命週期。在垃圾回收器執行緒掃描它所管轄的記憶體區域的過程中,一旦發現了只具有弱引用的物件,不管當前記憶體空間足夠與否,都會回收它的記憶體。不過,由於垃圾回收器是一個優先順序很低的執行緒,因此不一定會很快發現那些只具有弱引用的物件。
    弱引用可以和一個引用佇列(ReferenceQueue)聯合使用,如果弱引用所引用的物件被垃圾回收,Java虛擬機器就會把這個弱引用加入到與之關聯的引用佇列中。

 4)虛引用(PhantomReference)
    “虛引用”顧名思義,就是形同虛設,與其他幾種引用都不同,虛引用並不會決定物件的生命週期。如果一個物件僅持有虛引用,那麼它就和沒有任何引用一樣,在任何時候都可能被垃圾回收器回收。
虛引用主要用來跟蹤物件被垃圾回收器回收的活動。虛引用與軟引用和弱引用的一個區別在於:虛引用必須和引用佇列(ReferenceQueue)聯合使用。當垃圾回收器準備回收一個物件時,如果發現它還有虛引用,就會在回收物件的記憶體之前,把這個虛引用加入到與之 關聯的引用佇列中。
 

相關推薦

垃圾回收機制-----引用引用

1.強引用是使用最普遍的引用。如果一個物件具有強引用,那垃圾回收器絕不會回收它。當記憶體空間不足,Java虛擬機器寧願丟擲OutOfMemoryError錯誤,使程式異常終止,也不會靠隨意回收具有強引用的物件來解決記憶體不足的問題。  2.軟引用(SoftReference

(學習筆記)引用引用理解使用

Java 的四種引用方式:強引用,弱引用,軟引用,虛引用 強引用:只有引用始終存在,回收器即不會將其回收 Object object = new Object(); 為了保證引數的長久性,這種方式最為常見 如果不需要Object引用 可賦為空值 最常見的方式

C#垃圾回收和解構函式以及引用

在程式中,當我們每建立一個物件,就會在記憶體中開闢一個空間,用以存放這個物件。如果建立的物件多了,記憶體就會出現不夠用的情況。這時我們就要把記憶體中不再使用的物件釋放掉,避免記憶體的佔用及程式的異常。這個過程就是垃圾回收。手動進行垃圾回收的方法是:GC.Collect();

引用引用引用引用

img stringbu ride 分享圖片 tro 通過 一個 null 情況 強引用:(StrongReference) 強引用指普通的對象引用 例如: StringBuffer str = new StringBuffer("hello world"); 局部變量

python垃圾回收機制:引用計數 VS js垃圾回收機制:標記清除

js垃圾回收機制:標記清除 Js具有自動垃圾回收機制。垃圾收集器會按照固定的時間間隔週期性的執行。 JS中最常見的垃圾回收方式是標記清除。 工作原理 當變數進入環境時,將這個變數標記為“進入環境”。當變數離開環境時,則將其標記為“離開環境”。標記“離開環境”的就回收記憶體。 工作流程 1. 

Java中的引用型別(強引用引用)和垃圾回收

Java中的引用型別和垃圾回收 強引用Strong References   強引用是最常見的引用:   比如: StringBuffer buffer = new StringBuffer();   建立了一個StringBuffer類的物件,並用一個變數buffer儲存對這個

引用引用引用、虛引用 例項 及 gc回收後的自救

package com.sgcc.test; import java.lang.ref.PhantomReference; import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue; import java.lan

深入理解JVM學習筆記(十九、JVM 垃圾回收機制---如何判斷物件是否為垃圾引用計數法】)

一、引用計數法         引用計數演算法作為垃圾收集器最早的演算法,有其優勢,也有其劣勢,雖然現在的JVM都不再採用引用計數演算法進行垃圾回收【例如Sun的Java hotspot採用了火車演算法進行垃圾回收】,但這種演算法也並未被淘汰,在著名的單程序高併發快取Red

Python的垃圾回收機制深入分析--迴圈引用

一、概述: Python的GC模組主要運用了“引用計數”(reference counting)來跟蹤和回收垃圾。在引用計數的基礎上,還可以通過“標記-清除”(mark and sweep)解決容器物件可能產生的迴圈引用的問題。通過“分代回收”(generation

JVM中垃圾回收機制如何判斷是否死亡?詳解引用計數法和可達性分析 !

> 因為熱愛,所以堅持。 > 文章下方有本文參考電子書和視訊的**下載地址**哦~ 這節我們主要講垃圾收集的一些基本概念,先了解垃圾收集是什麼、然後觸發條件是什麼、最後虛擬機器如何判斷物件是否死亡。 ### 一、前言   我們都知道Java和C++有一個非常大的區別就是Java有自動的垃圾回收

閉包垃圾回收機制

直接 不能 失去 fun 才會 define 局部變量 () 避免 一、閉包1.變量作用域:函數內部可以訪問函數外部的全局變量,但是函數外部卻無法訪問到函數內部的變量。函數內部要使用var聲明變量,如果不用,實際上聲明的是一個全局變量。2. 如何從外部讀取函數內部的局部變量

引用引用引用、虛引用

enc 存在 bject 永遠 足夠 列表 設置 系統通知 內存溢出 概念我們希望能描述這樣一類對象:在內存空間還足夠時,則能保留在內存之中;如果內存空間在進行垃圾收集後還是非常緊張,則可以拋棄這些對象。在JDK 1.2之後,Java對引用的概念進行了擴充,將引用分為強引用

引用引用引用,虛引用

code 沒有 != 二次 活動 post 解決 mem 即將 Java四種引用包括強引用,軟引用,弱引用,虛引用。 強引用: 只要引用存在,垃圾回收器永遠不會回收Object obj = new Object();//可直接通過obj取得對應的對象 如obj.equ

詳解JVM內存管理垃圾回收機制 (上)

JVM 內存結構Java應用程序是運行在JVM上的,得益於JVM的內存管理和垃圾收集機制,開發人員的效率得到了顯著提升,也不容易出現內存溢出和泄漏問題。但正是因為開發人員把內存的控制權交給了JVM,一旦出現內存方面的問題,如果不了解JVM的工作原理,將很難排查錯誤。本文將從理論角度介紹虛擬機的內存管理和垃圾回

垃圾回收機制內存分配

可用 vivo 比較 固定 類結構 缺點 思路 pau 開發人員 摘要   程序計數器、虛擬機棧、本地方法棧3個區域隨線程而生,隨線程而滅;棧中的棧幀隨著方法的進入和退出而有條不紊地執行者出棧和入棧。每個棧幀中分配多少內存基本上是在類結構確定下來時就已知的(盡管在運行期會

Java學習|強引用引用引用,幻想引用有什麽區別?

poll() 問題 對象 什麽 nal 異常 jvm 事情 機制 在Java語言中,除了基本數據類型外,其他的都是指向各類對象的對象引用;Java中根據其生命周期的長短,將引用分為4類。1 強引用特點:我們平常典型編碼Object obj = new Object()中的o

Java基礎篇 - 強引用引用引用和虛引用

splay 查看 tla 之前 for 應用 幹貨 程序 策略 前言 Java執行GC判斷對象是否存活有兩種方式其中一種是引用計數。 引用計數:Java堆中每一個對象都有一個引用計數屬性,引用每新增1次計數加1,引用每釋放1次計數減1。 在JDK 1.2以前的版本中,若

【Java核心技術】強引用引用引用、幻象引用有什麼區別

在Java語言中,除了基本資料型別外,其他的都是指向各類物件的物件引用;Java中根據其生命週期的長短,將引用分為4類。 1 強引用 特點:我們平常典型編碼Object obj = new Object()中的obj就是強引用。通過關鍵字new建立的物件所關聯的引用就是強引用。 當JVM記憶體空

引用引用引用、幻象引用的區別

不同的引用型別,主要體現的是物件不同的可達性狀態和對垃圾手機的影響。 強引用,就是我們最常見的普通物件y引用,只要還有強引用指向一個物件,就能表明物件還“活著”,垃圾收集器就不會碰這種物件。對於一個普通的物件,如果沒有其他的引用關係,只要超過了引用的作用域或者顯示地將相應(強)引用賦值為null

Android開發優化之的強引用引用引用的使用

本文轉載至:http://www.jianshu.com/p/8488079a939b 引言 早在JDK1.2,Java就把物件的引用分為四種級別,從而使程式能更加靈活的控制物件的生命週期。這四種級別由高到低依次為:強引用、軟引用、弱引用和虛引用。 但是平時我們的程式碼中似乎很