跳到主要内容

请简述哪些内存分配与回收策略?

参考答案:

内存分配与回收策略是操作系统中管理内存空间的重要手段。下面列举了几种常见的内存分配与回收策略:

  1. 连续分配管理方式

    • 单一连续分配:在这种方式下,内存只能有一道用户程序,内存被分成操作系统区和用户区。用户程序被放置在用户区,这种方式没有外部碎片,但由于只能支持单道程序,因此存在内部碎片。为了扩充内存,可以采用覆盖技术。
    • 固定分区分配:支持多道程序,将内存用户空间(一部分是系统空间)划分成若干个固定大小的分区,每个分区只能装一道作业。这种方式没有外部碎片,但存在内部碎片。分区的划分方式可以是大小相等或不相等。
    • 动态分区分配:也支持多道程序,但在进程进入内存时,会根据进程的大小动态划分分区。这种方式没有内部碎片,但可能存在外部碎片。为了管理这些分区,可以使用空闲分区表或空闲分区链等数据结构。
  2. 非连续分配管理方式

    • 分页管理:将用户的逻辑地址空间划分为若干个固定大小的页,而物理内存也划分为同样大小的页框。通过页表来建立逻辑页与物理页框的对应关系。分页管理有效地解决了内部碎片问题,但可能导致外部碎片。
    • 分段管理:根据用户的需要,将用户程序划分为若干个段,每个段都有自己的名字和长度。这种方式能更好地满足用户的需求,但同样可能导致外部碎片。
    • 段页式管理:结合了分页和分段两种方式的优点,先将用户程序划分为多个段,再将每个段划分为多个页。这种方式既能满足用户的多样化需求,又能减少内部碎片。

在内存回收方面,常见的策略包括:

  1. 标记-清除(Mark-Sweep):从根节点开始标记所有可达的对象,然后清除所有未被标记的对象。
  2. 复制(Copying):将内存划分为两个等大的区域,每次只使用一个区域进行分配,当该区域用尽时,将存活的对象复制到另一个区域,然后清空当前区域。这种方式适用于对象存活率较低的场景。
  3. 标记-整理(Mark-Compact):与标记-清除类似,但在清除阶段,会将所有存活的对象向一端移动,以便整理出一块连续的内存空间。
  4. 分代收集(Generational Collection):根据对象的存活周期将内存划分为新生代和老年代,对新生代和老年代采用不同的垃圾收集策略。新生代中对象存活率较低,可以采用复制等策略;而老年代中对象存活率较高,可以采用标记-清除或标记-整理等策略。

这些内存分配与回收策略各有优缺点,需要根据具体的应用场景和需求来选择合适的策略。