2011-02-16 43 views
0

我正在查看運行應用程序的Java虛擬機。 VisualVM表示java.lang.Float只有102個實例。爲什麼VisualVM浮點實例似乎不在其他類中包含浮點數?

然而,還有一個名爲Vector3的類有80.000個實例。所有這些實例似乎都有3個浮點字段。

那麼,應該有至少 80.000 * 3浮點實例對不對?爲什麼不?

更新: 這使我跟進的問題,貼在這裏:VisualVM OQL: how to search for primitive float values rather than actual Float instances?

回答

3

float是原始值。

java.lang.Float是一個對象,用於將浮點值('box')包括到可引用的對象中。

float字段不是裝箱對象的實例。這是一個原始價值。

無論你有多少原始字段 - 因爲它們不是對象,它們將不會計入對象實例計數中。

1

準確地說,你有大約80.000 * 3個引用Float實例,但你不能保證他們沒有引用相同的Float實例。基本上你有102 Float實例,但是它們中的每一個(或者可能只是少數)在不同的地方多次被引用。如同所有其他原始包裝一樣,實例是不可變的,所以這沒有任何問題。

+0

看來很難相信那些80.000的值有如此之多的平等值。儘管如此,謝謝。事實上,我非常肯定,我所監控的應用程序不能滿足只有120個不同的浮點數值。多麼奇怪。 – Tom 2011-02-16 20:27:25

+0

@Tom,你可以創建一個像這樣的小應用程序:`for(int i = 0; i <121; i ++){list.add(new Float(i)); }`並確認,你有+120個不同的對象。 – OscarRyz 2011-02-16 20:40:02

相關問題