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内存区域划分总结的主要内容,如果未能解决你的问题,请参考以下文章

JVM的内存区域划分

JVM 面试 4 连炮,你能顶住么?

JVM的内存区域划分

JVM内存结构---《深入理解Java虚拟机》学习总结

JVM内存结构---《深入理解Java虚拟机》学习总结

JVM的内存区域划分