運行時數據區:方法區,堆,虛擬機棧,PC(程序計數)寄存器,本地方法棧
方法區和堆是線程共享的,其它爲線程私有java
方法區存放了所加載的類的信息(名稱、修飾符等)、類中的靜態變量、類中定義爲final類型的常量、類中的Field信息、類中的方法信息,當開發人員在程序中經過Class對象中的getName、isInterface等方法來獲取信息時,這些數據都來源於方法區域,同時方法區域也是全局共享的,在必定的條件下它也會被GC,當方法區域須要使用的內存超過其容許的大小時,會拋出OutOfMemory的錯誤信息。服務器
堆內存分配
JVM初始分配的內存由-Xms指定,默認是物理內存的1/64;
JVM最大分配的內存由-Xmx指 定,默認是物理內存的1/4。
默認空餘堆內存小於40%時,JVM就會增大堆直到-Xmx的最大限制;
空餘堆內存大於70%時,JVM會減小堆直到 -Xms的最小限制。
所以服務器通常設置-Xms、-Xmx相等以免在每次GC 後調整堆的大小。
對象的堆內存由稱爲垃圾回收器(GC)的自動內存管理系統回收。 spa
虛擬機棧是線程私有的,每一個線程建立的同時都會建立JVM棧,
JVM棧中存放的爲當前線程中局部基本類型的變量(java中定義的八種基本類型:boolean、char、byte、short、int、long、float、double)、部分的返回結果以及Stack Frame,
非基本類型的對象在JVM棧上僅存放一個指向堆上的地址
線程