1. 程式人生 > >JAVA垃圾回收機制怎麼工作的

JAVA垃圾回收機制怎麼工作的

java垃圾回收時間不確定 在棧中的對於物件的引用失效 堆中存放的資料不會被回收 只有等待GC回收

同時GC回收的是堆區和方法區的記憶體。堆記憶體用來存放由new建立的物件和陣列。

 棧記憶體(Stack):每個執行緒私有的。
 堆記憶體(Heap):所有執行緒公用的。

java  語言中一個顯著的特點就是引入了java回收機制,是c++程式設計師最頭疼的記憶體管理的問題迎刃而解,它使得java程式設計師在編寫程式的時候不在考慮記憶體管理。由於有個垃圾回收機制,java中的物件不在有“作用域”的概念,只有物件的引用才有“作用域”。垃圾回收可以有效的防止記憶體洩露,有效的使用空閒的記憶體;           

五、Java有了GC同樣會出現記憶體洩露問題

1.靜態集合類像HashMap、Vector等的使用最容易出現記憶體洩露,這些靜態變數的生命週期和應用程式一致,所有的物件Object也不能被釋放,因為他們也將一直被Vector等應用著。

1234567Static Vector v = new Vector(); for (int i = 1; i<100; i++) { Object o = new Object(); v.add(o); o = null; }

在這個例子中,程式碼棧中存在Vector 物件的引用 v 和 Object 物件的引用 o 。在 For 迴圈中,我們不斷的生成新的物件,然後將其新增到 Vector 物件中,之後將 o 引用置空。問題是當 o 引用被置空後,如果發生 GC,我們建立的 Object 物件是否能夠被 GC 回收呢?答案是否定的。因為, GC 在跟蹤程式碼棧中的引用時,會發現 v 引用,而繼續往下跟蹤,就會發現 v 引用指向的記憶體空間中又存在指向 Object 物件的引用。也就是說盡管o 引用已經被置空,但是 Object 物件仍然存在其他的引用,是可以被訪問到的,所以 GC 無法將其釋放掉。如果在此迴圈之後, Object 物件對程式已經沒有任何作用,那麼我們就認為此 Java 程式發生了記憶體洩漏。

2.各種連線,資料庫連線,網路連線,IO連線等沒有顯示呼叫close關閉,不被GC回收導致記憶體洩露。

3.監聽器的使用,在釋放物件的同時沒有相應刪除監聽器的時候也可能導致記憶體洩露。


相關推薦

JAVA垃圾回收機制怎麼工作

java垃圾回收時間不確定 在棧中的對於物件的引用失效 堆中存放的資料不會被回收 只有等待GC回收同時GC回收的是堆區和方法區的記憶體。堆記憶體用來存放由new建立的物件和陣列。 棧記憶體(Stack):每個執行緒私有的。 堆記憶體(Heap):所有執行緒公用的。java  

JavaGC專家(1)—深入淺出Java垃圾回收機制

java性能優化 追蹤 jdk5 structure 每一個 內存管理 過程 hot ati 在學習GC之前,你首先應該記住一個單詞:“stop-the-world”。Stop-the-world會在任何一種GC算法中發生。Stop-the-world意味著 JVM 因為要

深入理解 Java 垃圾回收機制

nbsp 循環引用 方式 不同的 整理 一個 復制 垃圾回收機制 提高 垃圾回收機制中的算法: 1.引用計數法:無法檢測出循環引用。如父對象有一個對子對象的引用,子對象反過來引用父對象。這樣,他們的引用計數永遠不可能為0. 2 標記-清除算法:采用從根集合進行掃描,對存活

轉:深入淺出Java垃圾回收機制

但是 enter 相關 html 帶來 生命周期 不同 追蹤 lee 原文鏈接:http://www.importnew.com/1993.html 對於Java開發人員來說,了解垃圾回收機制(GC)有哪些好處呢?首先可以滿足作為一名軟件工程師的求知欲,其次,深入了解GC如

細述 Java垃圾回收機制→Types of Java Garbage Collectors

ade con -s 通過 分享 釋放 數組 collect 程序員 細述 Java垃圾回收機制→Types of Java Garbage Collectors 轉自:https://segmentfault.com/a/1190000006214497

java垃圾回收機制的使用

