当前位置: 首页 > 知识库问答 >
问题:

为什么JVM的GC喜欢不变对象?

翟凯
2023-03-14

共有1个答案

东郭鸿福
2023-03-14

如果GC可以知道一个对象不包含对任何gen0对象的任何引用,那么在执行gen0收集时可以忽略它。同样,如果一个对象不包含对任何gen0或gen1对象的任何引用,则在执行gen1收集时可能会忽略它。在收集过程中可以忽略的对象越多,收集的速度就越快。

如果一个对象在gen0 GC中幸存下来,它可以肯定它曾经持有引用的任何gen0对象都将被提升到Gen1;同样,如果一个不包含任何gen0引用的对象在gen1 GC中幸存下来,那么它包含的任何gen1引用都将被提升为Gen2。因此,一旦在gen0收集期间检查了一个对象,就不需要在下一个gen1收集之前再次检查它,除非它被修改。同样,在gen1集合期间检查的对象直到下一个gen2集合才需要检查,除非它被修改。

知道对象是否被修改是一个棘手的问题,但关键是如果对象没有被修改,这对GC非常有利。

 类似资料:
  • 问题内容: 查理·亨特(Charlie Hunt)在他的演讲中说,大型对象对JVM GC不利。因为: 大对象的分配和初始化非常昂贵。 不同大小的大对象可能会导致Java堆碎片化。 如何定义大对象?我怎么知道物体是否是大物体?谢谢 问题答案: 该定义取决于平台,JVM和JVM配置。例如,以下摘自Michael Kopp 的三篇大型JVM 博客文章 中的“垃圾回收如何不同” : 大小物体 JRocki

  • 问题内容: 我有这样一行: Pylint显示警告: 这是为什么?列表理解是推荐的方法吗? 我当然可以这样重写: 而且我没有收到任何警告,但是我想知道是否为此有一个PEP? 问题答案: 皮林特(Pylint)经常谈论不该做的事情。您可以在.pylintrc文件中禁用警告。 此页面http://pylint-messages.wikidot.com/messages:w0141指示问题在于过滤器和映射

  • 本文向大家介绍说说微信上你最喜欢的功能,以及为什么喜欢。相关面试题,主要包含被问及说说微信上你最喜欢的功能,以及为什么喜欢。时的应答技巧和注意事项,需要的朋友参考一下 喜欢: 1.小程序---节省了好多额外APP下载,大有“微信在手天下我有”的畅***;微信页下滑或搜索就可以很便捷地找到小程序的入口;与好友之间的分享也很方便。 2.订阅公众号---方便了解阅读各种感兴趣的信息与资讯;便于打发利用碎

  • 问题内容: 我已经看到很多代码都有声明,例如,它来自哪里?这是某种惯例吗?我认为’clazz’甚至不是英语单词,根本没有意义,那么多的程序员又怎能巧合地给一个错误的名字起名字呢? 问题答案: 从JDK 1.0开始,在Java中已使用Java代替保留字“ class”。“ class”是您想要的,但是缩写或插入垃圾(“ a”,“ the”,“ _”等)会降低清晰度。只是说课。“国际”英语使用者(同时

  • 问题内容: 是否可以在一个查询中将多个SQL LIKE通配符串在一起-像这样? 目的是查找同时包含通配符但没有特定顺序的记录。 问题答案: 正确的SQL语法是: