Я столкнулся с несколько странной проблемой, связанной с простой задачей динамического заполнения массива в Java.Ниже приведен снимок места возникновения проблемы:
entries = new Object[ (n = _entries.length + 1) ] ;
for(i = 0 ; i < n ; i++) {
entry = ( i == (n - 1) ) ? addition : _entries[i] ;
entries[i] = entry ;
//...
}
Где _entries
- источник Array
(поле класса);entries
инициализируется как Array
из Object
s
Object[] entries = null ;
, а addition
- это Object
, который будет добавлен (передается как аргумент метода, в котором находится этот код).
Код проходит компилятор, но при вызове вызывает утечку памяти.Мне удалось сузить причину до строки, где код пытается заполнить новый Array
entries[i] = entry ;
, однако я не могу придумать ни одной причины, по которой это может вызвать утечку памяти.Я предполагаю, что корень проблемы должен быть либо чрезвычайно глупой ошибкой с моей стороны, либо крайне загадочной проблемой с Java.:-)
Если вам нужно больше информации, дайте мне знать.
Редактировать:
Журнал Tomcat сообщает мне:
Веб-приложение, похоже, запустило поток с именем ..., но не смогло его остановить.Это может привести к утечке памяти.
Кроме того, очевидно, что страница, загружающая класс, не завершает загрузку или загружается очень медленно.
Редактировать:
Проблема может быть где-то еще (в более ожидаемом месте) в конце концов.Очевидно, Tomcat не загружал файлы классов все время, когда я пытался определить неисправный код, и это немного вводило меня в заблуждение.Теперь я подозреваю, что виноват цикл infinte for-each, вызванный дефектной реализацией Iterator в стеке вызовов.В любом случае, спасибо за ваш вклад!Всегда высоко ценю!
Я буду использовать Collection
(вероятно, Vector
) вместо Array
в качестве обходного пути;Тем не менее, я хотел бы знать, в чем здесь проблема.
TIA,
FK82