LINUX.ORG.RU

Явное приведение типов в Java

 ,


0

4
Parent p;
Child c = (Child)p;

Насколько допустимо, с точки зрения производительности, применение динамического приведения типов в Java? Даже если предположить, что приведение верно, и исключение не выбросится, сколько времени отнимет само приведение Child c = (Child)p ?

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

Имхо это бесплатно с точки зрения производительности, так как JVM все равно верифицирует все cast'ы не зависимо от того явно ты его написал или компилятор его вывел

maxcom ★★★★★ ()

Очень дешево, что в районе чека типа и все.

dizza ★★★★★ ()
Ответ на: комментарий от Anoxemian

А проверка на то, что нужно исключение, тоже бесплатна?

kamre ★★★ ()
Ответ на: комментарий от TERRANZ

ты собираешься гигабайты кастить?

Взяли обычный ArrayList, напихали кучу объектов и обрабатываем их в цикле, на каждый элемент будет каст с проверкой. Разве не так?

kamre ★★★ ()
Ответ на: комментарий от dzidzitop

хотя каст + інлайнутые несколько (много) virtual functions будут дешевле.

dzidzitop ★★ ()
Ответ на: комментарий от kamre

в теории должно быть не так. каст должен вообще проходить бесплатно и лишь при обращении непосредственно к данным кидать либо ошибку в силу невозможности\несоответствия типа, либо работать. зависит от реализации.

Anoxemian ★★★★★ ()
Ответ на: комментарий от Anoxemian

В Java не так, стреляет на касте, очень строгая верификация. Это не С++ где скастил, а потом сломал ноги на три вызова вниз по стеку

vertexua ★★★★★ ()
Ответ на: комментарий от Anoxemian

в жаве много оверхэда на то, чтобы не стрельнуть себе в конечность.

dzidzitop ★★ ()
Ответ на: комментарий от dzidzitop

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

Anoxemian ★★★★★ ()

Не бесплатно кроме всяких КО случаев

OpenJDK 7, graphKit.cpp, gen_subtype_check()

vertexua ★★★★★ ()

В java 1.3 (и до) Была линейная зависимость скорости от глубины до Object, потом понятно дело это всё переписали. Вроде сейчас для jvm это бесплатно, кроме случаев int <-> Integer и т.п.

vtVitus ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.