Java垃圾收集器的性能我有一个程序,其中有问题的循环看起来像这样分配/释放内存内循环
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);
}
我想知道,当这个循环被执行了什么幕后发生。垃圾收集器何时收集为每个文档分配的内存?他们是一个更好的方式(内存使用)做同样的事情吗?
任何洞察力是赞赏。
看看:http://stackoverflow.com/questions/4138200/garbage-collection-on-a-local-variable – 2011-05-24 18:27:12
Java有一个非确定性的垃圾收集器,这意味着没有办法预测它的行为只是通过查看一段代码。 – 2011-05-24 18:27:15
你的问题可以说比JIT更适合JIT,也就是说如果这个代码被JIT编译,那么你的代码的版本是什么样的?例如processWords有什么作用?它会被内联吗?如果是这样,wordsInDoc会在循环外部悬挂吗?无论如何,它有可能被吊起来吗?并可能还有其他一些可能的编译途径...... – Matt 2011-05-24 19:10:56