当前位置: 首页 > 面试题库 >

Java VM-释放的内存是否返回到OS?

邵胜涝
2023-03-14
问题内容

在Java运行时中,如果我的应用程序释放了内存,运行时是否将内存释放回OS?还是回到我的过程?


问题答案:

这取决于JVM的实现,在规范中未指定。

作为第一步,Sun
JVM将保留它。一旦未使用一定比例(可配置)的已分配内存,它将将其中一部分返回给OS(行为受MinHeapFreeRatioMaxHeapFreeRatio设置影响)。



 类似资料:
  • 当垃圾收集器运行并释放内存时,内存会返回操作系统还是作为进程的一部分保留下来。我的强烈印象是,内存实际上从未释放回操作系统,而是作为内存区域/池的一部分保留下来,供同一进程重复使用。 因此,进程的实际内存永远不会减少。提醒我的一篇文章是这样的,Java的运行时是用C/C写的,所以我想同样的事情也适用? 更新< br >我的问题是关于Java的。我提到C/C是因为我假设Java的分配/释放是由JRE

  • 问题内容: 当垃圾收集器运行并释放内存时,该内存将返回操作系统,还是作为进程的一部分保留。我印象深刻的是,该内存实际上从未释放回OS,而是保留为内存区域/池的一部分,以供同一进程重用。 结果,进程的实际内存将永远不会减少。一篇使我想起的文章是Java的Runtime是用C / C ++编写的,所以我想同样的事情适用吗? 更新 我的问题是关于Java的。我之所以提到C / C ++,是因为我假设Ja

  • wcsdup等函数隐式调用malloc为目标缓冲区分配内存。我想知道,由于内存分配不是很明确,所以显式释放存储似乎合乎逻辑吗?这更像是一种设计困境,赞成和反对的理由如下 应释放,因为 不释放它会导致内存泄漏。 wcsdup/_wcsdup调用malloc来分配内存,即使是从C程序调用的。 不应该被释放,因为 wcsdup积累的内存最终会在程序退出时被释放。在整个程序生命周期中,我们总是会遇到一些内

  • 问题内容: 我不是在谈论String类或哈希码被覆盖的任何其他类。假设如果我只是创建该类的新对象,那么在任何情况下the或true 都将返回该对象的内存地址? 问题答案: 不必要。从文档(重点是我的): 在合理可行的范围内,由Object类定义的hashCode方法确实为不同的对象返回不同的整数。(通常通过将对象的内部地址转换为整数来 实现 , 但是JavaTM编程语言不需要这种实现技术 。)

  • 在阅读了一些像这样的答案和JEP-346之后,我意识到G1确实会将内存释放回操作系统。 然而,它是否将内存释放回操作系统,即使当前内存使用可能低于初始堆内存(即在此JEP之前,在我的案例中为JDK11)? 假设我有一个Java11 VM,运行和设置为,在RAM上,但是我只消耗大约。G1会释放足够的内存回操作系统吗? 我在任何地方都没有找到任何文档说明G1仅限于在发布时考虑Xms阈值。 我在生产过程