Выполнение объектной типизации - PullRequest
6 голосов
/ 10 января 2012

Насколько дорого стоит Object Typecasting с точки зрения производительности?Должен ли я стараться избегать Typecasting, когда это возможно?

Ответы [ 5 ]

9 голосов
/ 10 января 2012

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

5 голосов
/ 10 января 2012

JavaWorld: стоимость кастинга

Casting используется для преобразования между типы - между ссылочными типами в в частности, для типа литья операция, в которой мы заинтересованы Вот.

Upcast операции (также называемые расширение конверсий в Java Спецификация языка) конвертировать ссылка на подкласс для предка ссылка на класс. Это кастинг операция обычно автоматическая, так как это всегда безопасно и может быть реализуется непосредственно компилятором.

Downcast операции (также называемые сужающие преобразования в Java Спецификация языка) конвертировать ссылка на класс предка для подкласса ссылка. Это кастинг создает издержки выполнения, так как Java требует проверки актерского состава в время выполнения, чтобы убедиться, что оно действительно. Если указанный объект не является экземпляр любого целевого типа для бросок или подкласс этого типа, попытка применения не разрешена и должен бросить java.lang.ClassCastException.

5 голосов
/ 10 января 2012

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

2 голосов
/ 10 января 2012

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

В целом, приведение типов является (ИМХО) признаком того, что что-то не так в дизайне. Конечно, иногда вы не можете избежать этого (например, работая с устаревшими коллекциями), но я бы определенно увидел, смогу ли я удалить его.

0 голосов
/ 10 января 2012

Нет, это не должно существенно влиять на производительность.

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