问题标签 [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.
iphone - iPhone 应用程序在启动时使用 60mb 的虚拟内存
现在,我知道我的应用程序使用了很多图形,但不是 60mb 的图形。但是,Instruments 显示该应用程序在启动后就使用了 60+mb 的虚拟内存。编译后的应用程序有 24mb 大,我们说的是启动后空闲的欢迎屏幕;知道为什么 VM 大小可能会这么大吗?
java - 让 JVM 根据需要将内存需求增加到 VM 限制的大小?
我们发布了一个 Java 应用程序,它的内存需求可能会根据它正在处理的数据的大小而有很大的不同。如果您不设置最大 VM(虚拟内存)大小,JVM 通常会因大数据上的 GC 失败而退出。
我们希望看到的是 JVM 请求更多内存,因为 GC 无法提供足够的内存,直到总可用 VM 耗尽。例如,从 128Mb 开始,每当 GC 失败时以几何方式(或其他步骤)增加。
JVM(“Java”)命令行允许显式设置最大 VM 大小(各种 -Xm* 命令),您认为这样设计就足够了。我们尝试在应用程序随附的 .cmd 文件中执行此操作。但是如果你选择任何特定的数字,你会得到以下两种不良行为之一:1)如果你的数字足够小,可以在大多数目标系统上工作(例如,1Gb),它对于大数据来说还不够大,或者 2)如果你把它做得很大,JVM 拒绝在那些实际 VM 小于指定值的系统上运行。
如何设置 Java 以在需要时使用可用的 VM,而无需事先知道该数字,也无需在启动时全部获取?
computer-science - 计算机系统类和虚拟内存 - 代数工作
我可能有更多的数学问题,但这个问题源于阅读我在虚拟内存一章中的计算机系统书籍......所以我觉得在这里问它是有道理的。
书中指出:
每个虚拟页面的大小为P = 2 p字节。
我的代数生锈了,这可能是我需要问这个的原因。现在,对于我正在查看的示例,我们知道P = 1024
. 这是否意味着我可以p
通过简单地确定哪些p
会导致
1024 = 2个真的?
如果我的顿悟是真实且正确的,那么 1024 = 2 10应该是我的答案。即P=1024
和p=10
。
windows - Windows 32 位虚拟内存页面映射问题
我正在从这里学习有关 Windows 32 位虚拟内存页面映射的知识,
(我的目标是现代 Windows 版本,例如 Vista、Win 7、Server 2003/2008 32 位版本。)
两个困惑,
用户空间虚拟内存空间通常限制在2G,但物理磁盘页面存储可能远大于2G。由于磁盘页面比虚拟内存页面多,因此理论上可以将多个磁盘页面映射到一个虚拟地址页面。如果用户请求访问某个虚拟地址,如果多个磁盘页面映射到一个虚拟地址页面,内存管理器如何知道应该访问哪个磁盘页面?
我不知道为什么会有像 byte[] 数组必须使用连续的虚拟内存空间这样的限制。我认为理论上即使我们只分配500M的虚拟空间地址,我们也可以重新使用这样的虚拟空间地址来继续映射/取消映射磁盘页面文件,以消耗尽可能多的资源,甚至大于2G。
有任何想法吗?
c - C中的指针实现细节
我想知道违反我在下面列出的假设的架构。另外,我想知道是否有任何假设对于所有架构都是错误的(也就是说,如果其中任何一个完全错误)。
sizeof(int *) == sizeof(char *) == sizeof(void *) == sizeof(func_ptr *)
无论指向的数据类型如何,给定体系结构的所有指针在内存中的表示都是相同的。
指针的内存表示形式与架构相同位长的整数相同。
只有编译器禁止指针数据类型的乘法和除法。注意:是的,我知道这是荒谬的。我的意思是 - 是否有硬件支持来禁止这种不正确的使用?
所有指针值都可以转换为单个整数。换句话说,哪些架构仍然使用段和偏移量?
增加一个指针相当于增加了指针
sizeof(the pointed data type)
存储的内存地址。Ifp
is anint32*
thenp+1
等于 4 字节后的内存地址p
。
我最习惯于在连续的虚拟内存空间中使用指针。对于这种用法,我通常可以将它们视为数轴上的地址。请参阅堆栈溢出问题指针比较。
java - java web编程中如何使用虚拟内存(在linux文件系统中交换)
我在 java web 应用程序中工作。在某些部分中,我使用了非常巨大的树变量,可以保存并保留在内存 (RAM) 中。我可以将它迁移到虚拟内存(交换)。注意:巨大的树包含在建议 Ajax 文本框中使用的所有用户的名称和电子邮件。
c++ - 增加虚拟字节的操作和功能
在 Windows 中遇到 32 位进程的一些内存不足问题,我开始使用性能监视器来记录该进程的某些计数器。
虽然虚拟字节高于私有字节和工作集是正常的,但我发现在我的情况下存在很大差异,虚拟字节远高于私有字节和工作集。
哪些特定操作和 Win32/CRT 函数(在 C 或 C++ 中)会增加虚拟字节而不是私有字节和工作集?
如果我了解性能监视器中不同计数器的描述,我想这将是某种共享资源。
由于在 Windows 的不同版本以及同一 Windows 版本中的不同应用程序中用于内存计数器的命名约定似乎存在一些(至少可以说)混淆,我整理了以下内容:
来自 MSDN 的信息
根据MSDN - Windows Releases 的内存限制,32 位 Windows 中每个 32 位进程的用户模式虚拟地址空间限制通常为 2 GB。IMAGE_FILE_LARGE_ADDRESS_AWARE
使用和时最大可达 3 GB 4GT
。
根据MSDN - Memory Performance Information ,下面是性能监视器中不同计数器的描述以及任务管理器中的相应列和保存信息的 Win32 结构。
虚拟字节
Virtual Bytes 是进程正在使用的虚拟地址空间的当前大小(以字节为单位)。使用虚拟地址空间并不一定意味着相应使用磁盘或主内存页面。虚拟空间是有限的,进程可能会限制其加载库的能力。
任务管理器 XP:不适用
任务管理器 Vista:不适用
结构:MEMORYSTATUSEX.ullTotalVirtual-MEMORYSTATUSEX.ullAvailVirtual
私有字节
Private Bytes 是当前进程分配的不能与其他进程共享的内存大小(以字节为单位)。
任务管理器 XP:VM 大小
任务管理器 Vista:提交大小
结构:PROCESS_MEMORY_COUNTERS_EX.PrivateUsage
工作集
工作集是此进程的工作集的当前大小(以字节为单位)。工作集是进程中的线程最近接触的内存页集。如果计算机中的可用内存高于阈值,则页面将留在进程的工作集中,即使它们没有被使用。当可用内存低于阈值时,将从工作集中修剪页面。如果需要它们,它们将在离开主存储器之前被软故障返回到工作集中。
任务管理器 XP:内存使用
任务管理器 Vista:工作集
结构:PROCESS_MEMORY_COUNTERS_EX.WorkingSetSize
macos - 在 OS X 10.5/10.6 中检索自己的进程的内存映射
在 Linux 中,查看进程内存映射的最简单方法是查看/proc/PID/maps
,如下所示:
在 OSX 10.5 或 10.6 下,进程如何获取有关进程自己的内存映射的等效信息(地址范围、保护、映射文件名等)?
linux - Linux 3/1 虚拟地址拆分
在理解 highmem 需要处理超过 1GB 的 RAM 时,我遗漏了一些东西。有人可以指出我哪里出错了吗?谢谢!
我知道的:
为内核操作保留 1 GB 的进程虚拟内存(高内存区域)。用户空间可以使用剩余的 3 GB。这是 3/1 拆分。
VM 的虚拟内存特性将(连续的)虚拟内存页面映射到物理页面 (RAM)。
我不知道的是:
哪些操作使用内核虚拟内存?我想内核空间中的 kmalloc(...) 之类的东西会使用内核虚拟内存。
我认为在这个方案下可以使用 4GB 的 RAM。我不明白为什么内核 1 GB 虚拟空间是寻址物理空间时的限制因素。这就是我的理解崩溃的地方。请指教。
我一直在阅读这篇文章(http://kerneltrap.org/node/2450),这很棒。但这并没有完全按照我的喜好解决我的问题。
linux - 我可以在linux上用完虚拟内存吗?
我的应用程序类似于假设程序:
没有内存泄漏,但在我的系统上,内存消耗(顶部,VSS 列)无限制地增长(例如可用物理内存的 300%)。这是正常的吗?
更新- 使用内存一段时间,然后释放它。这有区别吗?