Итак, я нашел ответ. Это утечка памяти в моем коде. Не имеет ничего общего с Serializable или Cloneable.
Этот код пытается проанализировать файл. Каждая строка содержит набор значений, которые я пытаюсь извлечь. Затем я сохраняю некоторые из этих значений и сохраняю их в HashMapX или какой-то другой структуре.
Суть проблемы здесь:
String[] fields = s.nextLine().split("\\s+");
String docName = fields[1];
и я распространяю это здесь:
documents.put(docName,thetas);
Что происходит, так это то, что docName является ссылкой на элемент в массиве (полях), и я сохраняю эту ссылку в течение всей жизни программы (сохраняя ее в глобальных документах HashMap). Пока я поддерживаю эту ссылку, целые поля String [] нельзя собирать мусором. Решение:
String docName = new String(fields[1]); // A copy, not a reference.
Таким образом копируется объект и освобождается ссылка на элемент массива. Таким образом, сборщик мусора может освободить память, используемую массивом, после того как я обработаю каждое поле.
Надеюсь, это будет полезно всем, кто анализирует большие текстовые файлы с использованием split и сохраняет некоторые поля в глобальных переменных.
Спасибо всем за комментарии. Они направили меня в правильном направлении.