一. 垃圾收集算法 1. 标记-清除算法 缺点:1.效率低,标记和清除两个过程的效率都不高; 2.空间问题,标记清除后会产生大量的不连续内存碎片。 2. 复制算法 将内存分成三块:一块较大的Eden和两块较小的Survivor空间。每次使用Eden和其中一块Survivor,回收后将Eden和Sur ...
分类:
编程语言 时间:
2017-07-01 23:20:38
阅读次数:
200
1.内存中都存储什么? 操作系统和进程,特别是多道程序设计时,要将主存继续细分; 2.内存管理需要做那些事情? 3.处理器需要把进程放到主存中执行,那内存是什么的组织结构? 最原始的分区:固定分区(分区大小相同,大小不同),动态分区; 分页:主存和进程都分成大小相等的块,只不过块很小,导致内存碎片很 ...
分类:
其他好文 时间:
2017-06-18 01:51:38
阅读次数:
166
在开发时,假设创建非常多对象,就会造成非常大的内存开销。特别是大量轻量级(细粒度)的对象,还会造成内存碎片。Flyweight模式就是运用共享技术,有效支持大量细粒度对象的设计模式。 其类结构图例如以下: 在FlyweightFactory中有一个管理、存储对象的对象池,当调用GetFlyweigh ...
分类:
其他好文 时间:
2017-06-12 16:13:10
阅读次数:
237
“碎片的内存”描述一个系统中所有不可用的空闲内存。这些资源之所以仍然未被使用,是因为负责分配内存的分配器使这些内存无法使用。这一问题通常都会发生,原因在于空闲内存以小而不连续方式出现在不同的位置。由于分 配方法决定内存碎片是否是一个问题,因此内存分配器在保证空闲资源可用性方面扮演着重要的角色。 in ...
分类:
其他好文 时间:
2017-06-11 10:10:43
阅读次数:
251
STL内存池机制,使用双层级配置器。第一级採用malloc、free,第二级视情况採用不同策略。这样的机制从heap中要空间,能够解决内存碎片问题。 1.内存申请流程图 简要流程图例如以下。 2.第二级配置器说明 第二级配置器目的解决小型区块造成的内存碎片问题。 使用自由链表(free-list)技 ...
分类:
编程语言 时间:
2017-06-03 12:52:22
阅读次数:
210
1、参数内容used_memory_rss从操作系统的角度,返回Redis已分配的内存总量(俗称常驻集大小)。这个值和top、ps等命令的输出一致,包含了used_memory和内存碎片。mem_fragmentation_ratioused_memory_rss和used_memory之间的比率blocked_clients正在等待阻塞命令(BLPOP、BRPOP..
分类:
其他好文 时间:
2017-05-26 14:31:51
阅读次数:
229
Nginx的高性能的是用非常多细节来保证,epoll下的多路io异步通知。阶段细分化的异步事件驱动,那么在内存管理这一块也是用了非常大心血。上一篇我们讲到了slab分配器,我们能够能够看到那是对共享内存的管理的优化。Nginx在进程内也实现了自己的内存池,目的在于降低内存碎片,降低向操作系统的申请次 ...
分类:
其他好文 时间:
2017-05-23 21:38:10
阅读次数:
248
本篇主要介绍一下JVM的几种垃圾收集器。其示意图例如以下所看到的,上面的三个是新生代的收集器, 以下三个是老年代的收集器。当中G1收集器是能够用于新生代和老年代的收集工作。 JVM垃圾收集器 1、Serial(串行收集器):用于新生代GC,复制算法,启动时默觉得Client模式,GC的线程为单线程。 ...
分类:
其他好文 时间:
2017-05-22 15:15:54
阅读次数:
185
一、设计原则 (1)降低内存碎片 (2)降低向操作系统申请内存的次数 (3)减少各个模块的开发效率 二、源代码结构 struct ngx_pool_s { ngx_pool_data_t d; size_t max; ngx_pool_t *current; ngx_chain_t *chain; ...
分类:
其他好文 时间:
2017-05-22 15:04:41
阅读次数:
184
Delphi 2009+ 的 System.SysUtils提供了一个类似.Net的StringBuilder,用于存储字符数组。 很多人不明白为什么要用TStringBuilder, Delphi中有string,有几乎所有TStringBuilder的功能函数, System.SysUtils中 ...