JVM内存区域划分总结

发现网上有两个版本的JVM内存划分,一个是按照《深入理解JVM虚拟机》上的版本,包含程序计数器等,按照是否线程共享划分。

另一个我觉得更好记一些,也更适合我自己,在这里记录一下。

首先上思维导图:

一个个来说道吧。

堆内存 heap

堆内存主要被划分为新生代和老年代(差不多的意思)

基本上所有对象实例都在堆中创建,因此堆内存经常发生GC回收操作。新的对象首先分配在Eden区,两个Surviior区仅作为Eden区的缓冲使用。每次GC回收一次,对象的age值就+1,当Survivor区对象age值大于15时(默认,可更改:-XX:MaxTenuringThreshold),就被转移到老年代。

新生代下又划分为三个区,即Eden Space,To Survivor ,From Survivor。新生代占用堆内存的1/3,而三个区的内存占用情况如下图:

 JVM默认Yong和Old分配比例为1:2,即新生代的内存大小为堆内存的1/3。

调整参数:–XX:NewRatio

而新生代中,Eden、from、to的默认比例为8:1:1,JVM每次只会使用一块Survivor区来为对象服务,所以,不论何时,都存在一个空闲的Survivor区域

调整参数:–XX:SurvivorRatio 

老年代的内存大小为剩下的2/3

猜你喜欢

转载自www.cnblogs.com/yuan-zhou/p/11311210.html