JVM堆内存详解

       JVM的内存结构模型在往期文章中已经介绍过了,下面我们来介绍一下堆内存中的划分;堆内存中可以分为老年代年轻代,而年轻代又分为Eden区和Survivor区,其中Survivor区又分为from和to区;在对象最新创建时一般都是在Eden区,关系分布如下图:

JVM堆内存详解_第1张图片

        图中的fen分数表示每块区域的占比,例如:堆内存分配为600M,那么老年代则占用400M;而年轻代则占200M,其中Eden区占160M,from区占20M,to区占20M。

        说道这就不得不提一下垃圾回收机制了,年轻代的垃圾回收使用的是minor GC,这是一种轻量GC,会在每次Eden占满后进行,而其主要是根据对象有没有GC Root来确定是否移除;而老年代则是通过Full GC来进行垃圾回收,但是Full GC消耗较大,一般会停止当前虚拟机中所有线程,成本比较大。

        注:GC Root是在垃圾回收算法-可达性分析算法中的概念,GC Root一般为线程虚拟机本地变量、静态变量、常量对象、本地方法栈变量(native方法中的变量),主要是对没有GC Root根的对象进行回收,如下图:

        JVM堆内存详解_第2张图片

        线程虚拟机本地变量即在线程虚拟机栈中局部变量表中的对象,缺少GC Root根代表堆内存中的对象并未被局部变量表中的对象引用

 

关于虚拟机内存模型可关注本人微信公众号在往期JVM虚拟机文章中查看

 

JVM堆内存详解_第3张图片

你可能感兴趣的:(java,jvm一步一步)