Прежде всего, вы не появлялись OutOfMemoryError, потому что объекты в вашем коде создаются очень медленно (каждые 200 мс).Попробуйте удалить sleep
фрагмент кода.
Во-вторых, если ваш GC очистил данные в пространстве выживших, это не значит, что GC удалит эти объекты из памяти.Это означает, что GC перенесла эти объекты в старое поколение, потому что они пережили несколько сборок мусора.Вы можете видеть, что размер Старого Поколения только увеличивается, и там не происходит сборка мусора.
Когда ваш размер кучи будет заполнен, GCбудет пытаться очистить объекты (вы увидите часто колебания на временной диаграмме ГХ), но эти попытки будут безуспешными, потому что не будет объектов для удаления.Со временем вы получите OME.
Я думаю, что если вы удалите фрагмент кода sleep
и подождете достаточно времени, вы получите OME.
Для более быстрых результатов вы можете уменьшить размер кучи.