Почему экземпляры с плавающей точкой в ​​VisualVM не содержат плавающие внутри других классов? - PullRequest
0 голосов
/ 16 февраля 2011

Я смотрю на виртуальную машину Java, на которой запущено приложение.VisualVM говорит, что java.lang.Float имеет только 102 экземпляра.

Тем не менее, существует также класс с именем Vector3, который имеет 80 000 экземпляров.Все эти экземпляры имеют 3 поля с плавающей запятой.

Итак, должно быть как минимум 80.000 * 3 экземпляров с плавающей точкой, верно?Почему нет?

Обновление: Это привело меня к последующему вопросу, опубликованному здесь: VisualVM OQL: как искать примитивные значения с плавающей точкой, а не фактические экземпляры с плавающей точкой?

Ответы [ 2 ]

3 голосов
/ 16 февраля 2011

float является примитивным значением.

java.lang.Float - это объект, используемый для упаковки (' box ') значения с плавающей точкой в ​​ссылочный объект.

Плавающее поле не является экземпляром объекта в штучной упаковке. Это примитивная ценность.

Неважно, сколько у вас примитивных полей - поскольку они не являются объектами, они не будут учитываться при подсчете экземпляров объекта.

1 голос
/ 16 февраля 2011

Если быть точным, у вас есть приблизительно 80.000 * 3 ссылок на Float экземпляров, но вы не можете гарантировать, что они не ссылаются на одни и те же Float экземпляры. Обычно у вас есть 102 Float экземпляров, но на каждый из них (или, может быть, всего несколько) ссылаются несколько раз в разных местах.

Float экземпляры, как и все другие примитивные оболочки, являются неизменяемыми, поэтому в этом нет ничего плохого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...