Следующий код вызывает OutOfMemmoryError: пустое место для примерно 3 миллионов строк. Память, выделенная для JVM, составляет 4 ГБ, с использованием 64-битной установки.
while (rs.next())
{
ArrayList<String> arrayList = new ArrayList<String>();
for (int i = 1; i <= columnCount; i++)
{
arrayList.add(rs.getString(i));
}
objOS.writeObject(arrayList);
}
Память, на которую ссылается ArrayList, имеет право на сбор мусора на каждой итерации цикла while, а внутренне JVM вызывает сбор мусора (System.gc()
), прежде чем выбросить ошибку OutOfMemory из-за кучи.
Итак, почему возникает исключение?