gpt4 book ai didi

linux - 为什么这么多的应用程序分配了大量的虚拟内存而不使用任何虚拟内存?

转载 作者:IT王子 更新时间:2023-10-29 00:32:01 27 4
gpt4 key购买 nike

一段时间以来,我一直在观察编程中的一些奇怪现象,因为在 linux 系统上默认启用了过度提交。

在我看来,几乎每个高级应用程序(例如,用 Java、Python 或 C# 等高级编程语言编写的应用程序,包括一些使用 Qt 等大型库的 C++ 编写的桌面应用程序)都使用了大量的虚拟机操作内存。例如,Web 浏览器分配 20GB 内存而仅使用 300MB 内存是正常的。或者对于 dektop 环境、mysql 服务器、几乎每个 java 或 mono 应用程序等等,分配数十 GB 的 RAM。

为什么会这样?重点是什么?这样做有什么好处吗?

我注意到,当我在 Linux 中禁用过度使用时,如果桌面系统实际运行了很多此类应用程序,系统将变得无法使用,因为它甚至无法正常启动。

最佳答案

在虚拟机中运行代码的语言(如 Java (*)、C# 或 Python)通常会在启动时分配大量(虚拟)内存。其中一部分是虚拟机本身所必需的,一部分是预先分配给虚拟机内部的应用程序。

对于在直接操作系统控制下执行的语言(如 C 或 C++),这不是必需的。您可以编写仅动态使用实际需要的内存量的应用程序。然而,一些应用程序/框架仍然以这样的方式设计,即它们一次向操作系统请求大块内存,然后自己管理内存,希望比操作系统。

这里有问题:

  • 不一定更快。大多数操作系统在管理内存方面已经非常聪明。优化规则 #1,衡量、优化、衡量

  • 并非所有操作系统都 有虚拟内存。有一些非常有能力的人无法运行那些“粗心”地假设您可以毫无问题地分配大量“非真实”内存的应用程序。

  • 您已经发现,如果您将操作系统从“慷慨”改为“严格”,这些内存消耗大户就会大失所望。 ;-)


(*) 例如,Java 一旦启动就无法扩展 其 VM。您必须提供 VM 的最大 大小作为参数 (-Xmxn)。 “安全总比后悔好”的想法会导致某些人/应用程序严重过度分配。

关于linux - 为什么这么多的应用程序分配了大量的虚拟内存而不使用任何虚拟内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33412852/

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