繁体   English   中英

为什么Java中有最大堆设置?

[英]Why is there are max heap setting in Java?

读数后Java String可以有多少个字符? 我开始奇怪了:

为什么当前JVM中存在最大堆设置? 当堆内存耗尽且垃圾收集器无法释放所需内存时,为什么不从操作系统请求更多内存? 有人知道背后的理由吗?

我相信它有助于沙盒Java程序,即阻止它们占用物理机器上的所有内存。 即使使用垃圾收集,内存泄漏仍然可以在Java中发生,并且它们有时甚至比C / C ++更微妙。

如果您确实需要为Java软件提供更大的内存容量,则可以在配置文件中调整最大VM大小。

因为您不希望JVM接管O / S上的所有可能资源(在某些情况下,您可以这样做,但在这种情况下,将最大堆大小设置为JVM的最大值,O / S组合可以处理)。

JVM是一个虚拟机。 创建虚拟机时,会限制其资源,因为通常您需要在实际计算机上安装多个虚拟机。

因为太多堆内存实际上可能是有害的 - 你可能会遇到一个相对较小的应用程序使用所有大堆的情况,这样当GC启​​动时它会让你的应用程序停止,同时它回收大量的内存。

较小的堆将允许gc更频繁地运行,但不会每次都使程序瘫痪。

因为物理内存也是有限的。 你不能要求越来越多。 实际上,即使物理RAM不可用,您也可以分配虚拟内存。 内存将分配在磁盘上,可能会导致严重的性能问题。 在更糟糕的情况下,整个计算机卡住了,你无法用它做任何事情。 最好早点失败,即JVM崩溃比物理主机卡住更好。

两件事情:

  1. 您不希望消耗所有资源
  2. 堆积太大会导致垃圾收集器出现问题,因为您的程序可能会意外暂停几分钟,因为GC必须完成它的工作

问题2.足够大,适用于为大型Java进程分配数百GB的情况,甚至还开发了Terracotta的bigmemory等替代解决方案。

也许你不希望你的整个内存只被一个应用程序使用。 请注意,如果仍有一些空闲内存,则可能无法释放内存,这可能意味着,如果您的应用程序与Xmx200m完美运行并在没有最大堆限制的情况下运行它,则可能占用整个内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM