问题标签 [memory-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.
java - 碎片化的记忆是什么样的?
我有一个移动应用程序随着时间的推移速度变慢。我的预感,(部分由本文提供)是这是由于内存碎片减慢了应用程序的速度,但我不确定。这是应用程序的内存使用随时间变化的漂亮图表:
脆弱的岩石 http://kupio.com/image-dump/fragmented.png
图表上的 4 个峰值是应用程序上完全相同任务的 4 次执行。我开始任务,它分配了一堆内存,它坐了一会儿(顶部的平线),然后我停止了任务。此时它调用 System.gc(); 并且内存被清理。
可以看出,完全相同任务的 4 次运行中的每一次都需要更长的时间来执行。图中的低点都返回到相同的水平,因此任务运行之间似乎没有任何内存泄漏。
我想知道的是,内存碎片是一个可行的解释还是我应该先看看别处,记住我已经做了很多寻找?图表上的低点相对较低,所以我的假设是,在这种状态下,内存不会非常碎片化,因为不会有很多小的内存漏洞会导致问题。
我不知道 j2me 内存分配器是如何工作的,所以我真的不知道。任何人都可以建议吗?有没有其他人遇到过这个问题并识别出应用程序的内存配置文件?
c - 检测进程中的内存碎片问题
我们可以使用哪些各种机制来检测进程执行是否导致内存碎片?
是否有任何可用的工具?对于使用“C”代码并可以在 Windows、Linux 和 VxWorks 上运行的工具的建议将很有帮助。
c++ - 设计方法、字符串表数据、变量、stl内存使用
我有一个像这样的旧结构类:typedef vector<vector<string>> VARTYPE_T;
它作为单个变量工作。此变量可以保存从列表中的一个值到表格等数据。对于坐标 (x,y,z),大多数值是 long、double、string 或 double [3]。我只是根据需要转换它们。变量在这样的映射中管理:map<string,VARTYPE_T *>
字符串包含变量名称。当然,它们被包裹在类中。我也有一棵节点树,其中每个节点都可以保存这些变量映射之一。
为此使用 VS 2008 SP1,我检测到大量内存碎片。检查 stlport,stlport 似乎更快(20%)并且使用更少的内存(30%,对于我的测试用例)。
所以问题是:用快速正确使用的内存来解决这个要求的最佳实现是什么?我应该像池分配器一样编写自己的分配器。你会怎么做?
提前致谢,
豪伊
c++ - 分配/释放大量小对象的策略
我在玩某些缓存算法,这有点挑战性。基本上,它需要分配许多小对象(双数组,1 到 256 个元素),对象可通过映射值访问,map[key] = array
. 初始化数组的时间可能相当大,一般超过 1 万个 cpu 周期。
很多我的意思是总共大约千兆字节。可能需要根据需要弹出/推送对象,通常在随机位置,一次一个对象。对象的生命周期通常很长,几分钟或更长,但是,在程序执行期间,对象可能会多次分配/释放。
什么是避免内存碎片的好策略,同时仍然保持合理的分配释放速度?
我正在使用 C++,所以我可以使用 new 和 malloc。谢谢。
我知道网站上有一个类似的问题,Efficiently allocating many short-lived small objects,有些不同,线程安全对我来说不是直接问题。
我的开发平台是Intel Xeon,linux操作系统。理想情况下,我也想在 PPC linux 上工作,但这对我来说不是最重要的。
ios4 - iOS是如何解决内存碎片的?
我找不到任何有关 iOS 内存管理的文档。特别是关于内存碎片。如果你知道这方面的任何文件,请告诉我。
garbage-collection - 复制垃圾收集器
复制垃圾收集器如何避免内存碎片?此外,堆空间使用会产生什么后果?
据我了解,复制垃圾收集器会将所有可访问的对象从堆中复制到堆的另一部分。所有留下的对象都不再需要并因此被删除。
如果这是一个正确的理解,那么这如何避免内存碎片呢?
这个过程必须使用大量的堆空间,因为它复制的所有项目都会重复,对吗?
c++ - 哪种内存分配算法最适合性能和时间要求严格的 C++ 应用程序?
我问这个问题是为了确定哪种内存分配算法可以为性能关键的应用程序(如游戏引擎或嵌入式应用程序)提供更好的结果。结果实际上取决于内存碎片的百分比和内存请求的时间确定性。
教科书中有几种算法(例如 Buddy 内存分配),但也有其他算法,例如 TLSF。因此,关于可用的内存分配算法,哪一种是最快的并且导致更少的碎片。顺便说一句,不应该包括垃圾收集器。
另请注意,这个问题不是关于分析,它只是为了找出给定要求的最佳算法。
c++ - 从windbg堆摘要输出垃圾
首先,我的英语不好。非常抱歉。我不住在英语区。
我有个问题。
我正在处理 Windows 服务器程序的内存碎片。因为内存不足不能运行超过一周。可能是问题。
所以,我曾经通过windbg对'.heap -s address(heap handle)命令进行堆内存分析。但我不明白这份报告。看它。
虚拟地址碎片具有垃圾值。有什么问题??值对吗??
我已经计划好了。试图验证性能改进。另外,确定是否有问题。但不能,因为这个问题。
我尝试搜索多种文章。但我无法获得有用的信息。
请帮我。
首先,为什么会发生?
其次,是更有效地使用内存的方法吗?
可能,你看我的帖子很难。我知道。所以真的真的很抱歉。
感谢您阅读我的帖子。
c - valgrind 显示的堆外程序内存消耗
我的程序使用大量内存。这就是 valgrind massif 工具向我展示的内容:
正如你所看到的,额外的部分比有用的堆大几倍。
我应该怎么做才能减少这个额外的内存?做更少的分配?
这就是所谓的内存碎片吗?
操作系统:Linux 2.6。程序是用 C 语言编写的。它应该 24 小时 7 小时工作,并且可以处理大量数据。
c# - 使用字节数组时的堆碎片
我有一个 C# 4.0 应用程序(单一生产者/单一消费者),它以块的形式传输大量数据。虽然没有新的内存分配,但一段时间后我的内存就用完了。
我使用 Redgate 内存分析器对内存进行了分析,那里有很多可用内存。它说由于碎片而无法使用空闲内存。
我使用阻塞集合作为缓冲区,使用字节数组作为成员:
如何避免托管内存碎片?