Следующий код вызывает ошибку OutOfMemoryError: пространство кучи примерно для 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, имеет право на сбор мусора в каждой итерации цикла, а внутренний JVM вызывает сбор мусора (System.gc()
) перед тем, как выбросить ошибку OutOfMemory Error из-за места кучи.
Так почему же происходит исключение?