为什么VisualVM浮动实例似乎不包含其他类中的浮点数?

时间:2011-02-16 20:17:42

标签: java debugging class instance visualvm

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

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

那么,应该有至少 80.000 * 3浮动实例吗?为什么不呢?

更新 这引出了一个跟进问题,发布在这里:VisualVM OQL: how to search for primitive float values rather than actual Float instances?

2 个答案:

答案 0 :(得分:3)

float是一个原始值。

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

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

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

答案 1 :(得分:1)

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

与所有其他原始包装器一样,

Float实例是不可变的,因此没有任何问题。