Java記憶體結構

來源:互聯網
上載者:User

標籤:指標   錯誤   管理   alt   bool   解譯器   檔案中   最大的   不容易   

Java 記憶體結構簡介
    對於c  c++ 開發,記憶體管理他們擁有最高的權利,複雜一個對象生命的開始到終結。    對於Java,程式員在虛擬機器自動記憶體管理的機制協助下,不再需要為每個new操作去配對free/delete代碼,不容易出現記憶體溢出和泄漏問題,虛擬機器管理記憶體是美好的。但如果出現記憶體溢出和泄漏,如果不知道虛擬機器是如何使用記憶體的,那麼排除錯誤是一件異常艱難的事。
運行時資料區域

java虛擬機器在運行時將記憶體劃分為若干個不同的資料區域,這些地區有不同的用途,以及建立和銷毀的時間,根據java虛擬機器規範的規定,java虛擬機器所管理的記憶體分為以下幾個地區。線程共用有: 方法區和堆 ,線程私人的有程式計數器、虛擬機器棧(平時說的棧)和本地方法棧。:

程式計數器
這是一塊較小的記憶體空間,它可以看作是當前線程所執行的位元組碼的行號器。位元組碼解譯器工作時,就是通過改變它來選擇要執行那條指令,分支、迴圈、跳轉、異常處理、線程恢複等基礎功能都需要依賴這個計數器完成。唯一一個沒有OutOfMemoryError的地區。
虛擬機器棧
線程在運行方法是都會建立一個棧幀,用於儲存局部變數表,運算元棧,動態連結,方法出口等資訊,每一個方法從調用到結束,表示一個棧幀的如棧出棧的過程。平時我們說的棧記憶體一般指的就是虛擬機器棧的局部變數表,裡面儲存這基本變數(boolean,byte,char,short,int,float,double,long)和對象的引用(reference)類型,對於long 和 double佔用兩個局部變數空間,其餘的資料類型只佔用一個.出現異常情況,1.請求的棧深度大於虛擬機器允許的深度 2.無法申請到足夠的記憶體,發生OutOfMemoryError異常
本地方法棧
與虛擬機器棧相似,區別虛擬棧執行Java方法服務,本地方法棧使用到的是native方法服務
Java堆
這是Java記憶體中最大的一塊,也是最重要的一塊,是記憶體共用的.基本上所有的對象都是在這裡建立的在這裡分配記憶體,是Java垃圾處理器主要區域,也被稱為gc堆(Garbage Collected  Heap),通過-Xmx和-Xms控制大小。
方法區
線程共用,主要儲存有載入的類資訊,常量,靜態變數和JIT編譯後的代碼等資料。現在的永生代就是指方法區(很少GC),GC主要針對這個地區的常量池和類型的卸載,回收成績相當令人不滿意。在Sun公司的BUG列表中,有好幾個嚴重的方法區記憶體流失的BUG。
常量池
個人感覺這塊地區比較複雜.它分為兩種形態1.靜態常量池,即存放class檔案的常量池,class檔案中的常量池不僅僅包含字串(數字)字面量,還包含類、方法的資訊,佔用class檔案絕大部分空間。2.運行時常量池,即Jvm虛擬機器在完成類載入操作後,將class檔案中的常量池載入到記憶體中,並儲存在方法區,我們平時說的常量池,就是指方法區中的運行時常量池

兩則的關係,

對象訪問定位

1.控制代碼訪問對象

2.指標對象訪問

Java記憶體結構

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.