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

问题描述:

考虑一个非常短的程序,我分配一点点内存。我被告知GC在程序分配大量内存并且分配达到极限的情况下运行。当GC不(必须)运行并且程序完成其执行时会发生什么?

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

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

+0

顺便说一句,这不是关于JDK – Andremoniy

+0

删除该标签 –

如果你的问题是:如果你的JVM的GC运行结束之前发生了什么记忆?

非常简单:完整的内存“返回”到操作系统,并再次可用。

在简单的话:

  1. 当您启动JVM,XX MB的内存被赋予它
  2. 当你的JVM发现它运行的内存,在GC踢,摆脱垃圾(这样JVM可以继续运行)
  3. 当你的JVM退出,那些XX MB回到操作系统

对于第3步,那绝对是不着边际的话/第二步发生了多长时间。

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

+0

即使内存是堆? –

+0

看我的更新.. – GhostCat

+0

非常感谢:) –

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

垃圾收集不运行,只有当没有更多的内存,一个并行收集实际运行在另一个线程,当它决定了它有时间做收集如此,这不是唯一的策略。

Java garbage collector - When does it collect?