1. 标记 - 清除算法 先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。它是最基础的收集算法。其他收集算法都是根据其思路,改进其不足之处。 缺点:1) 标记和清除两个阶段的效率都不高;2)清除后会产一大量不连续的内存碎片 2. 复制算法 将可用内存划分为大小相等的两块,每次只使用 ...
分类:
编程语言 时间:
2017-08-30 09:48:48
阅读次数:
131
标记-清除算法 算法分为标记和清除两个阶段:首先标记所有需要回收的对象,在标记完成后统一回收所有被标记的对象。 该算法存在的缺点: 1、 效率问题:标记和清除两个过程的效率都不高 2、 空间问题:标记清除之后会产生大量不连续的内存碎片,内存碎片太多可能会倒是以后在程序运行过程中需要分配较大的对象时, ...
分类:
编程语言 时间:
2017-08-21 20:39:50
阅读次数:
217
计算机脱胎于图灵机的构想,简单来说,就是能够执行有限逻辑数学过程的计算模型。 图灵机中最重要的两个『物理』硬件是纸带和读写头(这里的『物理』指的是相对于图灵机其他部分而言)。这种抽象非常简单明了,但是很容易给人一种错误印象,即由图灵机发展而来的现代计算机,就是执行程序的机器而已。 计算机学科的发展, ...
分类:
其他好文 时间:
2017-08-20 10:25:42
阅读次数:
237
频繁申请和回收内存,会导致在内存上产生大量的内存碎片,从而导致最终无法申请内存。DDK提供了Lookaside结构来解决这个问题。可以将Lookaside结构想象成一个内存容器。在初始的时候,它先向Windows申请了比较大的内存。以后每次申请内存的时候,不是直接向Windows申请内存,而是向Lo ...
分类:
其他好文 时间:
2017-08-16 13:59:57
阅读次数:
346
垃圾回收机制中的算法: 1.引用计数法:无法检测出循环引用。如父对象有一个对子对象的引用,子对象反过来引用父对象。这样,他们的引用计数永远不可能为0. 2 标记-清除算法:采用从根集合进行扫描,对存活的对象对象标记,标记完毕后,再扫描整个空间中未被标记的对象,进行回收,会造成内存碎片 3 标记-整理 ...
分类:
编程语言 时间:
2017-08-14 20:14:11
阅读次数:
156
说明已有的wxDC以及所有的派生类相关的设备环境均没有实现抗锯齿的功能,毕竟wxDC也只是对CDC的封装,只有GDI+才支持抗锯齿。在如下的代码中定义rasterizer等为静态变量的核心原因是其在进行渲染计算的时候会分配大量的内存,容易造成内存碎片,当然agg::pixfmt_bgra32和agg::r..
分类:
其他好文 时间:
2017-08-11 15:54:44
阅读次数:
149
目标文件:/proc/<pid>/maps 若其中出现了大量的8K左右的内存碎片,则说明出现了内存泄露。同理,如果相应pid进程的maps文件中出现了很多内存碎片,也说明出现了内存泄露。 若其中出现了大量的8K左右的内存碎片,则说明出现了内存泄露。同理,如果相应pid进程的maps文件中出现了很多内 ...
分类:
编程语言 时间:
2017-08-01 17:50:45
阅读次数:
171
为了保证向后兼容性,C#和.NET可以通过非托管的方式运行旧代码。非托管代码是指没有被.NET运行时管控的代码。非托管代码主要包括:平台调用服务(PlatformInvocation Services)、不安全代码(Unsafe Code)、COM互操作(COM interoperability)。 ...
什么是虚拟内存 虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。 与没有使用虚拟内存技术的系统相比,使用这种技术的系统使得大型程序的编写变 ...
分类:
其他好文 时间:
2017-07-15 12:47:24
阅读次数:
125
在innodb中实现了自己的内存池系统和内存堆分配系统,在innodb的内存管理系统中,大致分为三个部分:基础的内存块分配管理、内存伙伴分配器和内存堆分配器。innodb定义和实现内存池的主要目的是提供内存的使用率和效率,防止内存碎片和内存分配跟踪和调试。我们先来看看他们的关系和结构。 下面是它的关 ...
分类:
数据库 时间:
2017-07-11 15:50:18
阅读次数:
349