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

JVM记录生成是否计算在Object或block上?

夏侯渊
2023-03-14

从…起http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html,我发现JVM记录生成依赖于对象:

在下一个小GC,同样的事情发生在伊甸园空间。将删除未引用的对象,并将引用的对象移动到幸存者空间。然而,在这种情况下,它们被移动到第二个幸存者空间(S1)。此外,来自第一幸存者空间(S0)上最后一个次要GC的对象的年龄增加,并移动到S1。一旦所有幸存的物体被移动到S1,S0和伊甸园都会被清除。请注意,现在幸存者空间中有不同年龄的物体。

然而,从Java 4th第124页的思考来看,作者说JVM记录的生成取决于内存块:

如前所述,在这里描述的JVM中,内存是以大的块分配的。如果分配一个大对象,它会得到自己的块。严格的停止和复制要求将每个活动对象从源堆复制到新堆,然后才能释放旧堆,这会转化为大量内存。对于块,垃圾收集通常可以在收集时将对象复制到死块。每个区块都有一个世代计数来记录它是否还活着。在正常情况下,仅压缩自上次垃圾收集以来创建的块;如果其他所有块都是从某个地方引用的,那么它们的生成计数就会发生变化。这将处理大量短期临时对象的正常情况。周期性地进行一次完整扫描,大型对象仍然没有被复制(它们只是让其生成计数颠簸),包含小对象的块被复制和压缩。JVM监控垃圾收集的效率,如果因为所有对象都是长寿命的而浪费时间,则会切换到mark and Sweep。类似地,JVM会跟踪标记和扫描的成功程度,如果堆开始变得支离破碎,它会切换回停止和复制。这就是“适应性”部分的用武之地,所以你最终会满嘴脏话:“适应性世代停止并复制标记和扫描。”

哪一个是正确的?或者他们只是在说些不同的话?请帮我弄清楚。

共有1个答案

仲孙钊
2023-03-14

在HotSpot JVM(Oracle的JVM)中,在对象头中为对象年龄保留了一些位。位的数量可能有所不同,但在任何配置中至少有4位可用。

因此,每个对象的年龄都被单独跟踪。对于HotSpot JVM上可用的所有收集器都是如此。

不过,其他供应商可能有不同的方法。例如,Azul在内存块粒度上跟踪年龄。

 类似资料:
  • 我已经创建了一个Java记录,并且希望有一个构造函数,与默认构造函数相比,它可以接受更少的参数,并根据给定的参数计算和初始化所有成员。 然而,我发现这很难实现,因为自定义构造函数的第一行必须调用默认构造函数。我目前的方法是根据需要调用计算函数,但这会导致不必要的处理。 肯定有更好的方法来实现这一点吗?

  • JDK 14中引入的预览功能(JEP 384)是一个伟大的创新。它们使得创建简单的不可变类变得更加容易,这些类是纯值集合,而不会丢失各种库中泛型元组类固有的上下文。 Brian Goetz写的对JEP的描述(https://openjdk.java.net/jeps/384)很好地解释了意图。然而,我期望与值类型的最终引入有更密切的联系。值类型的最初目标非常广泛:通过消除这些类型对象(例如,引用间

  • 问题内容: 我是Laravel的新手。请原谅新手问题,但是如何查找记录是否存在? 我在这里可以查看是否有记录? 问题答案: 这取决于您之后是否要与用户一起使用,还是仅检查是否存在。 如果要使用用户对象(如果存在): 如果您只想检查 甚至更好

  • 我是拉雷维尔的新手。请原谅这个新手的问题,但是我如何找到是否存在记录? 我可以在这里做什么来查看是否有记录?

  • 注意:用户界面已经在 Dreamweaver CC 和更高版本中做了简化。因此,您可能在 Dreamweaver CC 和更高版本中找不到本文中描述的一些选项。有关详细信息,请参阅此文章。 关于记录删除页 应用程序可以包含允许用户删除数据库中记录的一组页。这组页通常由一个搜索页、一个结果页和一个删除页组成。删除页通常是一个与结果页一同使用的详细页。用户可以使用搜索页和结果页检索记录,并使用删除页来

  • 注意:用户界面已经在 Dreamweaver CC 和更高版本中做了简化。因此,您可能在 Dreamweaver CC 和更高版本中找不到本文中描述的一些选项。有关详细信息,请参阅此文章。 关于记录更新页 您的应用程序可以包含允许用户更新数据库表中现有记录的一组页。这组页通常由一个搜索页、一个结果页和一个更新页组成。用户可以使用搜索页和结果页检索记录,使用更新页修改记录。 搜索要更新的记录 当用户