Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当GC不';t(必须)运行并且程序完成它的执行?_Java_Memory Management - Fatal编程技术网

Java 当GC不';t(必须)运行并且程序完成它的执行?

Java 当GC不';t(必须)运行并且程序完成它的执行?,java,memory-management,Java,Memory Management,考虑一个很短的程序,在这个程序中我分配了一点内存。我被教导,GC在程序分配大量内存并且分配达到极限的情况下运行 我不知道这个限制到底是什么,但我认为它必须足够高,这样GC就不会频繁运行,从而降低程序的执行速度 我的问题是,在程序的生命周期内,当分配没有达到GC准备运行的级别时会发生什么。它会导致内存泄漏吗?不会发生任何特定的情况。粗略地说:分配给java进程的内存返回堆。 更具体地说:JVM使用本机内存为java进程分配内存。java进程终止后,该内存对于操作系统中的其他进程是可用的。 我建议您

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

我不知道这个限制到底是什么,但我认为它必须足够高,这样GC就不会频繁运行,从而降低程序的执行速度


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

不会发生任何特定的情况。粗略地说:分配给java进程的内存返回堆。 更具体地说:JVM使用本机内存为java进程分配内存。java进程终止后,该内存对于操作系统中的其他进程是可用的。
我建议您阅读更多关于这方面的内容,例如:

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


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

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

简言之:

  • 当您启动JVM时,会为它提供xx MB的内存
  • 当JVM发现内存不足时,GC启动,以清除垃圾(以便JVM可以继续运行)
  • 当JVM退出时,这些xx MB将返回到操作系统
  • 对于步骤3,步骤2是否/多久发生一次是完全不相关的


    最后,“heap”是JVM内部使用内存的方式。操作系统只知道它提供给JVM的绝对内存块。

    顺便说一句,这与JDKEN无关,即使内存来自堆?