gpt4 book ai didi

java - JVM 能否自动使用更多交换空间来防止内存不足错误

转载 作者:行者123 更新时间:2023-12-02 13:04:58 25 4
gpt4 key购买 nike

Understanding JVM Memory Allocation and Java Out of Memory: Heap Space中所示,在分配堆空间时,JVM不区分物理内存和虚拟内存。当java对象的内存分配和计算开始发生时,JVM开始区分虚拟内存和物理内存。如果有足够的交换空间(在 Linux 机器上),为什么会发生内存不足错误? JVM 不应该简单地使用交换空间来完成计算吗?尽管速度很慢。

例如:RAM:14GB,交换空间:10GB

如果一个java应用程序需要20GB的空间,它不能利用交换空间(虚拟内存)来完成应用程序的运行吗?

对于 Java 应用程序来说,堆空间和虚拟内存之间的相互作用是什么?

最佳答案

进程永远不知道它们使用的内存的哪些部分在虚拟内存中,哪些部分在物理内存中。

这是由操作系统以透明的方式管理的。通常,最常用或最近使用的内存“ block ”(正确的术语是“页”)保存在物理内存中。程序只需要内存,操作系统负责分配内存并决定其每一页的位置(虚拟或物理)。

要使用某 block 内存,您必须拥有该 block 内存在物理内存中的页面。将一页内存从虚拟内存移至物理内存的成本非常高,因此必须尽量避免这样做。因此,您通常指定堆小于物理内存,以允许操作系统尝试将所有堆保留在物理内存中(请注意,您应该为操作系统和其他应用程序留出额外的物理内存)。

对于这个问题:

couldn't it utilize the additional 8GB from swap space (virtual memory) and complete running the application

您已经告诉 JVM 最多使用 12 GB 内存,现在您希望 JVM 忽略您的命令并扩展到 12 GB 之外? JVM 是个好人,听你的,你应该决定是否选择内存限制以确保良好的性能,还是选择无堆限制和风险分页(当然,即使没有明确的限制,由于主机的原因也会有限制)机器操作系统和资源)。

This link provides more information

关于java - JVM 能否自动使用更多交换空间来防止内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37890214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com