将新创建的对象分配给新一代。是否有可能将新创建的对象直接分配给旧的或终身的一代?如果是,那么在哪个基地?
答案 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策略为默认值 收集器和并发收集器导致完整的收集 只是(没有年轻一代的收藏品)。我们认为 这足以提高门槛。