2012-02-20 1 views
3

Я использовал JProfiler для профилирования моего приложения, так как это огромное приложение, поэтому я очень хорошо знаю его производительность и эффективность.
Это заняло слишком много времени, поэтому я заменяю все Iterator.hasNext на for-each, но когда я вижу в представлении CPU JProfilers, он показывает мне метод Iterator.hasNext, где я использую for-each.
Почему это так? Есть ли связь между этими двумя? Вот пример кода:Есть ли какое-либо отношение между Iterator.hasNext и for-each loop

List<Map<String, Object>> mapList = jdbcTemplate 
         .queryForList(MAP.SELECT_ALL); 
       for (Map<String, Object> map : mapList) { 
      list.add(fillPreferenceMaster(preferenceMasterMap)); 
} 
+0

http://stackoverflow.com/questions/2113216/which-is-more-efficient-a-for-each-loop-or-an-iterator Они то же самое, когда сгенерировано в байт-код – Sean

ответ

10

Да, расширенная for оператор использует Iterator из-под обложки для Iterable коллекций см Section 14.14.2 of the JLS:

Если тип Expression является подтипом Iterable, а затем I - тип выражения Выражение.iterator(). Усиливается for утверждение эквивалентно основной for утверждении формы:

for (I #i = Expression.iterator(); #i.hasNext();) { 
     VariableModifiersopt Type Identifier = #i.next(); 
    Statement 
} 

Где #i это компилятор сгенерированный идентификатор, который отличен от любых других идентификаторов (сгенерированный компилятором или иным образом), которые находятся в области видимости (§ 6.3) в точке, где выполняется расширенное утверждение for.

0

Оператор for-each использует итератор для итерации по вашей коллекции. Компилятор заменяет ваш for-each циклом while.

2

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

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

+0

Я делаю это но большую часть времени занимают jsp-методы, и они видны очень странно. Я не знаю, какой тег занимает слишком много времени ...... –