程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Java內存管理

Java內存管理

編輯:JAVA綜合教程

Java內存管理


前一段時間粗略看了一下《深入Java虛擬機 第二版》,可能是因為工作才一年的原因吧,看著十分的吃力。畢竟如果具體到細節的話,Java虛擬機涉及的內容太多了。可能再過一兩年去看會合適一些吧。

不過看了一遍《深入Java虛擬機》再來理解Java內存管理會好很多。接下來一起學習下Java內存管理吧。

這裡寫圖片描述

請注意上圖的這個:

這裡寫圖片描述編程中也可以減少犯錯的機會。利用垃圾回收,程序員可以避免一些指針和內存洩露相關的bug(這一類bug通常很隱蔽)。但另一方面,垃圾回收需要耗費更多的計算時間。垃圾回收實際上是將原本屬於程序員的責任轉移給計算機。使用垃圾回收的程序需要更長的運行時間。

在Java中,對象的是通過引用使用的(把對象相像成致命的毒物,引用就像是用於提取毒物的鑷子)。如果不再有引用指向對象,那麼我們就再也無從調用或者處理該對象。這樣的對象將不可到達(unreachable)。垃圾回收用於釋放不可到達對象所占據的內存。這是垃圾回收的基本原則。

早期的垃圾回收采用引用計數(reference counting)的機制。每個對象包含一個計數器。當有新的指向該對象的引用時,計數器加1。當引用移除時,計數器減1。當計數器為0時,認為該對象可以進行垃圾回收。

然而,一個可能的問題是,如果有兩個對象循環引用(cyclic reference),比如兩個對象互相引用,而且此時沒有其它(指向A或者指向B)的引用,我們實際上根本無法通過引用到達這兩個對象。

因此,我們以棧和static數據為根(root),從根出發,跟隨所有的引用,就可以找到所有的可到達對象。也就是說,一個可到達對象,一定被根引用,或者被其他可到達對象引用。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved