问题标签 [virtual-memory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
34546 浏览

operating-system - 无法理解 Belady 的异常情况

所以 Belady's Anomaly 指出,当使用 FIFO 页面替换策略时,当添加更多页面空间时,我们会遇到更多页面错误。

我的直觉告诉我们,我们应该减少或最多增加相同数量的页面错误,因为我们增加了更多的页面空间。

如果我们将 FIFO 队列视为管道,则添加更多页面空间就像使管道变得更大:

那么,为什么你会得到更多的页面错误呢?我的直觉是,使用更长的管道,您需要更长的时间才能开始出现页面错误(因此,使用无限管道,您将没有页面错误),然后您会遇到同样多的页面错误,就像通常与较小的管道一样。

我的推理有什么问题?

0 投票
2 回答
6061 浏览

operating-system - MMU 是调解操作系统和物理内存之间的一切,还是只是一个地址转换器?

我试图了解当我们想为特定的虚拟内存地址分配一些值时操作系统是如何工作的。

我的第一个问题是关于 MMU 是否处理 CPU 和 RAM 之间的所有事情。这是真的?从维基百科上可以读到的内容,我会这样说:

内存管理单元 (MMU),有时称为分页内存管理单元 (PMMU),是一种计算机硬件组件,负责处理对 CPU 请求的内存的访问。

如果是这样,例如,如何告诉 MMU 我想要获得 8 个字节、64 个或 128 个字节?写作呢?

如果不是这样,我猜MMU只是将虚拟地址转换为物理地址?

当 MMU 检测到我们称之为页面错误时会发生什么?我想它必须告诉 CPU 以便 CPU 将页面本身从磁盘加载,或者 MMU 能够做到这一点吗?

谢谢

0 投票
4 回答
4753 浏览

java - Java 中的什么在虚拟内存中使用了 400M,我如何降低该使用量?

简单的程序:

然后

对于 OpenJDK 1.6.0_20,这在我的机器上使用了 600M 的虚拟内存!即“top”显示“VIRT”600M和RES 10m。(我使用的是 Ubuntu 10.04、32 位或 64 位)。

对于 Sun 的 Java 1.6.0_22,它使用 400M 的虚拟内存。

什么在使用所有虚拟内存,如何降低使用量?

完整的“java版本”:

OpenJDK:

太阳:

编辑

从任何一个包中使用 javac 编译似乎都没有帮助。

添加一些代码来打印已用内存如下:

节目

太阳:

OpenJDK:

即使使用-Xmx5m,它也必须有最小值?我之前读过默认值(取决于jvm,虚拟机,默认四分之一物理内存的常用策略),但这会导致大量虚拟内存使用,我可以不减少它吗?

编辑#2

添加 -Xmx 会改变一些事情:

OpenJDK:

为任一 JVM 使用“仅”150M 的虚拟内存。

编辑#3

nos、bestsss、Mikaveli,也许还有其他人指出虚拟内存不使用交换。nos 声称 OOM 杀手足够聪明,可以根据实际内存使用情况进行操作。如果这些事情是真的,那么我想我不关心虚拟内存的使用。RES(居民大小)很小,所以我很好。

编辑#4

不确定接受哪个答案。其中任何一个,如果它显示为答案:“不要担心,因为虚拟内存很便宜”或解释为什么 Java 保留至少 150M 的虚拟内存,无论我给它 -Xmx 或 -Xms 是什么,即使实际内存使用量很小。

编辑#5

这是一个dup。我投票关闭。

0 投票
1 回答
3060 浏览

linux - 在 linux sk_buff 中,skb->data 是物理地址还是虚拟地址?

我正在调查嵌入式系统的以太网驱动程序中的一些内存损坏问题。

我怀疑总线主控 DMA 控制器和慢速 SDRAM 之间存在问题。所以我想在快速 SRAM 中使用反弹缓冲区。为此,我需要做两件事:我必须将 SRAM 的物理地址(从总线主机的角度来看)放入 DMA 控制器缓冲区描述符中,并且一旦 DMA 控制器报告一个传入的数据包。

从阅读中我无法确定的内容

是 skb->data 是物理地址还是虚拟地址。即我应该打电话

或者

将数据包放入 sk_buff 以便 linux 网络堆栈的其余部分可以处理它?

编辑:这是有问题的驱动程序。我会说它正在将虚拟地址传递到 DMA 控制器寄存器中,因此无法工作,但我有一个可以使用此代码的 devkit。然而,我的 SDRAM 的时序不如 devkit DDR SDRAM 好,因此我正在考虑实现反弹缓冲区。

0 投票
1 回答
214 浏览

windows - 在 Windows 应用程序中实现我自己的文件缓存有什么意义吗?

我有一个引用 28 字节记录的数据文件的 Delphi 应用程序。该文件按顺序写入,但随机读取。数据文件被拆分为 N 个物理文件,它们以 10 兆左右的速度滚动以提供一些针对磁盘问题的保险,因为我们只写入最近的一个,我发现它变得越来越慢,如果它被允许长大。在启动时,我读取了整个文件集并建立了一个索引,以便我可以快速知道在给定虚拟记录号的情况下要查找哪个文件。

作为拆分成 N 个文件的一部分,我实现了一个读取缓存。我现在意识到 Windows 自己做了相当多的缓存,我想知道我是否通过在我自己和磁盘文件之间粘贴另一个缓存来获得任何东西。

任何想法表示赞赏。

0 投票
2 回答
4827 浏览

windows - #pragma alloc_text(PAGE, 函数名)

此代码通常用于设备驱动程序。foo
函数 将在系统需要时交换。

问题。

  • 它在用户空间代码中有效吗?该功能是否也会被分页?
  • 如果没有编译指示,我的意思是默认情况下,是否所有内核级函数都分配了非分页内存?
  • PE 文件加载器是否决定函数的分配位置?
0 投票
2 回答
4070 浏览

linux - Linux下共享库加载地址

我对共享库有很大的疑问。我研究的是,将由不同进程共享的库的虚拟地址对于所有这些进程都是相同的。但是我尝试通过以下命令集使用 proc 文件系统来查看相同的内容:

输出是:

不同进程的相同共享库的虚拟地址不同。

有人可以解释一下为什么会这样吗?

0 投票
1 回答
1542 浏览

android - 为什么我在简单地执行 setContentView(R.layout.somelayout) 时会出现内存泄漏?

在我的 onCreate() 中,我只是使用 xml 作为活动的内容视图。为什么我会出现内存泄漏。是我做错了什么吗?

我的 xml 只是有 5 个图像按钮,每个图像按钮都有一个 statelistdrawable(选择器)。每张图片只有 16kb 大小。(所以我使用了 10 个图像——每个按钮的按下状态图像和正常状态图像)。

在我的活动中,我没有使用 LayoutInflator.. 从 xml 设置内容视图时,android 不应该自己回收 bimaps 吗?

我收到类似这样的错误:

我替换了图像,代码在应用程序没有挂起的情况下工作,但是我的 ddms 日志因以下错误而变得疯狂:

... . . .

虽然该应用程序正在运行,但我想知道我做错了什么。或者它是错误的android系统中的错误?

附上代码:

布局 home.xml:

选择器是:(custombutton1.xml)

我从活动中删除了所有其他代码,以检查我是否正在创建内存泄漏。但是在这里我只是将内容视图设置为我的布局文件,但我的 ddms 仍然说 VM 不会让我们分配 270000 字节

我不认为我试图在这里管理任何活动生命周期。

0 投票
2 回答
731 浏览

macos - 如何以编程方式获取 OSX 上“映射文件”的大小?

当我使用“vmmap”(或 Instruments 中的分配工具)时,其中一行输出是“映射文件”。如何以编程方式获取此号码?

vmmap 输出:

0 投票
1 回答
1551 浏览

visual-c++ - 物理和虚拟内存Visual C++之间的区别?

我正在尝试编写一个自定义内存管理器,现在我正在分配一个全局字节数组,例如:

然后,当我查看 Windows 7 的资源监视器时,它报告已分配了大约 512 MB 的虚拟内存。有人可以解释为什么我没有获得物理记忆吗?如果我使用 malloc() 代替,我将获得物理内存。难道我做错了什么?那么在visual c++下有没有正确的获取物理内存的方法呢?