问题标签 [memory-management]
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.
memory-management - 堆栈和堆是什么以及在哪里?
编程语言书籍解释了值类型是在堆栈上创建的,而引用类型是在堆上创建的,但没有解释这两个东西是什么。我还没有阅读对此的明确解释。我明白什么是堆栈。但,
- 它们在哪里,是什么(物理上在真实计算机的内存中)?
- 它们在多大程度上受操作系统或语言运行时的控制?
- 他们的范围是什么?
- 是什么决定了它们每个的大小?
- 是什么让一个更快?
java - Java VM 是否在内存中移动对象,如果是,如何移动?
Java 虚拟机是否曾经移动内存中的对象,如果是,它如何处理对移动对象的更新引用?
我问是因为我正在探索以分布式方式(即跨多个服务器)存储对象的想法,但出于效率原因,我需要能够在服务器之间移动对象。对象需要能够包含指向彼此的指针,甚至指向远程服务器上的对象。我正在尝试考虑更新对移动对象的引用的最佳方法。
到目前为止,我的两个想法是:
- 在对象的生命周期内保持一个不会移动的引用间接,如果对象移动,我们会更新它。但是 - 这些间接是如何管理的?
- 为每个对象保留一个反向引用列表,这样我们就知道如果对象被移动,必须更新什么。当然,这会产生性能开销。
我会对有关这些方法的反馈以及对替代方法的任何建议感兴趣。
winapi - 如何找出应用程序占用了多少地址空间并将其报告给用户?
我正在为一个应用程序编写内存管理器,作为一个由二十多名编码人员组成的团队的一员。我们的内存配额用完了,我们需要能够看到发生了什么,因为我们似乎只使用了大约 700Mb。我需要能够报告它的去向——碎片化等。有什么想法吗?
windows - Windows 任务管理器中的可用页面文件是如何计算的?
在 Vista 任务管理器中,我知道可用的页面文件是这样列出的:
Page File inUse M / available M
在 XP 中它被列为 Commit Charge Limit。
我曾认为:
可用虚拟内存 = 物理内存总计 + 页面文件的总和
但是在我的机器上,我的物理内存 = 2038M,页面文件 = 4096M,可用页面文件 = 6051。这里有 83M 未计算。那是干什么用的。我认为这可能与内核内存有关,但数字似乎不匹配?
到目前为止我发现的信息:
- 有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/aa965225(VS.85).aspx。
- 页面文件大小可以在这里找到:计算机属性,高级,性能设置,高级。
c++ - 智能指针:谁拥有对象?
C++ 是关于内存所有权的——也就是所有权语义。
一块动态分配的内存的所有者有责任释放该内存。所以问题真的变成了谁拥有记忆。
在 C++ 中,所有权由包装在内部的原始指针的类型记录,因此在一个好的(IMO)C++ 程序中,很少(很少,不是从不)看到传递的原始指针(因为原始指针没有推断的所有权,因此我们可以不知道谁拥有内存,因此如果不仔细阅读文档,您就无法知道谁负责所有权)。
相反,很少看到原始指针存储在一个类中,每个原始指针都存储在其自己的智能指针包装器中。(注意:如果您不拥有一个对象,则不应存储它,因为您不知道它何时会超出范围并被销毁。)
所以问题:
- 人们遇到了什么类型的所有权语义?
- 使用哪些标准类来实现这些语义?
- 你觉得它们在什么情况下有用?
让我们为每个答案保留一种语义所有权,以便可以单独对它们进行上下投票。
概括:
从概念上讲,智能指针很简单,简单的实现也很容易。我见过许多尝试的实现,但它们总是以某种方式被破坏,这对于随意使用和示例来说并不明显。因此,我建议始终使用库中经过良好测试的智能指针,而不是自己滚动。std::auto_ptr
或者 Boost 智能指针之一似乎可以满足我的所有需求。
std::auto_ptr<T>
:
单身人士拥有该物品。允许转让所有权。
用法:这允许您定义显示所有权显式转移的接口。
boost::scoped_ptr<T>
单身人士拥有该物品。不允许转让所有权。
用法:用于显示明确的所有权。对象将被析构函数或显式重置时销毁。
boost::shared_ptr<T>
( std::tr1::shared_ptr<T>
)
多重所有权。这是一个简单的引用计数指针。当引用计数达到零时,对象被销毁。
用法:当一个对象可以有多个生命周期无法在编译时确定时。
boost::weak_ptr<T>
:
shared_ptr<T>
在可能发生指针循环的情况下使用 with 。
用法:用于在只有循环维护共享引用计数时停止循环保留对象。
java - 查看/解决 Windows XP 内存碎片的工具
我们有一个需要大量堆空间的 java 程序 - 我们以(以及其他命令行参数)参数 -Xmx1500m 开始它,它指定最大堆空间为 1500 MB。在刚刚重新启动的 Windows XP 机器上启动此程序时,它将毫无问题地启动和运行。但是如果程序运行了几次,计算机已经启动了一段时间等,当它尝试启动时,我得到这个错误:
我怀疑Windows本身存在内存碎片,但我不知道如何证实这种怀疑。发生这种情况时,任务管理器和 sysinternals procexp 报告 2000MB 可用内存。我看过这个与内部碎片有关的问题
所以第一个问题是,我如何确认我的怀疑?第二个问题是,如果我的怀疑是正确的,有没有人知道解决这个问题的任何工具?我环顾四周,但除了定期重新启动机器之外,我没有发现任何有用的东西。
ps - 改变操作系统目前也不是一个可行的选择。
c - 带有 C 中指针的 int 矩阵 - 内存分配混乱
我在不产生内存泄漏的情况下生成 int 矩阵时遇到了一些问题。我希望能够通过 read_matrix() 将给定的(全局)矩阵动态地制成任何大小。但是我希望以后能够释放内存。所以在我的主要方法中,第二个 printf 应该导致总线错误,因为它不应该分配任何内存。我将如何去创造这个?
iphone - Objective-C 中的内存管理
我来自 C/C++ 背景,Objective-C 的动态特性对我来说有些陌生,是否有任何人可以向我指出 Objective-C 中一些基本内存管理技术的好资源?前任。保留、释放、自动释放
例如,使用指向 Objective-C 对象的指针并将其视为数组是完全非法的吗?您是否被迫将 NSArray 和 NSMutableArray 用于数据结构?
我知道这些都是相当新手的问题,感谢您为我提供的任何帮助。
c - 如何模拟内存分配错误
我的 C 应用程序使用第三个库,它们自己管理内存。为了变得健壮,我的应用程序有代码来处理由于缺少可用内存而导致的库函数故障。
我想测试这段代码,为此,我需要模拟由于内存不足而导致的失败。
为此推荐什么工具?我的环境是 Linux/gcc。
python - 推荐使用哪种 Python 内存分析器?
我想知道我的 Python 应用程序的内存使用情况,特别想知道哪些代码块/部分或对象消耗了最多的内存。谷歌搜索显示一个商业版本是Python Memory Validator(仅限 Windows)。
我没有尝试过任何人,所以我想知道哪个是最好的考虑:
提供大部分细节。
我必须对我的代码做最少的更改或不做任何更改。