2012-06-28 2 views
0

У меня есть код на Java, который имеет внешний цикл и несколько вложенных циклов. Производительность не является удовлетворительной. Какие стратегии можно использовать для повышения общей производительности?Как повысить скорость работы Java?

For(int I = 0; I < 20000000; < i++) // 20 million iterations in outer loop 
{  
    For(…) 

    For(…) 

    For(…) 

    method... 

    method...  
} 
+1

Не, не давая нам больше деталей; на самом деле почти ничего не может быть сказано на основе количества деталей, которые вы предоставили. –

+1

Работайте умнее, а не сложнее. –

+0

Я собираюсь выложить тренд и проголосовать за повторное открытие, потому что это не «относится только к небольшой географической области, конкретному моменту времени или необычайно узкой ситуации, которая обычно не применима к мировой аудитории интернета» , Напротив, ** у многих младших программистов может быть этот точный вопрос **. Это основной вопрос? ДА. Есть ли дубликат на SO, который должен быть закрыт по ссылке? Может быть. Но это есть, закройте его по правильной причине. –

ответ

4

Вы оставляете много деталей. Однако ...

Если все, что 4 разных цикла for не должно происходить по порядку, вы можете запускать каждый цикл for в отдельном потоке.

Если у вас более 1 ядра процессора, работающего под кодом, общая производительность улучшится.

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

+0

Привет, мое рабочее пространство обеспечивает 12 компьютеров с системой linux, и каждый из них имеет 96 ГБ оперативной памяти и 32 ядра. Есть ли способ улучшить скорость с помощью аппаратного обеспечения? –

+0

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

0

Трудно сказать, не зная подробностей :-) Запуск цикла for не должен занять так много времени.

Если у вас есть маленькие операции, вы должны сделать некоторые microbenchmarking (см here и here).

Если вы делаете немного сложный материал, вам нужно сделать некоторые профилирование (Затмение, NetBeans поставляется со своим собственным профайлера, вы также можете попробовать JProfiler но есть quite a lot of alternatives).

0

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

0

У меня улучшена производительность в C# для петель с yield return. Я думаю, вы должны определенно оценить его использование.

Проверьте this Вопрос о том, как использовать его в Java.

Это являются прямые ссылки на библиотеки Java - от ответа -:

  1. Article
  2. Library
+0

Его код написан на Java. Как советы по C# помогают? Кроме того, 'yield return' является * not * всегда самым быстрым способом делать что-то.Это зависит от того, что вы делаете. –

+0

@EricJ. Вот почему я поместил библиотеку Java Link .... Полностью согласен, что доходность доходности - это не всегда самый быстрый способ делать что-то, но иногда это может реально помочь. –

+1

Я пропустил ссылку на Java. Спасибо за смелость :-) Тем не менее, это поможет только тогда, когда цикл в противном случае вернет какую-то коллекцию, когда на самом деле код, обрабатывающий объекты в этой коллекции, нуждается только в них (избегает памяти и временных затрат на создание сбор только для хранения возвращаемого значения, которое в противном случае не требуется). Ничего не заметьте в сообщении OP, который указывает, что он это делает, но затем сообщение очень короткое в деталях. –