有没有好的内存碎片分析器?(linux gcc版本会很好).Valgrind无法对此进行分析,因为它使用自定义malloc/free函数.
谢谢,安德鲁
对于堆上和堆外分配.在堆上 - 在三个主要垃圾收集器的上下文中:CMS,Parallel Old和G1.
我所知道的(或者我认为我知道)到目前为止:
-XX:ObjectAlignmentInBytes.对于CMS,我发现的唯一相关信息是
自然旧的空间PLAB模仿索引自由列表空间的结构.每个线程预先分配一定数量的每个大小的块,低于257个堆字(从全局空间分配的大块).
来自http://blog.ragozin.info/2011/11/java-gc-hotspots-cms-promotion-buffers.html.据我所知,提到"全球空间"是主要的旧空间.
问题:
UPD.讨论主题:https://groups.google.com/forum/#!topic/mechanical-sympathy/ A- RImwuiFZE
java memory-management jvm-hotspot heap-fragmentation memory-fragmentation
在过去,当我处理长时间运行的C++守护进程时,我不得不处理堆碎片问题.保持我的大量分配池的技巧是必要的,以防止耗尽连续的堆空间.
这仍然是64位地址空间的问题吗?Perf对我来说不是一个问题,所以我宁愿简化我的代码而不再处理像缓冲池这样的事情.有没有人有关于这个问题的经验或故事?我正在使用Linux,但我想很多相同的问题都适用于Windows.
如何监视或可视化delphi应用程序的内存碎片?
我试图了解堆碎片是如何工作的.以下输出告诉我什么?
这堆是否过于分散?
我有243010个"自由对象",总共53304764个字节.堆中的那些"自由对象"空间是否曾经包含对象但是现在是否收集了garabage?
如何强制碎片堆清理?
!dumpheap -type Free -stat
total 243233 objects
Statistics:
MT Count TotalSize Class Name
0017d8b0 243010 53304764 Free
Run Code Online (Sandbox Code Playgroud) 在我的课上,我们有一个作业,其中一个问题是:
C中的内存碎片:设计,实现并运行执行以下操作的C程序:它为3m数组的序列分配内存,每个数组大小为500000个元素; 然后它释放所有偶数数组并分配一系列m个数组,每个数组大小为700000个元素.测量程序分配第一个序列和第二个序列所需的时间.选择m以便耗尽程序可用的所有主内存.解释你的时间
我的实现如下:
#include <iostream>
#include <time.h>
#include <algorithm>
void main(){
clock_t begin1, stop1, begin2, stop2;
double tdif = 0, tdif2 = 0;
for(int k=0;k<1000;k++){
double dif, dif2;
const int m = 50000;
begin1 = clock();
printf("Step One\n");
int *container[3*m];
for(int i=0;i<(3*m);i++)
{
int *tmpAry = (int *)malloc(500000*sizeof(int));
container[i] = tmpAry;
}
stop1 = clock();
printf("Step Two\n");
for(int i=0;i<(3*m);i+=2)
{
free(container[i]);
}
begin2 = clock();
printf("Step Three\n");
int *container2[m];
for(int i=0;i<m;i++)
{
int *tmpAry = (int *)malloc(700000*sizeof(int));
container2[i] = …Run Code Online (Sandbox Code Playgroud) 0:000> !dumpheap -stat
total 1755874 objects
Statistics:
MT Count TotalSize Class Name
7b9b0c64 1 12 System.Windows.Forms.Layout.TableLayout+ColumnSpanComparer
....
7933303c 14006 4926456 System.Collections.Hashtable+bucket[]
65246e00 804 4982192 System.Data.RBTree`1+Node[[System.Int32, mscorlib]][]
054c55f0 44240 5662720 DevExpress.Utils.AppearanceObject
793040bc 98823 7613156 System.Object[]
793308ec 293700 55820016 System.String
002435f0 50315 138631888 Free
Total 1755874 objects
Fragmented blocks larger than 0.5 MB:
Addr Size Followed by
15a195c8 0.8MB 15ae3950 System.Collections.ArrayList
15d81468 1.6MB 15f23708 System.String
15f23984 1.0MB 16029ae4 System.String
... about 7 more objects here
1ee51764 0.5MB 1eedbaa4 System.WeakReference
1f0df96c 2.4MB 1f34d4b0 …Run Code Online (Sandbox Code Playgroud) 我需要从GCC for Linux编译的C程序中回答一个基本问题:当前正在使用多少进程堆(由分配malloc)以及如果有空闲堆阻塞了多少.标准库的GNU实现具有mallinfo准确报告我需要的功能,但它只能用于32位配置,而AFAIK,没有64位等效的功能(BTW,谁知道为什么?).
我在Linux上使用GCC,所以我需要这个用于Linux.但我认为堆对系统是不透明的,因此回答这个问题的唯一方法是使用标准库实现提供的方法.
在Windows平台上的MSVC实现中,没有相应的mallinfo功能,但有所谓的堆行走功能,它允许通过迭代堆中的所有块来计算必要的信息.AFAIK,GNU C库中没有堆行走接口.(在那儿?).
那么,再说一次,我在GCC做什么?它不一定非常有效,这意味着前面提到的基于堆步行的方法对我来说非常好.我如何知道GCC使用了多少堆以及有多少空闲?我可以尝试安装malloc-hooks并"手动"跟踪大小,虽然我不知道如何在mallinfo.arena不使用的情况下确定当前堆竞技场大小(请参阅参考资料)mallinfo.
我们的应用程序在运行时会创建大量小对象.它主要归结为Autoreleased NSString和NSNumber对象.由于应用程序被设计为在后台堆运行"24/7",因此碎片化成为一个大问题.
如果没有完整的程序重组,有哪些技术可以避免这种情况.
我在想: - 在最终版本发布后将对象返回池的对象池,但是objets需要是可变的.(NSMuttableString会导致堆碎片吗?)
其他人如何处理这个问题?
编辑:这就是我对内存碎片的怀疑.看看rpages和[vm-pageshortage]
eIncident Identifier: 81E87769-8E16-4439-AFFA-6D077E01E5ED
CrashReporter Key: 96235931c31c6b92a16f5c1b1e4cb363a3d18a67
Hardware Model: iPhone4,1
OS Version: iPhone OS 7.0.4 (11B554a)
Kernel Version: Darwin Kernel Version 14.0.0: Fri Sep 27 23:00:48 PDT 2013; root:xnu-2423.3.12~1/RELEASE_ARM_S5L8940X
Date: 2013-12-13 22:43:36 -0800
Time since snapshot: 1582 ms
Free pages: 1105
Active pages: 3668
Inactive pages: 2035
Speculative pages: 46
Throttled pages: 100120
Purgeable pages: 0
Wired pages: 22159
File-backed pages: 5400
Anonymous pages: 349
Compressions: 0
Decompressions: 0
Compressor Size: 0
Uncompressed …Run Code Online (Sandbox Code Playgroud) c ×4
memory ×4
c++ ×2
.net ×1
64-bit ×1
clr ×1
debugging ×1
delphi ×1
gcc ×1
heap ×1
ios ×1
java ×1
jvm-hotspot ×1
linux ×1
malloc ×1
memory-leaks ×1
objective-c ×1
objectpool ×1
windbg ×1