一、首次适应算法

1、算法思想

每次从低地址开始查找,找到第一个能满足大小的空闲分区。

2、如何实现

空闲分区以地址递增的次序排列,每次分配内存时顺序查找空闲分区链,找到大小能满足要求的第一个空闲分区。

3、常用的数据结构

空闲分区表、空闲分区链

4、优缺点

优点:①为分配大的内存空间创造了条件

②不需要重新排序,算法开销小

缺点:①不断被划分,会留下许多难以利用的小分区,产生碎片。

5、图示

空闲分区表↑

空闲分区链(按起始地址有小到大排序)↓

用java动态分区分配算法有哪些代码_算法

二、最佳适应算法

1、算法思想

由于动态分区分配是一种连续分配方式,为各进程分配的空间必须是连续的一整片区域,因此为了保证大进程到来时能有连续的大空间,可以尽可能的留下大空间,优先使用小空间

2、如何实现

空闲分区按容量递增次序链接,每次分配内存时顺序查找空闲分区链,找到大小能满足的第一个空闲分区。

3、优缺点

优点:①避免大材小用,更能满足大进程需求

缺点:①产生难以利用的小分区,产生碎片

②算法开销大,每次需要重新排序

4、图示

用java动态分区分配算法有哪些代码_用java动态分区分配算法有哪些代码_02

 

用java动态分区分配算法有哪些代码_动态分区分配算法_03

空闲分区表↑

空闲分区链(由分区大小由小到大排序)↓

用java动态分区分配算法有哪些代码_算法_04

 注意:有更小的空闲分区,需要更新空闲分区链

 

用java动态分区分配算法有哪些代码_算法思想_05

用java动态分区分配算法有哪些代码_操作系统_06

 

 

三、最坏适应算法(最大适应算法)

1、算法思想

为了解决最佳适应算法的问题(即留下太多难以利用的小碎片),可以在每次分配时优先使用最大的连续空闲区,这样分配后剩余的空闲区就不会太小,更方便使用。

2、如何实现

空闲分区按容量递减次序链接,每次分配内存时顺序查找空闲分区链,找到大小能满足要求的第一个空闲分区。

3、优缺点

优点:①可减少难以利用的碎片

缺点:①大分区被用完,不利于大进程,算法开销大

4、图示

用java动态分区分配算法有哪些代码_动态分区分配算法_07

 

用java动态分区分配算法有哪些代码_动态分区分配算法_08

空闲分区表↑

空闲分区链(由分区大小由大到小排序)↓

用java动态分区分配算法有哪些代码_动态分区分配算法_09

 

四、循环首次适应算法(邻近适应算法)

1、算法思想

首次适应算法每次都从链头开始查找,可能会导致低地址部分出现很小的空闲分区,而每次分配查找时,都要经过这些分区,因此也增加了查找的开销,如果每次都从上次查找结束的位置开始检索,可解决上述问题。

2、如何实现

空闲分区以地址递增的顺序排列(循环链表),每次分配内存师从上次查找结束的位置开始查找空闲分区链,找到大小能满足要求的第一个空闲分区链。

3、优缺点

优点:①不是每次从头开始检索,算法开销小

②使空闲分区分布得更均匀

缺点:①会缺乏大的空闲分区

4、图示

用java动态分区分配算法有哪些代码_用java动态分区分配算法有哪些代码_10

用java动态分区分配算法有哪些代码_动态分区分配算法_11

 五、四种算法的对比

用java动态分区分配算法有哪些代码_算法思想_12