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

Mun*_*sir 5 java garbage-collection

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

mun*_*ngm 8

请参阅" HotspotTM JavaTM虚拟机中有关垃圾收集的常见问题 ":

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

在1.4.1中有两种情况,分配可能直接发生在老一代.

如果在年轻代中分配失败并且对象是不包含对对象的任何引用的大型数组,则可以将其直接分配给旧代.在一些选择的实例中,该策略旨在通过从旧一代分配来避免年轻一代的收集.

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

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

在1.4.2情况1)中,增量收集器(-Xincgc)的64k字阈值仍然为真.对于默认收集器和并发收集器(-XX:+ UseConcMarkSweepGC),阈值已更改,以便仅在分配的大小大于整个年轻代时才会尝试分配到旧代(当可用空间时它是空的).据观察,有些情况下,默认收集器和并发收集器的1.4.1策略仅导致完整收集(没有完成年轻代收集).我们认为这足以提高门槛.