Этот простой пример объясняет, как выполнять итерацию через Java Iterator и избегать возможного OutOfMemory (OOM) в Java. Этот пост хранится в Java Web Tutorial.
Возможная причина : забыть использовать
Iterator.next()внутри петли.
Хороший код: ниже примера просто итератор через ArrayList (Collection) и возвращает то же значение с помощью java.util.Iterator ,
Джава
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
пакет ком . хрустеть ;
Импортировать Java. Util. ArrayList ;
Импортировать Java. Util. Итератор ;
/ **
* @author Crunchify.com
* /
общественности учебный класс CrunchifyIteratorOOM {
общественности статический недействительным main ( Строка [ ] аргументы ) {
ArrayList
компания. добавить ( eBay ) ;
компания. добавить ( «Paypal» ) ;
компания. добавить ( Google ) ;
Iterator comapnyIterator знак равно компания. итератор ( ) ;
ИНТ я = 1 ;
while ( comapnyIterator . hasNext ( ) ) {
строка название компании знак равно ( Строка ) comapnyIterator . следующий ( ) ;
Система. вне. печать ( я + ) ;
Система. вне. println ( companyName ) ;
я ++ ;
}
}
}
|
Выход:
|
1
2
3
|
1 eBay
2 Paypal
3 Google
|
Неверный код: теперь просто закомментируйте две строки кода выше.
Джава
|
1
2
|
// String companyName = (String) comapnyIterator.next ();
// System.out.println (companyName);
|
Output: Вы должны увидеть, как ваша Java-программа входит в бесконечный цикл, который в конечном итоге вызывает OOM.
Какова лучшая практика? Всегда используйте расширенную Java 8 для цикла .
Джава
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
пакет ком . хрустеть ;
Импортировать Java. Util. ArrayList ;
Импортировать Java. Util. Итератор ;
/ **
* @author Crunchify.com
* /
общественности учебный класс CrunchifyIteratorOOM {
общественности статический недействительным main ( Строка [ ] аргументы ) {
ArrayList
компания. добавить ( eBay ) ;
компания. добавить ( «Paypal» ) ;
компания. добавить ( Google ) ;
// Тот же пример, что и выше, но улучшенный цикл.
за ( Строка s : компания ) {
Система. вне. println ( s ) ;
}
}
}
|
Как я могу проверить, увеличивается ли использование памяти с течением времени?
- Запустите эту программу
- Перейдите в терминал MacOS (в Mac) или в командную строку (в Windows)
- Введите: jConsole и Enter
- Выберите процесс, связанный с вашей Java-программой, как показано на диаграмме ниже
- Отслеживайте / анализируйте использование памяти / ЦП, и вы должны увидеть, как оно увеличивается со временем и, наконец, OOM.
Иногда эта мелочь может привести к утечке памяти / OOM в крупных производственных проектах.
0.00 (0%) 0 votes











