我有一个程序,其中有问题的循环看起来像这样
int numOfWords = 1000;
int avgSizeOfWord = 20;
while(all documents are not read) {
char[][] wordsInDoc = new char[numOfWords][avgSizeOfWord];
for(int i=0; i<numWordsInDoc; i++) {
wordsInDoc[i] = getNextWord();
}
processWords(wordsInDoc);
}
我想知道执行此循环时幕后发生了什么。垃圾收集器何时收集为每个文档分配的内存?他们是更好的方式(关于内存使用)来做同样的事情吗?
欢迎任何见解。
最佳答案
笼统地回答您的问题是不可能的,因为 JVM 在垃圾回收方面几乎可以为所欲为。
通过在内存分析器(例如 YourKit)下运行您的程序,您可能能够深入了解实际发生的情况。 .这也将使您能够比较不同的策略(例如,使用 String
类而不是 char
数组)在内存使用和垃圾收集器中花费的时间方面。
关于用于在循环内分配/取消分配内存的 Java 垃圾收集器性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6115013/