Каждый в лице развития Java java.lang.OutOfMemoryError то и дело, OutOfMemoryError (OOM) в Java — это одна из проблем, которая больше связана с ограничением системы (памятью), чем с ошибками программирования в большинстве случаев, хотя в некоторых случаях вы можете иметь утечку памяти, которая вызывает OutOfMemoryError.
Ниже приведена простая Java-программа, которая будет потреблять все больше и больше памяти в каждом цикле, и, наконец, система выйдет из строя.
|
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
28
29
30
31
32
33
34
|
пакет ком . crunchify. учебные пособия ;
общественности учебный класс CrunchifyGenerateOOM {
/ **
* @author Crunchify.com
* Исключения @throws
*
* /
общественности статический недействительным main ( Строка [ ] аргументы ) бросает исключение {
CrunchifyGenerateOOM memoryTest знак равно новый CrunchifyGenerateOOM ( ) ;
MemoryTest . generateOOM ( ) ;
}
общественности недействительным generateOOM ( ) бросает исключение {
ИНТ iteratorValue знак равно 20 ;
Система. вне. println ( / n =================> OOM тест запущен ../ n ) ;
за ( int outerIterator знак равно 1 ; outerIterator < 20 ; externalIterator ++ ) {
Система. вне. println ( «Итерация» + outerIterator + Свободная память: + Продолжительность. getRuntime ( ) . freeMemory ( ) ) ;
ИНТ loop1 знак равно 2 ;
int [ ] memoryFillIntVar знак равно новый int [ iteratorValue ] ;
// чувствуем массив memoryFillIntVar в цикле
делать {
memoryFillIntVar [ loop1 ] знак равно 0 ;
loop1 — ;
} в то время как ( петля 1 > 0 ) ;
iteratorValue знак равно iteratorValue * 5 ;
Система. вне. println ( / nRequired Memory для следующего цикла: + iteratorValue ) ;
Thread. сон ( 1000 ) ;
}
}
}
|
Выход:
|
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
28
29
30
31
32
33
34
35
36
|
================= > OOM тест начался . ,
итерация 1 Свободная память : 66731080
Требуемая память для следующий цикл : 100
итерация 2 Свободная память : 66378392
Требуемая память для следующий цикл : 500
итерация 3 Свободная память : 66378392
Требуемая память для следующий цикл : 2500
итерация 4 Свободная память : 66378392
Требуемая память для следующий цикл : 12500
итерация 5 Свободная память : 66378392
Требуемая память для следующий цикл : 62500
итерация 6 Свободная память : 66378392
Требуемая память для следующий цикл : 312500
итерация 7 Свободная память : 66378392
Требуемая память для следующий цикл : 1562500
итерация 8 Свободная память : 65128376
Требуемая память для следующий цикл : 7812500
итерация 9 Свободная память : 58878360
Требуемая память для следующий цикл : 39062500
итерация 10 Свободная память : 27628344
Требуемая память для следующий цикл : 195312500
итерация 11 Свободная память : 27681688
Исключение в нить главный Java. яз. OutOfMemoryError : Пространство кучи Java
на ком . crunchify. учебники . CrunchifyGenerateOOM . generateOOM ( CrunchifyGenerateOOM . java : 22 )
на ком . crunchify. учебники . CrunchifyGenerateOOM . main ( CrunchifyGenerateOOM . Java : 13 )
|
Что теперь? Есть ли смысл ловить ошибку «Недостаточно памяти» (java.lang.OutOfMemoryError) в Java?
Да. Вот несколько примеров, где это может иметь смысл:
- если вы хотите справиться с этим, изящно закрыв свою программу
- если вы хотите отобразить проблему для пользователя или зарегистрировать ошибку
- в зависимости от вашего дизайна, вы можете даже очистить память и восстановить рабочее состояние
Тем не менее, обратите внимание, что обычно (если вы не находитесь в месте, где вы будете выделять тонны памяти сразу), вы, вероятно, не будете специально отлавливать OutOfMemoryError для этих случаев, а скорее сделаете перехват Throwable полностью вверху в вашей главной точке входа.
0.00 (0%) 0 votes








