2016-02-07 3 views
1

В эти дни я изучаю эффективность Java-кода (большой-O) в школе. Я не мог не задаться вопросом, когда учитывать эффективность кода в реальном программировании.Когда нужно учитывать эффективность кода в Java?

Это что-то, о чем думают программисты во время этапа PDL/Pseudo? или так же, как вы пишете код.

Буду признателен Вам за это!

+1

Я использую его для выбора между коллекциями. В остальное время я измеряю. – duffymo

+3

StackOverflow предназначен для вопросов о проблемах программирования. Попробуйте программисты StackExchange. –

+0

Только когда это имеет значение. И (удивительно) это часто НЕ имеет значения. –

ответ

3

Обратите внимание, что последующее достаточно общее, так как вопрос является весьма фундаментальным.

В реальном мире программисты склонны смотреть на эффективность на стадии проектирования, как правило, в следующих случаях:

  • проблема их решения является критичной по времени (например, видео-рендеринга и обработки изображений)
  • количество данных, которые они обрабатывают, слишком велико (например: анализ миллиардов строк из фида)

Иначе они в основном используют методы и принципы проектирования «с полки».

В некоторых случаях код-обзор ловит бедных реализаций от неопытных разработчиков и существует значительное количество переделок и обучения :)

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

отметить также известные цитаты из Кнут:

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

и

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

Таким образом, для обеспечения баланса, сложности и оптимизации времени требуется баланс. Для получения дополнительной информации прочтите wiki link.

1

Если вы видите на этапе PDL, что сложность будет O (2^n) или даже O (n^2) для очень большого n, тогда вы подумаете еще раз, но даже тогда вы можете прототип эти биты просто посмотреть, что произойдет.

Обычно вы сначала понимаете, что правильно, потому что вы не можете сказать, насколько быстро это будет, пока не будет правильно, а затем вы используете профилировщик (например, https://docs.oracle.com/javase/7/docs/technotes/samples/hprof.html для очень простого примера), чтобы увидеть, где он на самом деле горит процессор, а затем сосредоточиться на этих битах.

0

Нотация Big O - отличный способ выразить эффективность алгоритма, но при работе с кодом в системе предприятия вещи обычно усложняются.Архитектура системы в целом и инфраструктура, на которой она работает, вероятно, будут иметь большее влияние (и быть более дорогостоящей для исправления) в конечном счете из-за performance and stability problems, если они ошибаются.

Обозначение Big O, безусловно, то, о чем инженеры могли бы подумать (или с точки зрения), когда они определили узкое место, используя анализаторы производительности и другие инструменты, и стремятся внедрить более эффективный алгоритм в области, где это узкое место ,

Смежные вопросы