
在翻阅 Java 编程思想英文原版时,读到了 pool of memory一词,而 Java 的堆内容就属于内存池。
内存池(Memory Pool),又被称为固定大小区块规划(fixed-size-blocks allocation),允许程序员以类似 C语言 的 malloc 或是 C++ 的 new 操作数进行动态的存储器规划。对于其它动态存储器规划的实践来说,因为会变动存储器区块大小导致的碎片问题,导致在实时系统上受限于性能因此,根本无法使用。内存池提供了一个更有效率的解决方案:预先规划一定数量的存储器区块,使得整个程序可以在运行期规划 (allocate)、使用 (access)、归还 (free) 存储器区块。
这个简单的内存池实践模块在编译期规划 3 个示例内存池,其区块将大小针对程序的需求做最优化。这个程序可以下列接口来规划、使用及归还存储器区块:
内存池允许在运行期以常量时间规划存储器区块,并且不会有存储器破碎的情况产生。一次归还存储器中成千上万个对象的存储器区块只需要一个操作,无需像 malloc 一般需要个别 free。 内存池可以在层次结构式的树状结构中被分群,非常适合某些特定的程序结构,例如递归与迭代。 固定区块大小的内存池不需将每次规划的信息记录下来(例如规划的存储器区块大小,因为每次规划都是一样的)。针对一些小而多的存储器区块规划会节省一些空间。 缺点
内存池模块在使用时,必须依照程序需求来做个别调整,才能保持时间与空间效率。