首页 > 其他 > 详细

JVM堆内存

时间:2020-02-24 13:12:11      阅读:73      评论:0      收藏:0      [点我收藏+]

JVM堆内存

1. JVM堆内存基本模型

JVM虚拟机数据区:


本地方法栈、虚拟机栈、程序计数器

本地内存:

元数据区、直接内存

2. JVM堆内存-青年代详细情况

  • 2.1 青年代划分

    青年代分为伊甸(Eden)、Survivor0(S0)、Survivor1(S1)区,其中默认情况下伊甸和S0、S1内存占比是8:1:1(原因是HotSpot虚拟机设计团队认为超过80%的对象在一次GC中就会被回收,实际上IBM公司做过研究98%的对象只会被使用一次。PS:在一些博客上看到写的是年轻代中三个区的比是6:1:1但是我在“深入理解JAVA虚拟机第二版”第70页中看到的是8:1:1,所以此处我认为8:1:1是正确的)

  • 2.2 青年代对象特点

    青年代对象特点是"朝生夕死"即短时间内会产生大量死亡对象,默认大小为堆大小的1/15。
    -Xmn:16m 参数可以设置年轻代的固定大小(示例为设置年轻代大小为16m)
    -XX:NewRatio=4 可以设置年轻代与老年代的大小比例(示例为设置年轻代与老年代大小比例是1:4)

    -Xmx:xxx 和 -Xms:xxx 可以设置堆总的大小,老年代只能通过-Xmn或-XX:NewRatio参数间接设置

  • 2.3 青年代垃圾回收

    基于青年代的对象产生-消亡特点,所以在青年代中的垃圾回收采用的是复制-清除算法,对青年代的垃圾回收称为初级回收(即:Minor GC)
    Minor GC过程如下:
    步骤1. 程序挂起
    步骤2. 将Eden区和活动Survivor区中存活的对象复制到另一个Survivor区中,复制的同时将对象的存活次数计数器加1如果对象次数达到设定次数会被移入老年代,对象过大也会被移入老年代
    步骤3. 清除原来的Eden区和原来的活动Survivor区
    步骤4. 将原来的Survivor区标记为非活动区,将对象移入的Survivor区标记为活动区
    -XX:MaxTenuringThreshold=20参数设定送往老年代之前的次数,默认是15
    -XX:PretenureSizeThreshold=3m参数设定直接送往老年代的对象大小,该参数无默认值

JVM堆内存

原文:https://www.cnblogs.com/kbhan/p/12315915.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!