Конструктора Object называют при создании массива в Java?

Извлечено из здесь :

Да и нет. Иногда. Может быть.

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

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

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

встроенные функции могут сделать его больше. : Это понятие раздувания кода, как описано выше. Например, если система имеет 100 встроенных функций, каждая из которых расширяется до 100 байт исполняемого кода и вызывается в 100 местах, это увеличение на 1 МБ. Это 1 МБ будет вызывать проблемы? Кто знает, но возможно, что последние 1 МБ могут вызвать «зависание» системы, что может замедлить процесс.

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

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

встроенные функции могут предотвратить сбои : размер рабочего набора (количество страниц, которое должно быть в памяти одновременно) может уменьшиться, даже если размер исполняемого файла увеличивается. Когда f () вызывает g (), код часто находится на двух разных страницах; когда компилятор процедурно интегрирует код g () в f (), код часто находится на одной странице.

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

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

встроенные функции могут не иметь отношения к скорости : большинство систем не связаны с процессором. Большинство систем привязаны к вводу / выводу, к базе данных или к сети, что означает, что узким местом в общей производительности системы является файловая система, база данных или сеть. Если ваш «измеритель ЦП» не установлен на 100%, встроенные функции, вероятно, не сделают вашу систему быстрее. (Даже в системах с привязкой к ЦП встроенный метод поможет только при использовании внутри самого узкого места, а узкое место обычно присутствует лишь в небольшом проценте кода.)

Простых ответов нет [1125 ]: Вы должны поиграть с ним, чтобы увидеть, что лучше. Не соглашайтесь на упрощенные ответы, такие как «Никогда не используйте встроенные функции» или «Всегда используйте встроенные функции» или «Используйте встроенные функции, если и только если функция меньше N строк кода». Эти правила одного размера могут быть легко записаны, но они приведут к неоптимальным результатам.

Copyright (C) Маршалл Клайн

8
задан Peter Štibraný 23 January 2009 в 22:37
поделиться

4 ответа

На спецификацию JVM: "Массивы создаются и управляли использованием отличного набора инструкций". Так, в то время как массивы являются объектами-экземплярами, они не инициализируются тот же способ, которым другие объекты (который Вы видите, прокручиваете ли Вы от той привязки к ссылке).

6
ответ дан 5 December 2019 в 21:23
поделиться

Я не думаю поэтому, потому что Вы не можете получить собственный массив overridethe конструктору

0
ответ дан 5 December 2019 в 21:23
поделиться

Можно использовать управление кодом байта для размещения проверки, где когда-либо новый массив создается.

0
ответ дан 5 December 2019 в 21:23
поделиться

Нет. Я нашел это в списке рассылки AspectJ: http://dev.eclipse.org/mhonarc/lists/aspectj-users/msg02975.html.

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

0
ответ дан 5 December 2019 в 21:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: