Запустите приложение и запустите jconsole на PID. Пока он работает, посмотрите на кучу в консоли. Когда это близко к максимам, получайте свалку в кучу. Загрузите Eclipse MAT и проанализируйте дамп кучи. Если вы заметили, что размер оставшейся кучи значительно меньше, чем фактический двоичный файл, проанализируйте дамп кучи с установленным параметром -keep_unreachable_objects.
Если последнее верно и вы делаете полный сбор данных, часто у вас, вероятно, происходит какая-то утечка. Имейте в виду, что когда я говорю «утечка», я не имею в виду утечку, когда GC не может сохранить память, а скорее то, как вы строите большие объекты и делаете их недоступными достаточно часто, чтобы GC потреблял много процессорного времени.
Если бы вы видели истинные утечки памяти, вы бы увидели ошибки GC Overhead достигли