[英]What is large object for JVM GC
Charlie Hunt說,大型對象在他的演示文稿中對JVM GC不利。 因為:
大型對象分配和初始化的成本很高。
不同大小的大對象可能導致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.