繁体   English   中英

如何启动无限内存的JVM?

[英]How do I start a JVM with unlimited memory?

如何启动没有堆最大内存限制的JVM? 这样它可以占用尽可能多的内存吗?

我搜索了是否有这样的选项,但我似乎只找到-Xmx和-Xms选项。

编辑:

假设我有一台4GB RAM的服务器,它只运行我的应用程序。 而且,假设我有另一台32GB RAM的服务器。 我不想以4GB的内存限制启动我的应用程序,因为第二台机器应该能够处理更多的对象

-XX:MaxRAMFraction=1将自动配置最大堆大小以物理RAM的100%或强加的cgroup如果限制UseCGroupMemoryLimitForHeap被设置。

OpenJDK 10还将支持基于百分比的选项MaxRAMPercentage允许更细粒度的选择JDK-8186248 为非堆数据结构留出一些备用容量以避免交换非常重要。

你不能(或者至少,我不知道支持它的JVM实现)。 JVM需要在启动时知道它可以分配多少内存,以确保它可以在虚拟内存中保留连续的范围。 这允许 - 以及其他 - 用于在存储器管理中更简单的推理。

如果虚拟内存在运行时会被扩展,这可能会导致虚拟内存碎片碎片化,从而使跟踪和引用内存变得更加困难。

JVM在内存有限的物理计算机上运行。 因此,只要内存受到定义的限制,JVM就不能拥有无限的内存。 但是,您可以在-Xmx选项中提供非常大的限制。

问题是,为什么你需要无限的记忆,更正确的问题是你真正需要多少记忆?

在Linux上,您可以使用freeawk命令来计算内联值,如下所示:

JAVA_OPT_MAX_MEM=$(free -m | awk '/Mem:/ {printf "-Xmx%dm", 0.80*$2}')

示例结果(在具有3950m可用内存的计算机上):

JAVA_OPT_MAX_MEM=-Xmx3160m

计算出的选项是报告总内存的80%。

暂无
暂无

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

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