0

アプリケーションを実行しているJava仮想マシンを見ています。VisualVMによると、java.lang.Floatには102個のインスタンスしかありません。

それでも、80.000のインスタンスを持つVector3と呼ばれるクラスもあります。これらのインスタンスはすべて、3つのfloatフィールドを持っているように見えます。

したがって、少なくとも80.000 *3つのfloatインスタンスが必要です。なぜだめですか?

更新: これにより、フォローアップの質問が表示されます。ここに投稿されています:VisualVM OQL:実際のFloatインスタンスではなくプリミティブfloat値を検索する方法は?

4

2 に答える 2

3

floatプリミティブ値です。

java.lang.Floatfloat 値を参照可能なオブジェクトにラップ (' box ') するために使用されるオブジェクトです。

float フィールドは、ボックス化されたオブジェクトのインスタンスではありません。プリミティブな値です。

プリミティブ フィールドの数は関係ありません。これらはオブジェクトではないため、オブジェクト インスタンスの数にはカウントされません。

于 2011-02-16T20:35:39.583 に答える
1

正確には、インスタンスへの参照は約80.000 * 3ですが、それらが同じインスタンスを参照しFloatていないという保証はありません。Float基本的に102個Floatのインスタンスがありますが、それぞれ(またはほんの数個)がさまざまな場所で数回参照されます。

Float他のすべてのプリミティブラッパーと同様に、インスタンスは不変であるため、これに問題はありません。

于 2011-02-16T20:24:10.157 に答える