用于在循环内分配/取消分配内存的 Java 垃圾收集器性能

标签 java memory-management garbage-collection

我有一个程序,其中有问题的循环看起来像这样

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/

相关文章:

java - 如何正确重用 Jackson ObjectMapper?

c - 如何找出 valgrind 报告中出现 "Invalid Free()"错误的原因

java - GC是否保证清除的References按拓扑顺序入队ReferenceQueue?

java - 处理 ExecutionException 的原因

java - EJB3 计时器是否继承到创建它们的 bean?

c - 传递值后释放内存导致 EXC_BAD_ACCESS

c++ - 如何使用STL贴图?

java - 当您调用 System.gc() 时,幕后到底发生了什么?

c - 垃圾收集器和双重分配的内存

java - 带有 Mockito 的 JUnitParams