当GC没有(必须)运行并且程序完成执行时会发生什么?

时间:2016-07-28 18:03:45

标签: java memory-management

考虑一个非常短的程序,我分配一点内存。我被教导GC在程序分配大量内存并且分配达到限制的情况下运行。

我不知道该限制究竟是什么,但我认为它必须足够高,以免GC频繁运行并减慢程序的执行速度。

我的问题是,当分配在程序生命周期内没有达到GC准备运行的水平时会发生什么。它会导致内存泄漏吗?

3 个答案:

答案 0 :(得分:2)

没有具体的事情发生。粗略地说:为java进程分配的内存返回堆。 更具体地说:JVM使用本机内存为java进程分配内存。在java进程终止后,此内存对于操作系统中的其他进程是免费的。 我建议你阅读更多有关此事的信息,例如在这里:http://www.ibm.com/developerworks/library/j-nativememory-linux/

答案 1 :(得分:2)

垃圾收集只有在没有更多内存时才会运行,并行收集器实际上在另一个线程中运行,并在确定它有时间收集时收集,这不是唯一的策略

请参阅Java garbage collector - When does it collect?

答案 2 :(得分:1)

如果您的问题是:如果您的JVM在GC运行之前结束,内存会发生什么?

很简单:完整的记忆是"返回"到操作系统并再次可用。

简单来说:

  1. 当您启动JVM时,会向其提供xx MB的内存
  2. 当您的JVM发现内存不足时,GC会启动,以摆脱垃圾(以便JVM可以继续运行)
  3. 当您的JVM退出时,那些xx MB将返回操作系统
  4. 对于第3步,如果/第2步发生的频率绝对无关紧要。

    最后:"堆"是JVM内部如何使用内存。操作系统只知道它给JVM的绝对内存块。