什么是JVM GC的大对象

时间:2013-01-07 05:16:30

标签: java garbage-collection jvm

Charlie Hunt说他的presentation中的大型对象对JVM GC不利。这是因为:

  1. 分配和初始化大对象的成本很高。

  2. 不同大小的大对象可能导致Java堆fregmentation。

  3. 如何定义大对象?我怎么知道对象是否是大对象?感谢

3 个答案:

答案 0 :(得分:3)

定义取决于平台,JVM和JVM配置。例如,这里摘录自迈克尔科普的How Garbage Collection differs in the three big JVMs博客文章:

  

大小物件

     

JRockit在此期间区分大型和小型物体   分配。 对象被视为大的时间的限制取决于   关于JVM版本,堆大小,垃圾收集策略和   使用的平台。 italics mine - DL。)通常介于2到128 KB之间。大   如果是a,则在线程局部区域外分配对象   世代堆直接在老一代。这使得很多   当你开始思考它时感觉到。年轻一代使用了   复制ccollection。在某些时候复制对象变得更多   比在垃圾收集中遍历它要贵。

关于你的第二个问题,我不知道如何获得该阈值,但特别是在HotSpot中你可以设置

-XX:PretenureSizeThreshold=2m

有关此问题及许多其他-XX选项的详情,请参阅Alexey Ragozin的HotSpot JVM garbage collection options cheat sheet

答案 1 :(得分:1)

没有关于其大小的理论定义,但这将取决于您的JVM配置,例如,如果年轻一代很小,那么即使是小类也会导致太多交换(GC)。如果你的对象在你的JVM堆上足够大,那么GC将需要做更多的工作来分配并从堆中声明它们。这将导致“停止世界”#34;问题更频繁。

答案 2 :(得分:0)

从GC的角度来看,一般来说大对象意味着:

  • 分配费用昂贵的对象
  • 初始化费用昂贵的对象

例如:大小为10000的arraylist。