2015-05-13 3 views
6

Это всего лишь серия вопросов, касающихся множества вычислений. Либо я не мог найти ответы онлайн, либо мне все еще нужно разъяснение.Три вопроса о большом количестве вычислений

  1. Это быстрее пройти (float, float, float) в качестве параметров метода против (float[]), где массив имеет три члена?

  2. Быстро ли метод возвращает float[] против установки содержимого float[], которое передается методу в качестве аргумента?

  3. Быстрее ли заменять вызовы методов фактическими вычислениями, то есть вместо A=sum(B,C) любого более медленного, чем A=B+C? при условии, sum(x,y){return x+y}

EDIT:

Спасибо за все ответы, ребята! Прежде чем я закрою эту тему, у меня есть еще один быстрый вопрос, если кто-нибудь знает:

  1. Если я использую класс для повторного вычисления одной и той же статистики снова и снова (а затем бросая их), было бы лучше создать переменные экземпляра, чтобы действовать как контейнеры, чтобы избежать непрерывного повторного и де-распределения?
+0

Эти микрооптимизации не будут иметь значения в ЛЮБОЙ шкале. – Kon

+0

@ Kon, но он говорит о мобильном телефоне и множестве вычислений. Я бы не стал беспокоиться об этом на ПК JVM, но не уверен в adroid. – ZhongYu

+0

@KevinXu хороший вопрос. Мне также интересно знать эти вещи. Посмотрим, что говорят эксперты. –

ответ

6

Это быстрее пройти (float, float, float) в качестве параметров методы против (float[]) где массив имеет три члена?

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

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

Является ли это быстрее метод, чтобы вернуть поплавок [] против установки содержимого поплавка [], который передается методу в качестве аргумента?

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

Тем не менее, если вы делаете это много миллионов раз в своем приложении быстро, сравните его, это может сэкономить вам некоторое время.

ли быстрее заменить вызовы метода фактических расчетов т.е. вместо является A=sum(B,C) медленнее, чем A=B+C? при условии, sum(x,y){return x+y}

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

Если тест, попробуйте делаете sum метод private, что сделает его более легким для HotSpot, чтобы решить, что это может быть встраиваемым (хотя это будет также обнаружить это сам по себе, если у вас нет каких-либо перегруженных реализаций sum метод)


Единственное, о бенчмаркинг здесь:

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

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

Лучше сначала сосредоточиться на своем алгоритме и его пространственных и временных сложностях; любые выигрыши есть навсегда.

+0

один быстрый вопрос (скорее, сомнение), если мы не будем рассматривать оптимизатор, то это то, что строка будет быстрее, потому что операции стека (для вызова функции и возврата) потребуют времени (опять же, учитывая ограниченный цикл миллионов). Потому что автор ничего не сказал об оптимизаторе! – therealprashant

2

1) Является ли это быстрее пройти (поплавок, поплавок, поплавок) в качестве параметров методы против (поплавка []), где массив имеет три члена?

1.) Зависит. Если отдельные поплавки не смежны в памяти, тогда может помочь float [].

2) Является ли это быстрее метод, чтобы вернуть поплавок [] против установки содержимого поплавка [], который передается метода в качестве аргумента?

2.) В зависимости от того, существует ли поплавок [] в любом случае. Если вы создаете новый float [] и передаете его или создаете новый float [] и возвращаете его, стоимость будет одинаковой. Но если в любом случае вы можете каким-то образом использовать существующий float [], это будет быстрее и создаст меньше распределений.

3) Это быстрее, чтобы заменить вызовы метода с фактическими расчетами т.е. вместо А = сумма (В, С) медленнее, чем A = B + C? предполагая сумму (х, у) {возвращение х + у}

3.) Я не уверен, я больше C# программиста. Я знаю, что при базовом CLR (обычном языке исполнения), используемом Xbox 360 при запуске C#, ручные вычисления были намного дешевле, чем использование перегруженных методов. Я не уверен, что Java имеет схожие проблемы на любой платформе.

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

  • Нет связанных вопросов^_^