checkout ati pub bool logs int [] ring static public class Test { public static void main(String[] args) throws Exception {

Java 垃圾回收機制(早期版本)

重新 速度 交互 綜合 技術 -1 遍歷 我們 後臺 Java 垃圾回收機制在我們普通理解來看,應該視為一種低優先級的後臺進程來實現的,其實早期版本的Java虛擬機並非以這種方式實現的。 先從一種很簡單的垃圾回收方式開始。 引用計數   引用計數是一種簡單但是速度很慢

java垃圾回收機制和調優

user 機制 xmx erp 存儲 這樣的 其他應用 pan time                           java垃圾回收機制和調優 gc即垃圾收集機制是指jvm用於釋放那些不再使用的對象所占用的內存。java語言並不要求jvm有gc,也沒有規定gc如何

深入解析Java垃圾回收機制

normal tor 技術分享 統計分析 time method 堆內存 出棧 類結構 引入垃圾回收 哪些內存需要回收? 引用計數法 可達性分析 如何回收 Marking 標記 Normal Deletion 清除 Deletion with Compacting 壓縮

Java 垃圾回收機制

導致 垃圾回收 事件 相互 等於 理論 不同 基礎 其中 1.如何確定對象是個垃圾?   引用計數法:實現簡單、效率高,但是如何兩個對象同時等於null,他們會相互引用,導致他們的引用計數都不為0,永遠不會被回收。   可達性分析法: 2.典型的垃圾收集算法   標記-清楚

成為JavaGC專家(3)—如何監控Java垃圾回收機制(轉載)

生成 head builder 清除 內存清理 每次 com con book 原文:http://www.importnew.com/3146.html 為什麽需要優化GC 或者說的更確切一些,對於基於Java的服務,是否有必要優化GC?應該說,對於所有的基於Java的服

Java垃圾回收機制

位置 永久代 map 大小 ocl html init nfa 壓縮 1.前言   本文歸納一下對Java內存管理機制的理解,盡可能通俗易懂,知識來自於深入理解Java虛擬機一書。 2.起源   計算機簡單理解就是根據執行計劃,通過參數得到結果。執行計劃就是程序了,參數就是

Java垃圾回收機制(未掌握)

就會 文件 hashmap 持久 同時 程序員 主動 vivo 輸出流 垃圾回收機制 任何一種垃圾回收算法一般要做兩件基本事情: 發現無用的對象(沒有任何變量引用該對象) 回收無用對象占用的內存空間 垃圾回收相關算法: 引用計數法, 引用可達法 分代垃圾回收機制:

Java垃圾回收機制(GC)

什麼是垃圾(堆): 1、沒有被引用的物件就是垃圾物件 2、所有不再存活的物件 3、沒有物件引用指向原先分配給某個物件的記憶體時(百度百科) Java棧空間垃圾回收: 1、我們定義一些基本型別的變數和對應的變數資料還有物件的引用變數,都在函式的棧記憶體中分配。當在一段程式碼塊定義一

java垃圾回收機制的原理及優缺點

  優點:a.不需要考慮記憶體管理, b.可以有效的防止記憶體洩漏,有效的利用可使用的記憶體, c.由於有垃圾回收機制,Java中的物件不再有"作用域"的概念,只有物件的引用才有"作用域" 原

Java 垃圾回收機制與幾種垃圾回收演算法

一、如何確定某個物件是“垃圾”? 這一小節先了解一個最基本的問題:如果確定某個物件是“垃圾”?既然垃圾收集器的任務是回收垃圾物件所佔的空間供新的物件使用,那麼垃圾收集器如何確定某個物件是“垃圾”?通過什麼方法判斷一個物件可以被回收了。 在java中是通過引用來和物件進行關

Java垃圾回收機制(3)

(一) 關於垃圾回收的幾點補充   經過上述的說明,可以發現垃圾回收有以下的幾個特點:   (1)垃圾收集發生的不可預知性:由於實現了不同的垃圾回收演算法和採用了不同的收集機制,所以它有可能是定時發生,有可能是當出現系統空閒CPU資源時發生,也有可能是和原始的垃圾收集一樣,等

0.2.Java垃圾回收機制詳解

一、為什麼需要垃圾回收   如果不進行垃圾回收,記憶體遲早都會被消耗空,因為我們在不斷的分配記憶體空間而不進行回收。除非記憶體無限大,我們可以任性的分配而不回收,但是事實並非如此。所以,垃圾回收是必須的。 二、哪些記憶體需要回收? 哪些記憶體需要回收是垃圾回收機制第一個

深入理解Java垃圾回收機制

                一、垃圾回收機制的意義  Java語言中一個顯著的特點就是引入了垃圾回收機制,使c++程式設計師最頭疼的記憶體管理的問題迎刃而解,它使得Java程式設計師在編寫程式的時候不再需要考慮記憶體管理。由於有個垃圾回收機制,Java中的物件不再有“作用域”的概念,只有物件的引用才有“作

java垃圾回收機制(摘自瘋狂JAVA講義以及一位博主的分享)

java語言不需要程式設計師直接控制記憶體回收。Java的記憶體分配和回收都是由jre在後臺自動進行。jre會負責回收那些不在使用的記憶體。這種機制被稱為垃圾回收。(Garbage Collection GC)。 通常jre會提供一個後臺執行緒來進行監測和控制,一般都市在cpu空閒或記憶體不足時自動