考虑一个非常短的程序,我分配一点内存。我被教导GC在程序分配大量内存并且分配达到限制的情况下运行。
我不知道该限制究竟是什么,但我认为它必须足够高,以免GC频繁运行并减慢程序的执行速度。
我的问题是,当分配在程序生命周期内没有达到GC准备运行的水平时会发生什么。它会导致内存泄漏吗?
答案 0 :(得分:2)
没有具体的事情发生。粗略地说:为java进程分配的内存返回堆。 更具体地说:JVM使用本机内存为java进程分配内存。在java进程终止后,此内存对于操作系统中的其他进程是免费的。 我建议你阅读更多有关此事的信息,例如在这里:http://www.ibm.com/developerworks/library/j-nativememory-linux/
答案 1 :(得分:2)
垃圾收集只有在没有更多内存时才会运行,并行收集器实际上在另一个线程中运行,并在确定它有时间收集时收集,但这不是唯一的策略
答案 2 :(得分:1)
如果您的问题是:如果您的JVM在GC运行之前结束,内存会发生什么?
很简单:完整的记忆是"返回"到操作系统并再次可用。
简单来说:
对于第3步,如果/第2步发生的频率绝对无关紧要。
最后:"堆"是JVM内部如何使用内存。操作系统只知道它给JVM的绝对内存块。