问题标签 [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.

0 投票
30 回答
1718159 浏览

memory-management - 堆栈和堆是什么以及在哪里?

编程语言书籍解释了值类型是在堆栈上创建的,而引用类型是在堆上创建的,但没有解释这两个东西是什么。我还没有阅读对此的明确解释。我明白什么是堆栈。但,

  • 它们在哪里,是什么(物理上在真实计算机的内存中)?
  • 它们在多大程度上受操作系统或语言运行时的控制?
  • 他们的范围是什么?
  • 是什么决定了它们每个的大小?
  • 是什么让一个更快?
0 投票
6 回答
3076 浏览

java - Java VM 是否在内存中移动对象,如果是,如何移动?

Java 虚拟机是否曾经移动内存中的对象,如果是,它如何处理对移动对象的更新引用?

我问是因为我正在探索以分布式方式(即跨多个服务器)存储对象的想法,但出于效率原因,我需要能够在服务器之间移动对象。对象需要能够包含指向彼此的指针,甚至指向远程服务器上的对象。我正在尝试考虑更新对移动对象的引用的最佳方法。

到目前为止,我的两个想法是:

  1. 在对象的生命周期内保持一个不会移动的引用间接,如果对象移动,我们会更新它。但是 - 这些间接是如何管理的?
  2. 为每个对象保留一个反向引用列表,这样我们就知道如果对象被移动,必须更新什么。当然,这会产生性能开销。

我会对有关这些方法的反馈以及对替代方法的任何建议感兴趣。

0 投票
3 回答
237 浏览

winapi - 如何找出应用程序占用了多少地址空间并将其报告给用户?

我正在为一个应用程序编写内存管理器,作为一个由二十多名编码人员组成的团队的一员。我们的内存配额用完了,我们需要能够看到发生了什么,因为我们似乎只使用了大约 700Mb。我需要能够报告它的去向——碎片化等。有什么想法吗?

0 投票
1 回答
1133 浏览

windows - Windows 任务管理器中的可用页面文件是如何计算的?

在 Vista 任务管理器中,我知道可用的页面文件是这样列出的:
Page File inUse M / available M
在 XP 中它被列为 Commit Charge Limit。

我曾认为:
可用虚拟内存 = 物理内存总计 + 页面文件的总和

但是在我的机器上,我的物理内存 = 2038M,页面文件 = 4096M,可用页面文件 = 6051。这里有 83M 未计算。那是干什么用的。我认为这可能与内核内存有关,但数字似乎不匹配?

到目前为止我发现的信息:

0 投票
11 回答
59065 浏览

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 。

用法:用于在只有循环维护共享引用计数时停止循环保留对象。

0 投票
6 回答
6924 浏览

java - 查看/解决 Windows XP 内存碎片的工具

我们有一个需要大量堆空间的 java 程序 - 我们以(以及其他命令行参数)参数 -Xmx1500m 开始它,它指定最大堆空间为 1500 MB。在刚刚重新启动的 Windows XP 机器上启动此程序时,它将毫无问题地启动和运行。但是如果程序运行了几次,计算机已经启动了一段时间等,当它尝试启动时,我得到这个错误:

我怀疑Windows本身存在内存碎片,但我不知道如何证实这种怀疑。发生这种情况时,任务管理器和 sysinternals procexp 报告 2000MB 可用内存。我看过这个与内部碎片有关的问题

所以第一个问题是,我如何确认我的怀疑?第二个问题是,如果我的怀疑是正确的,有没有人知道解决这个问题的任何工具?我环顾四周,但除了定期重新启动机器之外,我没有发现任何有用的东西。

ps - 改变操作系统目前也不是一个可行的选择。

0 投票
7 回答
27691 浏览

c - 带有 C 中指针的 int 矩阵 - 内存分配混乱

我在不产生内存泄漏的情况下生成 int 矩阵时遇到了一些问题。我希望能够通过 read_matrix() 将给定的(全局)矩阵动态地制成任何大小。但是我希望以后能够释放内存。所以在我的主要方法中,第二个 printf 应该导致总线错误,因为它不应该分配任何内存。我将如何去创造这个?

0 投票
10 回答
13804 浏览

iphone - Objective-C 中的内存管理

可能的重复:
学习 Obj-C 内存管理
iPhone 内存管理的最佳解释在哪里?

我来自 C/C++ 背景,Objective-C 的动态特性对我来说有些陌生,是否有任何人可以向我指出 Objective-C 中一些基本内存管理技术的好资源?前任。保留、释放、自动释放

例如,使用指向 Objective-C 对象的指针并将其视为数组是完全非法的吗?您是否被迫将 NSArray 和 NSMutableArray 用于数据结构?

我知道这些都是相当新手的问题,感谢您为我提供的任何帮助。

0 投票
11 回答
8274 浏览

c - 如何模拟内存分配错误

我的 C 应用程序使用第三个库,它们自己管理内存。为了变得健壮,我的应用程序有代码来处理由于缺少可用内存而导致的库函数故障。

我想测试这段代码,为此,我需要模拟由于内存不足而导致的失败。

为此推荐什么工具?我的环境是 Linux/gcc。

0 投票
8 回答
304537 浏览

python - 推荐使用哪种 Python 内存分析器?

我想知道我的 Python 应用程序的内存使用情况,特别想知道哪些代码块/部分或对象消耗了最多的内存。谷歌搜索显示一个商业版本是Python Memory Validator(仅限 Windows)。

开源的是PySizerHeapy

我没有尝试过任何人,所以我想知道哪个是最好的考虑:

  1. 提供大部分细节。

  2. 我必须对我的代码做最少的更改或不做任何更改。