【问题标题】:Could an object be created in old generation?可以在老年代创建对象吗?
【发布时间】:2012-07-28 09:41:12
【问题描述】:

作为一个新创建的对象被分配给新的一代。是否有可能将新创建的对象直接分配给老一代或老一代?如果是,那么基于哪些?

【问题讨论】:

  • 你不应该担心或关心垃圾收集器的工作原理。

标签: java garbage-collection


【解决方案1】:

见“Frequently Asked Questions about Garbage Collection in the HotspotTM JavaTM Virtual Machine”:

对象会直接分配到老年代吗?

在 1.4.1 中有两种情况可能会直接分配到 老一代。

如果在年轻代分配失败并且对象是 不包含对对象的任何引用的大数组,它可以是 直接分配到老年代。在某些特定情况下, 该策略旨在避免收集年轻人 从老年代分配。

有一个标志(在 1.4.2 及更高版本中可用) l-XX:PretenureSizeThreshold= 可以设置限制 年轻代分配的大小。任何更大的分配 这不会在年轻一代中尝试,因此将是 从老年代分配出去。

1) 的阈值大小为 64k 字。默认大小为 PretenureSizeThreshold 为 0,表示可以分配任何大小 在年轻一代。

在 1.4.2 案例 1) 中,64k 字阈值对于 增量收集器 (-Xincgc)。对于默认收集器和 并发收集器(-XX:+UseConcMarkSweepGC)阈值有 已更改,以便尝试分配到老年代 仅当分配的大小大于整个分配时才会发生 年轻代(空时可用空间)。它被观察到 在某些情况下,默认的 1.4.1 策略 收集器和并发收集器导致完全收集 仅(没有进行年轻代收集)。我们认为 糟糕到提高门槛。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-02
  • 2016-01-04
  • 1970-01-01
  • 2021-07-08
  • 1970-01-01
  • 2021-07-01
相关资源
最近更新 更多