问题描述
该定义取决于平台,JVM和JVM配置。例如,以下摘自Michael Kopp的三篇大型JVM 博客文章中的“垃圾回收如何不同” :
JRockit在分配期间区分大对象和小对象。 对象被视为大对象的限制取决于JVM版本,堆大小,垃圾回收策略和所使用的平台。 ( 斜体字 -DL。)通常在2到128 KB之间。如果直接在旧世代中生成世代堆,则将大对象分配在线程本地区域之外。当您开始考虑时,这很有意义。年轻一代使用副本收集。在某个时候,复制对象比遍历垃圾回收中遍历的对象要昂贵得多。
关于第二个问题,我不确定如何获取该阈值,但是特别是在HotSpot中,您可以 设置 它:
-XX:PretenureSizeThreshold=2m
有关此选项和许多其他选项的详细信息,请参阅Alexey Ragozin 的 HotSpot
JVM垃圾回收选项备忘单-XX
。
解决方法
查理·亨特(Charlie Hunt)在他的演讲中说,大型对象对JVM GC不利。因为:
-
大对象的分配和初始化非常昂贵。
-
不同大小的大对象可能会导致Java堆碎片化。
如何定义大对象?我怎么知道物体是否是大物体?谢谢