Java內存分配全面淺析

 本文將由淺入深詳細介紹Java內存分配的原理,以幫助新手更輕鬆的學習Java。這類文章網上有不少,但大多比較零碎。本文從認知過程角度出發,將帶給讀者一個系統的介紹。數組

         進入正題前首先要知道的是Java程序運行在JVM(Java  Virtual Machine,Java虛擬機)上,能夠把JVM理解成Java程序和操做系統之間的橋樑,JVM實現了Java的平臺無關性,因而可知JVM的重要性。因此在學習Java內存分配原理的時候必定要牢記這一切都是在JVM中進行的,JVM是內存分配原理的基礎與前提。學習

         簡單通俗的講,一個完整的Java程序運行過程會涉及如下內存區域:操作系統

 

         l  寄存器:JVM內部虛擬寄存器,存取速度很是快,程序不可控制。指針

         l  棧:保存局部變量的值,包括:1.用來保存基本數據類型的值;2.保存類的實例,即堆區對象的引用(指針)。也能夠用來保存加載方法時的幀。對象

         l  堆:用來存放動態產生的數據,好比new出來的對象。注意建立出來的對象只包含屬於各自的成員變量,並不包括成員方法。由於同一個類的對象擁有各自的成員變量,存儲在各自的堆中,可是他們共享該類的方法,並非每建立一個對象就把成員方法複製一次。索引

         l  常量池:JVM爲每一個已加載的類型維護一個常量池,常量池就是這個類型用到的常量的一個有序集合。包括直接常量(基本類型,String)和對其餘類型、方法、字段的符號引用(1)。池中的數據和數組同樣經過索引訪問。因爲常量池包含了一個類型全部的對其餘類型、方法、字段的符號引用,因此常量池在Java的動態連接中起了核心做用。常量池存在於堆中內存

         l  代碼段:用來存放從硬盤上讀取的源程序代碼。虛擬機

         l  數據段:用來存放static定義的靜態成員。基礎

 

下面是內存表示圖:變量

相關文章
相關標籤/搜索