Что быстрее obj instanceof class или obj.booleanAnyMethod () - PullRequest
1 голос
/ 29 августа 2010

Меня спросили об этом в интервью.Не считая времени, которое требуется для выполнения тела метода.Есть идеи?

Ответы [ 4 ]

8 голосов
/ 29 августа 2010

Мой ответ на этот вопрос будет "Мне все равно".Если у меня возникла проблема с приложением, которое я писал, и я подозревал, что причиной является instanceof, то я бы заполнил профиль, чтобы увидеть, действительно ли это было причиной, но я не прошелпереписывать большие куски кода просто на «догадку».

6 голосов
/ 29 августа 2010

Я хотел бы профилировать его, чтобы определить разницу, но я бы предположил, что instanceof быстрее.

Подумай об этом & hellip; booleanReturnMethod() - это метод экземпляра (если бы он был статическим, вы бы уже знали этот класс), поэтому первым шагом в диспетчеризации метода было бы определение класса объекта. Это как instanceof прямо там.

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

2 голосов
/ 29 августа 2010

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

Второйизмерьте и посмотрите на целевом оборудовании и JVM, а затем будьте готовы к тому, что результаты изменятся в следующей версии JVM.

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

В-четвертых, стиль вызова метода обычно лучше ОО, чем проверка типов, но необходимо убедиться, что система в контексте, чтобы убедиться, что это так.

1 голос
/ 29 августа 2010

Я не совсем понимаю этот вопрос ... Итак, парень, с которым вы беседовали, хотел узнать, знаете ли вы, будет ли ключевое слово instanceof быстрее, чем вызов случайного метода?Прежде всего, я бы сказал «сказать», поскольку это ключевое слово, поэтому я решил, что с JVM будет меньше проблем, чем с объявленным вами методом.Но потом я бы сказал, что мне все равно, потому что я не люблю полагаться на instanceof, и я действительно использую его только тогда, когда вынужден.Я имею в виду, что если мне нужно создать фрагмент кода, в котором я полагаюсь на что-то вроде «если T instanceof Z else ...», тогда мне действительно понадобится минута или две, чтобы подумать, поступаю ли я неправильно.

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