Ну, вы определенно тратите впустую память - вы выделяете все «подмассивы», а затем перезаписываете их. Вам было бы лучше с:
while(all documents are not read) {
char[][] wordsInDoc = new char[numOfWords][];
for(int i=0; i < numWordsInDoc; i++) {
wordsInDoc[i] = getNextWord();
}
processWords(wordsInDoc);
}
Что же на самом деле делает processWords
? Если массив нигде не хранится, вы могли бы использовать его повторно:
char[][] wordsInDoc = new char[numOfWords][];
while(all documents are not read) {
for(int i=0; i < numWordsInDoc; i++) {
wordsInDoc[i] = getNextWord();
}
processWords(wordsInDoc);
}
Я бы определенно выполнил первое изменение, но, вероятно, не второе.
Что касается того, когда именно происходит сборка мусора - это зависит от реализации.