gpt4 book ai didi

java - 为什么 Java 使用静态堆而不是允许任意数量的内存?

转载 作者:搜寻专家 更新时间:2023-11-01 01:06:10 25 4
gpt4 key购买 nike

在 Java 中,虚拟机预先分配了一个无法在运行时扩展的内存堆。开发人员可以在 VM 加载时使用 -Xmx 开关增加堆的大小,但无法在运行时增加堆的最大大小。这是为什么?

最佳答案

碎片是内存分配中的一个大问题,内存不足也是如此。如果您可以分配和保留您需要的内存,它会更简单,也更不容易出错,尤其是在服务器环境中。通过预分配内存,您也更有可能连续分配大部分内存(不保证,谢谢@mttdbrd),这可以更快地访问。

回到 Java 刚开始出现的时候,安装超过 1GB RAM 的设备几乎闻所未闻,相反,我们不得不使用 RAM 低至 256mb 的机器,有时甚至更少!再加上 RAM 有多慢,能够读取和写入希望连续分配的 block 更有意义。您也不会不断地敲打操作系统以提供更多 RAM,然后再次释放它,从而释放(当时)宝贵的 CPU 周期。

在那种环境下,很容易突然耗尽内存,因此能够分配您可能需要的内容并确保您在时机成熟时拥有它是很有意义的。

这些天,我想随着 RAM 变得如此容易访问,它变得不那么有意义了,尽管当我查看我的服务器以及内存分配方式时,我喜欢这样一个事实,即我所有的 Java 应用程序都很好,大部分与遍布整个地方的其他一些应用程序相比,连续分配的内存块。

这也是为什么你不能在运行时增加堆,没有办法保证你将有一个连续的分配。

关于java - 为什么 Java 使用静态堆而不是允许任意数量的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22693459/

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