可以在老一代创建一个对象吗?

时间:2012-07-30 17:12:17

标签: java garbage-collection

将新创建的对象分配给新一代。是否有可能将新创建的对象直接分配给旧的或终身的一代?如果是,那么在哪个基地?

1 个答案:

答案 0 :(得分:8)

请参阅“Frequently Asked Questions about Garbage Collection in the HotspotTM JavaTM Virtual Machine”:

  

对象是否直接分配给老一代?

     

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

     

如果年轻一代的分配失败而且对象是a   大型数组不包含任何对象的引用,它可以   直接分配给老一代。在某些选择实例中,   这个策略旨在避免收集年轻人   通过从旧一代分配来生成。

     

有一面旗帜(1.4.2及更高版本)   l-XX:PretenureSizeThreshold =可以设置为限制   年轻一代的拨款规模。任何分配更大   这将不会在年轻一代中尝试,因此将会如此   分配给老一代。

     

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

     

在1.4.2情况下1)64k字阈值继续为真   增量收集器(-Xincgc)。对于默认收集器和   并发收集器(-XX:+ UseConcMarkSweepGC)的阈值具有   被改变,以便尝试分配到老一代   仅在分配的大小大于整个大小时才会出现   年轻一代(空的时候可用空间)。它被观察到   有些情况下1.4.1策略为默认值   收集器和并发收集器导致完整的收集   只是(没有年轻一代的收藏品)。我们认为   这足以提高门槛。