Есть ли цена за метод для создания экземпляра объекта в Java? - PullRequest
11 голосов
/ 10 июля 2010

Я слышал от другого разработчика, что объект слишком дорог, чтобы создавать его повторно, потому что «у него есть куча методов».

Насколько я понимаю (в основном из Блоха), создание объекта обходится в основном из-зачто явно сделано в конструкторе, особенно при создании других дорогих объектов.

Есть ли цена за метод для нового объекта в Java?Я не думаю, но мне нужны ссылки, если у кого-то они есть.

Спасибо!

Ответы [ 4 ]

11 голосов
/ 10 июля 2010

Многие методы означают большую таблицу виртуальных методов (VMT) . Тем не менее, VMT для каждого класса точно так же, как метаданные, и, следовательно, имеет не более единовременной стоимости при первом создании. Последующие экземпляры выполняются так же быстро, как объекты с меньшим количеством методов, при условии, что конструктор (-ы) не выполняют тяжелую работу.

Стоит прочитать также главу о создании объектов из книги настройки производительности .

3 голосов
/ 10 июля 2010

Нет, между числом методов в классе и временем, в течение которого JVM выполняет операцию new, не существует.

Серьезно, если вы думаете на таком уровне, вам не следует использовать такой язык, как Java, иди и напиши свое приложение на ассемблере или "C".

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

1 голос
/ 10 июля 2010

Кроме того, было бы небольшое снижение производительности для класса со многими переменными экземпляра (хотя я не уверен, что он действительно измерим).Java требует, чтобы каждая переменная экземпляра была установлена ​​на 0, false, null для каждого нового экземпляра, и с установкой их на ноль связаны затраты времени выполнения.Тем не менее, это, вероятно, просто memset (или calloc или что-то в этом роде), который можно быстро завершить.

0 голосов
/ 12 июля 2010

Мне нужны ссылки, если у кого-то они есть.

Я предлагаю, чтобы это был другой разработчик , которого следует попросить предоставить ссылки в поддержку его нелепого утверждения.1007 *

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