以下是一些会出现Full GC的情况以及对象进入老年代的条件:

出现Full GC的情况

老年代空间不足:当老年代中剩余空间无法满足新对象的分配需求时,就会触发Full GC,以回收老年代中的垃圾对象,释放空间。

持久代(元空间)空间不足:在Java 7及之前的版本中,持久代用于存储类的元数据等信息。当持久代空间不够时,会引发Full GC。在Java 8及之后,元空间取代了持久代,若元空间使用达到限制,同样可能导致Full GC。

**显示调用 System.gc() **:程序中显示调用 System.gc() 方法,会建议JVM执行Full GC,但JVM不一定会立即执行,它会根据自身的判断来决定是否执行。

空间分配担保失败:在进行新生代GC时,如果发现新生代中存活的对象在老年代中没有足够的空间存放,就会进行空间分配担保。若担保失败,则会触发Full GC。

对象进入老年代的条件

年龄达到阈值:对象在新生代中经历多次垃圾回收后仍然存活,其年龄就会增加。当年龄达到一定阈值(默认是15,可以通过 -XX:MaxTenuringThreshold 参数设置)时,对象会被晋升到老年代。

大对象直接进入老年代:如果创建的对象比较大,超过了新生代中 Eden区或Survivor区的大小,那么这个对象会直接进入老年代。可通过 -XX:PretenureSizeThreshold 参数设置大对象的阈值。

动态年龄判断:在新生代进行垃圾回收时,如果Survivor区中相同年龄的所有对象大小总和超过了Survivor区的一半,那么年龄大于或等于该年龄的对象就可以直接进入老年代。

什么情况下会出现full gc,什么时候对象会进入老年代?的更多相关文章

  1. [翻译] 编写高性能 .NET 代码--第二章 GC -- 减少大对象堆的碎片,在某些情况下强制执行完整GC,按需压缩大对象堆,在GC前收到消息通知,使用弱引用缓存对象

    减少大对象堆的碎片 如果不能完全避免大对象堆的分配,则要尽量避免碎片化. 对于LOH不小心就会有无限增长,但LOH使用的空闲列表机制可以减轻增长的影响.利用这个空闲列表,我们可以在两块分配区域中间找到 ...

  2. 对象何时进入老年代、何时发生full gc

    一.对象何时进入老年代 (1)当对象首次创建时, 会放在新生代的eden区, 若没有GC的介入,会一直在eden区, GC后,是可能进入survivor区或者年老代 (2)当对象年龄达到一定的大小 , ...

  3. 在多线程的情况下是由Iterator遍历修改集合对象,报ConcurrentModificationException()异常的根因分析

    遍历List时抛ConcurrentModificationException异常原理分析     http://www.blogjava.net/houlinyan/archive/2008/04/ ...

  4. 什么是新生代 GC 和老年代 GC

    GC 经常发生的区域是堆区,堆区还可以细分为新生代.老年代 jvm堆示意图 新生代 一个 Eden 区 两个 Survivor 区 老年代 默认 新生代(Young)与老年代(Old)的比例的值为 1 ...

  5. 【转载】为什么不建议<=3G的情况下使用CMS GC

    之前曾经有讲过在heap size<=3G的情况下完全不要考虑CMS GC,在heap size>3G的情况下也优先选择ParallelOldGC,而不是CMS GC,只有在暂停时间无法接 ...

  6. DeskMini无传统机械键盘与鼠标接口的情况下使用U盘安装系统经验总结

    总结安装纯净版Win7旗舰版系统安装过程所解决的问题要点: 1:UEFI引导启动的实现. 2:使用Dism++实现系统的安装. 3:使用Dism++解决新主板在安装系统过程中不能使用USB键盘和鼠标的 ...

  7. 【转】Java中的新生代、老年代、永久代和各种GC

    JVM中的堆,一般分为三大部分:新生代.老年代.永久代: 1 新生代 主要是用来存放新生的对象.一般占据堆的1/3空间.由于频繁创建对象,所以新生代会频繁触发MinorGC进行垃圾回收. 新生代又分为 ...

  8. 关于gc日志中Desired Survivor的疑问和对象晋升老年代的小结

    问题背景 (下面的所有内容都是根据书上的Serial/Serial Old收集器下的情况) 在<深入理解JVM>一书中的——3.6.3长期存活的对象将进入老年代的介绍中, 一个例子的jvm ...

  9. JVM进入老年代情况

    1.躲过15次GC之后进入老年代 默认的设置下,当对象的年龄达到15岁的时候,也就是躲过15次Gc的时候,他就会转移到老年代中去 这个具体是多少岁进入老年代,可以通过JVM参数 “-XX:MaxTen ...

  10. GC 老年代 新生代

    参考资料: http://blog.csdn.net/flamezyg/article/details/44673951 http://www.blogjava.net/ldwblog/archive ...

随机推荐

  1. Linux环境使用apt-get安装telnet、curl、ifconfig、vim、ping等工具【转】

      当在Linux服务器执行Telnet命令时,如果提示command not found: telnet,说明服务器上并未安装Telnet命令,需要安装此命令.下面介绍在linux服务器如何安装te ...

  2. maven导入org.apache.pdfbox

    PDF和图片相互转换用到的maven依赖如下: <dependency> <groupId>org.apache.pdfbox</groupId> <arti ...

  3. 在Mac上使用docker运行gitlab-ce

    首先创建相关路径,并设置权限: mkdir -p /opt/gitlab/{config,data,logs} sudo chmod -R 777 /opt/gitlab 使用如下docker-com ...

  4. 在Ubuntu上使用Let's Encrypt配置Nginx SSL证书并自动更新

    在Ubuntu上使用Let's Encrypt配置Nginx SSL证书并自动更新 绪言 这篇文章其实内容不多,难度不大,只是自己记录一下. Arisu拷打了我几次我在阿里云上花钱购买SSL证书一事. ...

  5. Spring、Spring Framework、Spring Boot、Spring Cloud的区别

    Spring Spring是一个生态体系(也可以说是技术体系),是集大成者,它包含了Spring Framework.Spring Boot.Spring Cloud等(还包括Spring Cloud ...

  6. frp实现内网穿透访问内网多台Linux服务器

    本文主要记录笔者在使用frp实现内网穿透访问内网多台Linux服务器的全过程,包括公网服务器的配置.frp服务端.客户端的下载与配置,以及配置systmctl来实现系统级启停frp,并记录我遇到的一些 ...

  7. 「Temp」目录

    吃吃吃 \(\color{orange}{Eon\ 今天吃什么}\) Temp \(\color{magenta}{代码模板}\) Trick \(\color{magenta}{常见错误}\) \( ...

  8. 「Log」2023.8.15 小记

    序幕 七点多到校,整理博客,开始调昨天没整完的题. 手算哈希,把所有部分都先改成暴力. 好消息,暴力没问题,准备改成正解. 学长开始讲课,AC 自动机,秒了. 接着调题,过了.开心. \(\color ...

  9. idea类和方法的注释模板设置

    作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 目录 1.在idea中设置类模板 2.设置方法注释模板 软件:idea 版本:2019.3.1 1.在idea中设置类模板 /** * @Class ...

  10. Kubernetes控制器-Horizontal Pod Autoscaler(HPA)

    Horizontal Pod Autoscaler(HPA) 我们可以通过手动执行kubeclt sacle命令实现Pod的扩缩容,但是这显然不符合Kubernetes的定位目标-自动化和智能化.Ku ...