问题标签 [heap-fragmentation]

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 投票
3 回答
3071 浏览

c++ - 64 位土地中的堆碎片

过去,当我处理长时间运行的 C++ 守护进程时,我不得不处理堆碎片问题。为了避免耗尽连续的堆空间,需要保留大量分配池等技巧。

这仍然是 64 位地址空间的问题吗?性能对我来说不是问题,所以我宁愿简化我的代码,不再处理缓冲池之类的事情。有没有人有关于这个问题的经验或故事?我使用的是 Linux,但我想许多相同的问题也适用于 Windows。

0 投票
2 回答
2042 浏览

c++ - 在自定义内存管理器中对抗碎片

我已经为堆分配编写了 ac/c++ 内存管理器(重载的 new/delete 和 malloc/realloc/free,基于 Doug Lea 的 malloc,但设计为免等待),并且似乎在碎片化方面遇到了一些问题。是否有任何好的资源可以详细说明通过管理器避免碎片化的好策略?

请注意,我无法重新排列已分配的内存(不使用带有 GUID 的智能指针)并且重写系统以使用池而不是堆分配是不可行的。

谢谢,
格兰特

0 投票
1 回答
5576 浏览

.net - 我的堆是碎片化的吗

我一直在阅读有关固定和碎片的信息。考虑到大量的可用空间,它在我看来是支离破碎的。我想我现在必须追查它。

想法?回馈?

0 投票
1 回答
782 浏览

c# - System.Security.Policy.Evidence、Web 服务和破坏 LoH

已开发的新应用程序大量使用 Web 服务。我们开始定期处理内存不足异常(随着使用量的增加)。在查看内存转储时,我注意到有大量相同大小的字节 []。查看这些 byte[] 的句柄,我注意到它们被 System.Security.Policy.Evidence 引用

经过进一步审查,我将这些内存分配确定为其中包含我们的 Web 服务类的实际程序集 (dll)(特别是其中 2 个程序集在内存中的 128 次和 115 次)。我在这里找到了一些信息-> blogs.msdn.com/tess/archive/2008/06/25/asp-net-memory-leak-byte-arrays-rooted-in-system-security-policy-evidence.aspx

在这里 --> blogs.javista.com/2009/03/18/best-practices-for-crm-memory-usage/

但我还没有找到很多关于这个问题的其他参考资料。(.NET 框架将 Web 服务程序集加载到内存中以检查安全策略)。

目前,我看到的唯一解决方案之一是将 Web 服务的程序集分成引用库的较小程序集。

我很困惑为什么 .NET 框架必须将整个程序集加载到内存中以检查策略,并想看看其他人是否遇到过这个问题以及您的解决方案是什么。

谢谢,丹

0 投票
2 回答
669 浏览

flash - Flash/ActionScript 内存碎片

除了标记和清除之外,.Net 和 Java 的垃圾收集器还运行压缩阶段以减少内存碎片。我找不到有关 Flash 9 垃圾收集器的压缩/碎片整理阶段的任何文档 - Flash 没有任何压缩阶段吗?

0 投票
4 回答
8922 浏览

c++ - Memory Fragmentation Profiler

Are there any good memory fragmentation profilers? (linux gcc version would be nice). Valgrind cannot analyze this because it uses custom malloc/free functions.

Thanks, Andrew

0 投票
5 回答
4384 浏览

c++ - 对 C++ 堆分配器和 STL 进行碎片整理

我正在寻找编写一个自我碎片整理内存管理器,其中一个简单的递增堆分配器与一个简单的压缩碎片整理程序结合使用。

粗略的方案是从最低内存地址开始向上分配块,并保持簿记信息从最高内存地址开始向下工作。

内存管理器会传回智能指针——boost 的 intrusive_ptr 对簿记结构来说似乎是最明显的,然后它们本身会指向实际的内存块,从而提供一定程度的间接性,以便可以轻松地移动块。

碎片整理程序将从“生成”书签开始压缩堆以加快进程,并且一次只对固定数量的内存进行碎片整理。指向块本身的原始指针在下一次碎片整理之前一直有效,因此可以自由传递,直到提高性能为止。

对此的具体应用是控制台游戏编程,因此在每一帧的开始或结束时,可以相对安全地完成碎片整理。

所以我的问题是,是否有人将这种分配方案与 STL 结合使用,它是否会像我怀疑的那样完全摧毁 STL。我可以看到 std::list< intrusive_ptr > 在 intrusive_ptr 级别上工作,但是 stl 列表节点本身的分配是否存在以覆盖下一个/上一个指针本身是 intrusive_ptr 或者我只是必须有一个标准堆分配器与这个更动态的分配器并驾齐驱。

0 投票
4 回答
4087 浏览

c++ - 如何解决 C++ 服务器程序中的堆碎片问题?

堆碎片可能会导致预计连续运行数月的服务器应用程序突然开始出现故障,认为它内存不足。

假设我已尽最大努力将 VC++ 服务器应用程序中的运行时堆碎片最小化,但它仍然会累积并导致问题。例如,我可以每月或每处理 50 万个请求自动重新启动应用程序 - 安全地停止它并安全地重新启动一个新堆。我还能做些什么来解决堆碎片问题?

0 投票
1 回答
2332 浏览

delphi - 如何监视或可视化 delphi 应用程序的内存碎片

如何监控或可视化 delphi 应用程序的内存碎片?

0 投票
4 回答
1075 浏览

.net - 何时解决托管堆碎片

我正在阅读Josh Smith 的一篇博客文章,其中他使用缓存机制来“减少托管堆碎片”。他的缓存减少了正在创建的短期对象的数量,代价是执行速度稍慢。

在像 C# 这样的托管语言中,托管堆碎片有多少问题?如果是问题,您如何诊断?在什么情况下您通常需要解决它?