可用布尔数组模拟内存块状态,索引为块号、值false表示空闲;空闲率=空闲块数/总块数×100%,可遍历统计或维护计数器实时更新。
可以用一个固定长度的布尔数组模拟内存块状态,数组索引代表内存块编号,值为 true 表示已占用,false 表示空闲。空闲率就是 false 元素个数占总长度的比例,逻辑清晰、无需额外结构,适合教学和轻量场景。
用布尔数组建模内存块
假设总内存划分为 1024 个等大小块(可按需调整),声明一个长度为 1024 的布尔数组:
boolean[] memory = new boolean[1024]; // 初始全为 false,即全部空闲分配时将对应下标设为 true,释放时设为 false。注意下标需做边界检查,避免越界。
模拟分配与释放操作
实际使用中需封装基础操作,例如:
- allocate(int start, int len):从 start 开始连续标记 len 个块为 true,前提是这些位置当前都为 false(即满足“首次适配”或“最佳适配”的前置校验)
- free(int start, int len):将对应范围重置为 false
- 可增加 findFirstFit(int len) 遍历数组找首个连续 false 区段,返回起始下标或 -1
计算空闲率的核心逻辑
空闲率 = 空闲块数 ÷ 总块数 × 100%,只需一次遍历统计 false 个数:
int freeCount = 0;for (boolean used : memory) {
if (!used) freeCount++;
}
double idleRate = (double) freeCount / memory.length * 100;
若需实时更新,可在每次 allocate/free 后维护一个全局 freeCount 变量,避免重复遍历——时间复杂度从 O(n) 降至 O(1)。
实战小例子:运行三步后算空闲率
初始化 16 块内存:boolean[] mem = new boolean[16];
- 分配 [0,3] → 设 mem[0]~mem[3] = true → 占 4 块
- 分配 [8,10] → 设 mem[8]~mem[10] = true → 占 3 块
- 释放 [0,1] → 设 mem[0]~mem[1] = false → 回收 2 块
此时已用块数 = (4−2) + 3 = 5,空闲块数 = 16 − 5 = 11,空闲率 = 11/16 × 100% = 68.75%

















