专栏首页架构技术专栏知识点:对象内存分配与回收
原创

知识点:对象内存分配与回收

​每日一个知识点系列的目的是针对某一个知识点进行概括性总结,可在一分钟内完成知识点的阅读理解,此处不涉及详细的原理性解读,只作为一种抛砖引玉。真正的理解一定是你自我研究探索所收获的知识。

1、大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC。虚拟机提供-XX:+PrintGCDetails参数可打印内存回收日志。

2、大对象直接进入老年代

大对象就是指需要大量连续内存空间的Java对象,最典型的大对象便是那种很长的字符串,或者元素数量很庞大的数组。

开发中要避免“朝生夕灭”的“短命大对象”,原因就是在分配空间时,它容易导致内存明明还有不少空间时就提前触发垃圾收集,以获取足够的连续空间才能安置好它们,而当复制对象时,大对象就意味着高额的内存复制开销。

使用-XX:PretenureSizeThreshold参数指定大于该值的对象直接在老年代分配(只对Serial和ParNew有效)。这样做的目的就是避免在Eden区及两个Survivor区之间来回复制,产生大量的内存复制操作。

3、长期存活的对象将进入老年代

对象在Eden中每经过一次Minor GC后仍然存活,并且Survivor空间足够的话就会被移动到Survivor空间中,并将对象年龄加一(对象年龄在对像头中),当到达一定年龄(默认15)就会晋升到老年代,可以通过参数-XX:MaxTenuringThreshold设置。

4、动态对象年龄判定

如果在Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,无需等到15次Minor GC。

5、空间分配担保

在Minor GC前虚拟机会去先检查老年代的最大可用连续空间是否大于新生代所有对象总空间。

如果大于,那此次Minor GC保证是安全的。

如果小于新生代对象和,那就会去查看-XX:HandlePromotionFailure设置是不是允许担保失败。

如果允许,就会继续检查老年代最大可用连续空间是否大于历次晋升到老年代对象的平均大小。

如果大于,就会尝试进行下Minor GC

如果小于或者-XX:HandlePromotionFailure 为false那就直接进行Full GC

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 每日一个知识点:什么时候会触发Full GC

    只是建议虚拟机执行 Full GC,但是虚拟机不一定真正去执行。不建议使用这种方式,而是让虚拟机管理内存。

    架构技术专栏
  • 看懂这篇,才能说了解并发底层技术

    前两天我搞了两个每日一个知识点,对多线程并发的部分知识做了下概括性的总结。但通过小伙伴的反馈是,那玩意写的比较抽象,看的云里雾里晕晕乎乎的。

    架构技术专栏
  • 干货 | 14张图解读并发底层原理

    前两天我搞了两个每日一个知识点,对多线程的部分知识做了下概括性的总结。但通过小伙伴的反馈是,那玩意写的比较抽象,看的云里雾里晕晕乎乎的。所以又针对多线程底层这一...

    架构技术专栏
  • 腾讯云服务器Windows系统添加数据库盘并挂载

    老蒋平时较多的时候VPS、服务器用Linux系统,只是有些需要在远程运行软件的时候会用到Windows系统。在前几天的腾讯云系列文章中老蒋有介绍到Linux系统...

    老蒋
  • SpringBoot 根据运行环境选择不同的配置文件

    而不同的环境中,软件系统的配置是不一样的。例如,在测试的时候用测试数据库,而在生产环境用正式的数据。

    zhangyunfeiVir
  • 你的软件按什么卖?套数、CPU数、核数还是CPU的计算能力? 博客分类: 心困网中央 IBMOracleLotusExcelASP

    Oracle实行的则是按照所谓的“processor factor”(处理器因子)来收费的。Oracle根据每个处理有几个核把核数乘以对应的一个数值,然后决定需...

    阿敏总司令
  • IO总结

    三、重点 四、操作 0、打印文件|目录 1、文件拷贝 2、关闭流方法 3、文件分割与合并(自学)

    shimeath
  • Asp.Net Web API 2第六课——Web API路由和动作选择

          Asp.Net Web API第一课——入门http://www.cnblogs.com/aehyok/p/3432158.html

    aehyok
  • 【codevs1012】最大公约数和最小公倍数

    输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数

    饶文津
  • Vue + Webpack 将路由文件分拆为多个文件分别管理简明教程

    近日,有网友留言,询问,如何将 vue 的路由分拆为多个文件进行管理。这当然是可以的。今天我就来写一个简单的教程,希望对大家有所帮助。

    FungLeo

扫码关注云+社区

领取腾讯云代金券