0

我正在查看一个运行应用程序的 java 虚拟机。VisualVM 说 java.lang.Float 只有 102 个实例。

然而,还有一个名为 Vector3 的类,它有 80.000 个实例。所有这些实例似乎都有 3 个浮点字段。

那么,至少应该有80.000 * 3 个浮动实例,对吧?为什么不?

更新: 这导致我提出一个后续问题,发布在此处:VisualVM OQL:如何搜索原始浮点值而不是实际的浮点实例?

4

2 回答 2

3

float是一个原始值。

java.lang.Float是一个用于将浮点值包装(' box ')到可引用对象中的对象。

浮点字段不是装箱对象的实例。这是一个原始值。

您拥有多少原始字段并不重要 - 因为它们不是对象,所以它们不会被计入对象实例计数中。

于 2011-02-16T20:35:39.583 回答
1

准确地说,您有大约 80.000 * 3对实例的引用Float,但您不能保证它们没有引用相同的Float实例。基本上你有 102 个Float实例,但它们中的每一个(或者可能只是少数)在不同的地方被多次引用。

Float与所有其他原始包装器一样,实例是不可变的,因此这没有任何问题。

于 2011-02-16T20:24:10.157 回答