我想运行一个内存密集型 Java 程序并限制它可以使用的物理内存量。
是否可以将 JVM 配置为使用不超过 1gb 的 RAM,并且在使用了第一个 1gb RAM 之后仅使用虚拟内存?
我希望该程序能够拥有它所需要的地址空间(几 GB),但不希望它使用机器上所有可用的 RAM。
答案1
我找到了一个适用于 Ubuntu 的可行解决方案:
使用系统实用程序,ulimit
我可以为从ulimit
调用 shell 生成的任何进程设置最大物理内存和许多其他资源限制。
我所要做的就是打开一个 shell,调用ulimit
然后启动该过程。
答案2
不,我不知道有任何解决方案可以让你这样做。我不确定这是否可能,除非进行重大的架构更改;毕竟,操作系统通常会根据具体情况决定要交换哪些数据以及将哪些数据保留在 RAM 中。我不清楚这种限制是否可行;无论如何,这可能需要对操作系统进行深刻的更改。
反问:你为什么认为这是必要的?现代操作系统的虚拟内存子系统已经经过了精细调整,可以为你提供最佳性能。是什么让你相信你可以做得更好?
加:
如果您确实遇到内存问题,只需购买更多 RAM。4GB 的价格约为 100 美元,购买它可能比花费数小时对 VM 子系统进行微调更有效……