Jvm的內存可以劃分爲5個區域
1.虛擬機棧(java virtual machine stacks), 一個方法的執行過程,就是一個棧幀進棧和出棧的過程,棧幀包含的信息包括:局部變量表,操作數棧,動態鏈接,方法出口信息等。
其中局部變量表中存放着基本數據類型,對象的引用,returnAddress類型等。
2.本地方法棧(native method stacks), 和虛擬機棧的作用類似,存放的是native的方法。
3.java堆(java heap), 堆是java回收器(gc)的主要工作區域,一般可以分爲新生代和老年代,更細一點,可以分爲eden空間, from survivor空間和to survivor空間。
4.方法區(method area), 方法區中存放着已被虛擬機加載的類信息,常量,靜態變量,即時編譯(Just in time, JIT)後的代碼。
在sun的HotSpot中,一般把方法區稱爲永生代,實際上,應該說是sun用永生代實現了方法區
5.直接內存(direct memory), java使用native方法創建的堆外內存,如NIO。計算機管理員設置java的內存時,需要考慮到該部分的大小,否則容易被髮oom.