2012-07-09 100 views
1

我的程序中有大約1500x500像素的柵格。每個像素都用浮點表示。我相信這意味着1500x500x4(字節)= 300萬字節或3mb。他們可以比這更大。 Java垃圾收集器對待大對象的方式與小對象不同嗎?他們是否會自動跳入上一代?Java垃圾收集和大對象

+3

我不;噸認爲有這樣的歧視。如果不存在對象的引用,則對象不論大小都可以使用GC。 – kosa 2012-07-09 15:15:43

+1

爲什麼你關心gc是否以不同的方式對待大對象? – jtahlborn 2012-07-09 15:17:37

+0

除此之外,除非特別在內存模型中定義了這樣的內容,否則它是特定於實現的。 – 2012-07-09 15:18:29

回答

4

較大的物體可以直接放置到終身空間中。單個物體的大小是重要的,例如, float[1500][1500]是每個1500 * 4(加上開銷)的1500個對象。

http://blog.dynatrace.com/2011/05/11/how-garbage-collection-differs-in-the-three-big-jvms/

這意味着JRockit的不到位的大物體進入終身教職的空間,但並沒有說明什麼熱點。


這表明大對象必須比年輕一代的空間大,才能直接進入終身空間。

https://blogs.oracle.com/jonthecollector/entry/size_matters

+0

不適合TLAB的對象將進入終身制,但您只需調整年輕的gen以適應足夠大的陣列並且沒關係。 – bestsss 2012-07-09 15:30:18

+0

不幸的是,調整年輕的gen是一個全球性的環境,並會影響所有的線程,所以誰知道淨效應是否會出現正面。 – 2012-07-09 16:33:28

+0

@MarkoTopolnik,除非應用程序使用對象池,否則較大的年輕人對我來說似乎是一場勝利。我傾向於將服務器配置爲年輕一代的1/3。 – bestsss 2012-07-09 16:37:40