我正在查看正在运行应用程序的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?
答案 0 :(得分:3)
float
是一个原始值。
java.lang.Float
是一个用于将浮点值('box')包装到可引用对象中的对象。
浮点字段不是盒装对象的实例。这是一个原始价值。
你有多少原始字段并不重要 - 因为它们不是对象,它们不会被计入对象实例计数中。
答案 1 :(得分:1)
准确地说,您有大约80.000 * 3个引用到Float
个实例,但您无法保证它们不会引用相同的Float
个实例。基本上你有102个Float
个实例,但是每个实例(或者可能只有少数几个)在不同的地方被多次引用。
Float
实例是不可变的,因此没有任何问题。