JVM内存区域划分总结
Posted yuan-zhou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于JVM内存区域划分总结的主要内容,如果未能解决你的问题,请参考以下文章