1.标记清除算法: 分为两步 “标记” 和 “清除” 两个阶段。标记阶段在《对象已死吗》一文已经介绍过。 这个算法主要有两个不足:一是效率问题,“标记”和“清除”两个过程效率都不高,二是空间问题,标记清除之后会产生大量不连续的内存碎片,内存碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无
分类:
编程语言 时间:
2016-03-07 13:47:18
阅读次数:
116
1.标记-清除算法 (1)算法思想:第一步,标记好所有需要回收的对象;第二步,清除被标记的对象。 (2)缺点:时间上,效率不高,无论是标记还是清除操作;空间上,会产生大量不连续的内存碎片,使得占用大内存的对象找不到足够的连续内存而进一步又提前触发一次GC。 标记-清除算法执行过程如下图所示: 2.复...
分类:
编程语言 时间:
2016-02-28 00:50:48
阅读次数:
255
引用计数法标记清除法复制法(新生代,适合垃圾对象多,存活对象少)标记压缩法(老年代)相当于标记清除算法+内存碎片整理强引用,软引用(SoftReference),当堆空间不足时回收,软引用不会引起内存溢出弱引用(WeakReference),发现即回收虚引用垃圾回收器:串行回收器:-XX:..
分类:
其他好文 时间:
2016-02-16 15:11:06
阅读次数:
139
内存碎片用来描述一个系统中不可用的空闲内存。减少内存碎片的产生可以有效增强嵌入式系统稳定性。 内存分配浪费内存主要分额外开销,内部碎片,外部碎片。内部碎片是在动态开辟内存时大小四舍五入而产生的多余空间;外部碎片指已经分配内存块之间出现未被使用的差额。在嵌入式系统中外部碎片是编程过程中不可小瞧的敌.....
分类:
其他好文 时间:
2016-01-06 23:24:51
阅读次数:
256
引用对象池的好处:从池中操作对象比直接new、free要性能更快,且能避免内存碎片的堆积先贴对象池的代码:namespace LegendServer.Util{ //对象基 public abstract class ObjectBase { public abst...
分类:
其他好文 时间:
2015-12-01 21:19:35
阅读次数:
427
Buddy算法的优缺点:1)尽管伙伴内存算法在内存碎片问题上已经做的相当出色,但是该算法中,一个很小的块往往会阻碍一个大块的合并,一个系统中,对内存块的分配,大小是随机的,一片内存中仅一个小的内存块没有释放,旁边两个大的就不能合并。2)算法中有一定的浪费现象,伙伴算法是按2的幂次方大小进行分配内存块,当然这样做是有原因的,即为了避免把大的内存块拆的太碎,更重要的是使分配和释放过程迅速。但是他也带来...
分类:
编程语言 时间:
2015-12-01 16:34:57
阅读次数:
216
使用场景:
1. 在复制文件时,一般都是一个线程调用一个接口复制文件,这时候需要缓存数据,如果每个文件都需要创建独立的缓存,那么内存碎片是很大的.
如果创建一个static的内存区,当多线程调用同一个接口时,多个线程同时使用同一个static缓存会造成数据污染.最好的办法是这个缓存只对这个线程可见,
当线程创建时创建缓存区,当线程结束时销毁缓存区....
分类:
编程语言 时间:
2015-11-08 15:20:11
阅读次数:
281
内存池(Memory Pool)是一种内存分配方式。 通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。内存池则是在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备....
分类:
其他好文 时间:
2015-10-12 22:44:08
阅读次数:
1076
pool内存池概述通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:因为所申请内存块的大小不定。当频繁使用时会造成大量的内存碎片并进而减少性能。内存池则是在真正使用内存之前,先申请分配一定数量的、大小相等(普通情况下)的内存块留作备用。当有新的内存需求时。就从内存池中分...
分类:
其他好文 时间:
2015-09-20 20:28:34
阅读次数:
247
Mark-Sweep 算法 标记-清除(Mark-Sweep)算法,分为 “标记”和 “清除”两个阶段:第一阶段标记出所有需要回收的对象, 在标记完成之后统一回收掉所有被比标记的对象。 这个算法主要有两个缺点: 1. 标记和清除过程的效率不高 2. 标记清除过后会产生大量不连续的内存碎片。由于空间碎...
分类:
编程语言 时间:
2015-08-30 00:51:34
阅读次数:
151