Есть ли снижение производительности экземпляра объекта, если у объекта много методов? - PullRequest
3 голосов
/ 01 марта 2012

Просто немного праздного любопытства.

В принципе, если у меня есть объект, который имеет только несколько примитивных элементов данных, он занимает небольшой объем памяти и совсем не занимает много времени.создавать.Однако что произойдет, если у меня будет много методов, связанных с этим объектом?Должен ли экземпляр объекта принимать их во внимание вообще?

Например, допустим, у меня есть класс с (вставьте здесь абсурдно большое число) количеством различных методов, которые я могу вызвать.Требуется ли JVM больше времени для создания экземпляра этого класса, чем если бы у меня не было методов?

Ответы [ 3 ]

6 голосов
/ 01 марта 2012

Нет, Class с методами хранится один раз в отдельной ячейке памяти (а именно PermGen), и каждый объект данного класса имеет только одну ссылку на его тип (Class).

Таким образом, не имеет значения, сколько методов у вашего объекта: две или две тысячи - создание объекта займет ровно столько же времени.

Кстати, то же самое относится и к вызову метода - производительности нетУдар при вызове методов объекта, имеющего их много, по сравнению с объектом, имеющим только несколько.

См. также

2 голосов
/ 01 марта 2012

Я не могу говорить о java, но в C ++ и т. Д. Не виртуальные методы могут храниться как глобальные функции (с искажением имен) и не требуют дополнительного места во время создания экземпляра.Виртуальные методы должны быть заполнены в VMT, который, вероятно, может быть собран во время компиляции, и один указатель будет храниться в объекте при создании экземпляра.методы.

2 голосов
/ 01 марта 2012

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

Если ваш объект такой большой, я бы сказал, что пришло время провести рефакторинг.1005 *

...