java記憶體配置機制

來源:互聯網
上載者:User

 通過這幾天對一個記憶體溢出程式的監控,學習了程式運行時對記憶體的使用機制,在這裡和大家分享下。

        Java程式運行在JVM(Java  Virtual Machine,Java虛擬機器)上,可以把JVM理解成Java程式和作業系統之間的橋樑,JVM實現了Java的平台無關性,由此可見JVM的重要性。所以在學習Java記憶體配置原理的時候一定要牢記這一切都是在JVM中進行的,JVM是記憶體配置原理的基礎與前提。

        一個完整的Java程式運行過程會涉及以下記憶體地區:

 

        寄存器:JVM內部虛擬寄存器,存取速度非常快,程式不可控制。

        棧:儲存局部變數的值,包括:a.用來儲存基礎資料型別 (Elementary Data Type)的值;b.儲存類的執行個體,即堆區對象的引用(指標)。也可以用來儲存載入方法時的幀。

        堆:用來存放動態產生的資料,比如new出來的對象。注意建立出來的對象只包含屬於各自的成員變數,並不包括成員方法。因為同一個類的對象擁有各自的成員變數,儲存在各自的堆中,但是他們共用該類的方法,並不是每建立一個對象就把成員方法複製一次。

        常量池:JVM為每個已載入的類型維護一個常量池,常量池就是這個類型用到的常量的一個有序集合。包括直接常量(基本類型,String)和對其他類型、方法、欄位的符號引用(1)。池中的資料和數組一樣通過索引訪問。由於常量池包含了一個類型所有的對其他類型、方法、欄位的符號引用,所以常量池在Java的動態連結中起了核心作用。常量池存在於堆中

        程式碼片段:用來存放從硬碟上讀取的來源程式代碼。

        資料區段:用來存放static定義的靜態成員。

表示記憶體配置圖:


 

對於java 和記憶體之間,有如下幾點需要注意:

 1.一個Java檔案,只要有main入口方法,我們就認為這是一個Java程式,可以單獨編譯運行。

  2.無論是普通類型的變數還是參考型別的變數(俗稱執行個體),都可以作為局部變數,他們都可以出現在棧中。只不過普通類型的變數在棧中直接儲存它所對應的值,而參考型別的變數儲存的是一個指向堆區的指標,通過這個指標,就可以找到這個執行個體在堆區對應的對象。因此,普通類型變數只在棧區佔用一塊記憶體,而參考型別變數要在棧區和堆區各佔一塊記憶體。

3.分清什麼是執行個體什麼是對象。Class a= new Class();此時a叫執行個體,而不能說a是對象。執行個體在棧中,對象在堆中,操作執行個體實際上是通過執行個體的指標間接操作對象。多個執行個體可以指向同一個對象。

 4.棧中的資料和堆中的資料銷毀並不是同步的。方法一旦結束,棧中的局部變數立即銷毀,但是堆中對象不一定銷毀。因為可能有其他變數也指向了這個對象,直到棧中沒有變數指向堆中的對象時,它才銷毀,而且還不是馬上銷毀,要等記憶體回收掃描時才可以被銷毀。

 5.以上的棧、堆、程式碼片段、資料區段等等都是相對於應用程式而言的。每一個應用程式都對應唯一的一個JVM執行個體,每一個JVM執行個體都有自己的記憶體地區,互不影響。並且這些記憶體地區是所有線程共用的。這裡提到的棧和堆都是整體上的概念,這些堆棧還可以細分。

6 .類的成員變數在不同對象中各不相同,都有自己的儲存空間(成員變數在堆中的對象中)。而類的方法卻是該類的所有對象共用的,只有一套,對象使用方法的時候方法才被壓入棧,方法不使用則不佔用記憶體。

 

轉自:http://javawebsoa.iteye.com/blog/1558776

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.