做爲一個java開發 jvm 你就必需要了解一下,java
如今從最基本運行時數據區開始學習。數組
首先須要先了解下 運行時數據區域是如何劃分的jvm
內存區主要能夠劃分爲以下幾部分學習
1)方法區線程
2)堆對象
3)a 虛擬機堆棧 b本地方法棧生命週期
4)程序計數器內存
其中1)2)是線程共享的 3)4)線程私有生命週期與線程同步。開發
下面介紹下各區域主要存儲數據類型編譯器
程序計數器是:一塊較小的內存空間 能夠看做當前線程所執行的字節碼的行號指示器
若是是java方法 則計數器記錄的是正在執行的虛擬機字節碼指令的地址,若是是native方法(java調用非java方法)則這個計數器的值爲空;
java虛擬機棧 :每一個方法執行時都會建立一個棧幀用於存儲局部變量表,操做數棧,動態連接,方法出口等信息,每一個方法從調用到執行都對應着一個棧幀的入棧到出棧。局部變量表存放預編譯期可知的各類基本數據類型,對象引用類型(不等同於對象的實例對象實例存儲於堆中),returnAddress類型(指向一條字節碼指令的地址)局部變量表所需的內存空間在預編譯期完成分配。
本地方法棧:與虛擬機棧相同區別在於本地方法棧爲native方法服務。
java堆:堆內存主要存儲對象實例,數組;
方法區: 主要存儲類信息,常量,靜態變量,即時編譯器編譯後的代碼等數據
作一些基本知識的總結。