标签: heap-fragmentation

什么是连续的内存块?

就像在标题中一样,什么是连续的内存块?

c memory heap heap-fragmentation

38
推荐指数
3
解决办法
3万
查看次数

内存碎片分析器

有没有好的内存碎片分析器?(linux gcc版本会很好).Valgrind无法对此进行分析,因为它使用自定义malloc/free函数.

谢谢,安德鲁

c c++ memory-management heap-fragmentation

20
推荐指数
2
解决办法
7849
查看次数

了解Hotspot JVM进程的内部碎片属性

对于堆上和堆外分配.在堆上 - 在三个主要垃圾收集器的上下文中:CMS,Parallel Old和G1.

我所知道的(或者我认为我知道)到目前为止:

  • 所有对象(堆上)分配都向上舍入到8个字节的边界(或更大的2的幂,由...配置)-XX:ObjectAlignmentInBytes.
  • G1
    • 对于小于区域大小的堆上分配(1到32 MB,可能在堆大小/2048 周围),没有内部碎片,因为没有必要,因为分配器永远不会"填充漏洞".
    • 对于区域大小越大的分配,它将分配到区域大小.I. e.分配区域大小+ 1字节是非常不吉利的,它浪费了近50%的内存.
  • 对于CMS,我发现的唯一相关信息是

    自然旧的空间PLAB模仿索引自由列表空间的结构.每个线程预先分配一定数量的每个大小的块,低于257个堆字(从全局空间分配的大块).

    来自http://blog.ragozin.info/2011/11/java-gc-hotspots-cms-promotion-buffers.html.据我所知,提到"全球空间"是主要的旧空间.

问题:

  • 以上陈述是否正确?
  • CMS中主要旧空间的碎片属性是什么?分配超过"257堆字"怎么样?
  • 如何使用Parallel Old GC管理旧空间?
  • Hotspot JVM是否使用系统内存分配器进行堆外分配,还是使用特定分配器重新管理它?

UPD.讨论主题:https://groups.google.com/forum/#!topic/mechanical-sympathy/ A- RImwuiFZE

java memory-management jvm-hotspot heap-fragmentation memory-fragmentation

15
推荐指数
1
解决办法
863
查看次数

在64位土地上堆积碎片

在过去,当我处理长时间运行的C++守护进程时,我不得不处理堆碎片问题.保持我的大量分配池的技巧是必要的,以防止耗尽连续的堆空间.

这仍然是64位地址空间的问题吗?Perf对我来说不是一个问题,所以我宁愿简化我的代码而不再处理像缓冲池这样的事情.有没有人有关于这个问题的经验或故事?我正在使用Linux,但我想很多相同的问题都适用于Windows.

c++ 64-bit heap-fragmentation

14
推荐指数
2
解决办法
2818
查看次数

12
推荐指数
1
解决办法
2062
查看次数

托管堆碎片

我试图了解堆碎片是如何工作的.以下输出告诉我什么?

这堆是否过于分散?

我有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)

debugging clr memory-leaks heap-fragmentation

10
推荐指数
1
解决办法
2148
查看次数

故意浪费所有主要内存来学习碎片

在我的课上,我们有一个作业,其中一个问题是:

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)

c memory heap-fragmentation

10
推荐指数
1
解决办法
1107
查看次数

我的堆是否碎片化了

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)

.net memory windbg heap-fragmentation

9
推荐指数
1
解决办法
5265
查看次数

64位平台上GCC中的基本堆使用统计信息

我需要从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.

c linux malloc gcc heap-fragmentation

8
推荐指数
1
解决办法
2753
查看次数

如何避免iOS中的堆碎片

我们的应用程序在运行时会创建大量小对象.它主要归结为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)

objective-c heap-fragmentation objectpool ios

8
推荐指数
1
解决办法
3438
查看次数