当一个进程发生缺页中断的时候,进程会陷入内核态,执行以下操作:1、检查要访问的虚拟地址是否合法2、查找/分配一个物理页3、填充物理页内容(读取磁盘,或者直接置0,或者啥也不干)4、建立映射关系(虚拟地址到物理地址)重新执行发生缺页中断的那条指令如果第3步,需要读取磁盘,那么这次缺页中断就是majfl...
分类:
其他好文 时间:
2014-07-03 22:30:43
阅读次数:
217
CLR垃圾回收器根据所占空间大小划分对象。大对象和小对象的处理方式有很大区别。比如内存碎片整理 —— 在内存中移动大对象的成本是昂贵的,让我们研究一下垃圾回收器是如何处理大对象的,大对象对程序性能有哪些潜在的影响。 大对象堆和垃圾回收 在.Net 1.0和2.0中,如果一个对象的大小超过8500.....
分类:
Web程序 时间:
2014-06-23 00:32:01
阅读次数:
300
转自:内存池设计与实现1. 内存池设计1.1
目的在给定的内存buffer上建立内存管理机制,根据用户需求从该buffer上分配内存或者将已经分配的内存释放回buffer中。1.2
要求尽量减少内存碎片,平均效率高于C语言的malloc和free。1.3 设计思路将buffer分为四部分,第1部分是...
分类:
其他好文 时间:
2014-05-31 17:49:57
阅读次数:
290
最近写了一个接受socket数据包,然后再重组上层协议包的东西。每次read到数据就将数据添加到一个链表的尾部,然后检查是否收到了一个完整的包。为了减少内存碎片,把用过的链表节点添加到另外一个链表中,这样下次可以从这个cache链表中重用节点。
在debug的时候我把cache list中的数据打印出来,代码如下:
struct seg_node
{
void* bu...
分类:
其他好文 时间:
2014-05-25 21:31:09
阅读次数:
326
Nginx的高性能的是用很多细节来保证,epoll下的多路io异步通知,阶段细分化的异步事件驱动,那么在内存管理这一块也是用了很大心血,上一篇我们讲到了slab分配器,我们可以可以看到那是对共享内存的管理的优化。Nginx在进程内也实现了自己的内存池,目的在于减少内存碎片,减少向操作系统的申请次数,减低模块开发难度。Nginx实现的内存池实际上非常简单。...
分类:
其他好文 时间:
2014-05-08 00:37:29
阅读次数:
403
GC.Collect()GC.WaitForPendingFinallizers()GC.KeepAlive尽量不要new很大的Object不要频繁的new生命周期很短的Object,这样会导致很多内存碎片引起频繁的压缩
分类:
其他好文 时间:
2014-05-05 21:47:03
阅读次数:
448
MongoDB采用了磁盘空间预分配的机制,为了避免磁盘碎片以及使用mmap后造成的近一步的内存碎片,但是随着数据的增删除改操作,数据文件不可避免的会产生空洞,造成磁盘空间和内存的浪费。本文说的是这方面的压缩,数据使用某些压缩算法进行压缩的讨论不在此范围。在MongoDB
中,大概有两种方法可以解决这...
分类:
数据库 时间:
2014-05-01 15:55:48
阅读次数:
428