阿里面试官问我内存池Memory Pool是什么,以为我不知道,其实我都懂!

简介: 阿里面试官问我内存池Memory Pool是什么,以为我不知道,其实我都懂!

在翻阅 Java 编程思想英文原版时,读到了 pool of memory一词,而 Java 的堆内容就属于内存池。


内存池(Memory Pool),又被称为固定大小区块规划(fixed-size-blocks allocation),允许程序员以类似 C语言 的 malloc 或是 C++ 的 new 操作数进行动态的存储器规划。对于其它动态存储器规划的实践来说,因为会变动存储器区块大小导致的碎片问题,导致在实时系统上受限于性能因此,根本无法使用。内存池提供了一个更有效率的解决方案:预先规划一定数量的存储器区块,使得整个程序可以在运行期规划 (allocate)、使用 (access)、归还 (free) 存储器区块。

一个简单的实践示例

这个简单的内存池实践模块在编译期规划 3 个示例内存池,其区块将大小针对程序的需求做最优化。

这个程序可以下列接口来规划、使用及归还存储器区块:


从内存池中规划存储器区块。这个函数会先检测当前的内存池是否仍有足够空间可以规划所需的存储器区块,若空间已不足,将继续尝试下一个内存池。一个已规划的存储器区块将使用handle来表示

获取一个指向已规划存储器区块的指针

归还之前规划的存储器区块

用以代表存储器区块的handle,可以使用像是 unsigned int 的数据类型来实践。

内存池与 malloc 的比较

优点

内存池允许在运行期以常量时间规划存储器区块,并且不会有存储器破碎的情况产生。一次归还存储器中成千上万个对象的存储器区块只需要一个操作,无需像 malloc 一般需要个别 free。

内存池可以在层次结构式的树状结构中被分群,非常适合某些特定的程序结构,例如递归与迭代。

固定区块大小的内存池不需将每次规划的信息记录下来(例如规划的存储器区块大小,因为每次规划都是一样的)。针对一些小而多的存储器区块规划会节省一些空间。

缺点


内存池模块在使用时,必须依照程序需求来做个别调整,才能保持时间与空间效率。


目录
相关文章
|
1月前
|
存储 安全 Java
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别;什么是程序计数器,堆,虚拟机栈,栈内存溢出,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
|
25天前
|
设计模式 uml
在电脑主机(MainFrame)中只需要按下主机的开机按钮(on()),即可调用其它硬件设备和软件的启动方法,如内存(Memory)的自检(check())、CPU的运行(run())、硬盘(Hard
该博客文章通过一个电脑主机启动的示例代码,展示了外观模式(Facade Pattern)的设计模式,其中主机(MainFrame)类通过调用内部硬件组件(如内存、CPU、硬盘)和操作系统的启动方法来实现开机流程,同时讨论了外观模式的优缺点。
|
1月前
|
存储 缓存 监控
托管内存(Managed Memory)
托管内存(Managed Memory)
|
2月前
|
监控 安全 Java
JVM内存问题之排查Direct Memory泄漏有哪些常用方法
JVM内存问题之排查Direct Memory泄漏有哪些常用方法
|
2月前
|
Arthas 监控 Java
JVM内存问题之使用gperftools分析JNI Memory泄漏的具体步骤是什么
JVM内存问题之使用gperftools分析JNI Memory泄漏的具体步骤是什么
|
2月前
|
存储 安全 Java
Java面试题:请解释Java内存模型(JMM)是什么,它如何保证线程安全?
Java面试题:请解释Java内存模型(JMM)是什么,它如何保证线程安全?
80 13
|
2月前
|
存储 Java 程序员
Java面试题:方法区在JVM中存储什么内容?它与堆内存有何不同?
Java面试题:方法区在JVM中存储什么内容?它与堆内存有何不同?
52 10
|
2月前
|
存储 运维 Java
Java面试题:JVM的内存结构有哪些主要部分?请简述每个部分的作用
Java面试题:JVM的内存结构有哪些主要部分?请简述每个部分的作用
40 9
|
1月前
|
Java 开发工具 Android开发
Android经典面试题之开发中常见的内存泄漏,以及如何避免和防范
本文介绍Android开发中内存泄漏的概念及其危害,并列举了四种常见泄漏原因:静态变量持有Context、非静态内部类、资源未释放及监听器未注销。提供了具体代码示例和防范措施,如使用ApplicationContext、弱引用、适时释放资源及利用工具检测泄漏。通过遵循这些建议,开发者可以有效提高应用稳定性和性能。
34 0
|
2月前
|
缓存 安全 Java
Java面试题:解释volatile关键字的作用,以及它如何保证内存的可见性
Java面试题:解释volatile关键字的作用,以及它如何保证内存的可见性
49 4

热门文章

最新文章

下一篇
DDNS