簡體   English   中英

什么是JVM GC的大對象

[英]What is large object for JVM GC

Charlie Hunt說,大型對象在他的演示文稿中對JVM GC不利。 因為:

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

  2. 不同大小的大對象可能導致Java堆fregmentation。

如何定義大對象? 我怎么知道對象是否是大對象? 謝謝

定義取決於平台,JVM和JVM配置。 例如,以下摘錄自Michael Kopp撰寫的三大JVMs博文中垃圾收集的不同之處

大小物體

JRockit在分配期間區分大小對象。 將對象視為大的限制取決於JVM版本,堆大小,垃圾收集策略和使用的平台。 italics mine - DL。)它通常介於2到128 KB之間。 如果直接在舊代中生成堆,則在線程局部區域外部分配大對象。 當你開始思考它時,這很有意義。 年輕一代使用副本ccollection。 在某些時候,復制對象變得比在垃圾收集中遍歷它更昂貴。

對於你的第二個問題,我不知道如何獲得該閾值,但特別是在HotSpot中你可以設置它:

-XX:PretenureSizeThreshold=2m

有關此以及許多其他-XX選項的詳細信息,請參閱Alexey Ragozin的HotSpot JVM垃圾收集選項備忘單

它的大小沒有理論定義,但這將取決於您的JVM配置,例如,如果年輕一代很小,那么即使是小類也會導致太多交換(GC)。 如果您的對象與JVM堆相比足夠大,那么GC將需要做更多的工作來分配並從堆中聲明它們。 這將導致更頻繁地“制止世界”問題。

從GC的角度來看,一般來說大對象意味着:

  • 分配昂貴的對象
  • 初始化成本昂貴的對象

例如:大小為10000的arraylist。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM