JAVA內存的一些總結(二) 對象訪問

原博客地址:http://www.solr.cc/blog/?p=242

今天說說 java的對象訪問.

對象訪問會涉及到 棧、堆、方法區這三個內存區域。對象訪問主要有兩種:句柄訪問和指針放訪問。

上圖(源於網絡):

1348658605_5211

1348659242_7055

前面我們分析過內存各部分的功能,棧中存放的是變量表,堆中存放對象實例,方法去存放類信息(如類名 父類 接口實現等)。這樣從兩個圖中不難發現訪問對象的流程是一致 都是通過棧中對象的引用到堆中尋找實例,實例又需要到方法區中找到類的基本信息。兩者不同的地方在於堆的處理上。

通過句柄進行訪問:將堆又劃分爲兩個區域句柄區和實例區,棧中的reference指向句柄區的句柄,句柄我們可以理解爲存放兩個指針的結構體。一個存儲實例區的地址,一個指向方法區的地址。

通過引用訪問:棧中reference直接指向實例對象,實例對象中直接記錄方法區中的地址。

優缺點:通用JDK使用的是通過引用直接訪問的方式,優點就是訪問性能高(比句柄訪問少一次尋址),缺點就是對象遷移(拷貝)頻繁,在垃圾回收過程中消耗更多的資源。


發佈了25 篇原創文章 · 獲贊 21 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章