---
title: "LRU方式とは？FIFO・LFU・NRUとの違いを見分ける【基本情報技術者試験】"
description: "LRU方式を「最後に参照されてから最も長い時間が経過したブロックを置き換える方式」と整理し、FIFO・LFU・NRUとの違いをFE試験の選択肢を切る判断軸で解説します。"
last_modified_at: "2026-08-15"
canonical_url: "https://stemtazoo.github.io/fe/lru-cache-replacement/"
section: "fe"
---

## まず結論

LRU（Least Recently Used）方式とは、**最後に参照されてから最も長い時間が経過したブロックを置き換え対象にする方式**です。

基本情報技術者試験では、次のように切り分けると判断しやすくなります。

```text
最後に使った時刻が古い
→ LRU

使われた回数が少ない
→ LFU

読み込まれた順が古い
→ FIFO

最近使われていない
→ NRU
```

特に、**LRUとFIFOの違い**を混同しないことが重要です。

## 直感的な説明

机の上に4冊しか本を置けないとします。

新しい本を1冊置くために、どれか1冊を棚へ戻さなければなりません。

LRUでは、

> **最後に手に取ってから、一番長い時間が経っている本**

を棚へ戻します。

例えば、机の上にA、B、C、Dの4冊があり、最近の利用状況が次のようだったとします。

```text
A：ついさっき使った
B：10分前に使った
C：1時間前に使った
D：昨日使って以来、使っていない
```

この場合、LRUで置き換え対象になるのはDです。

ポイントは、**最初に机へ置いた時刻ではなく、最後に使った時刻を見る**ことです。

## 定義・仕組み

LRUは、キャッシュメモリなどの限られた領域から、どのブロックを追い出すか決める置換方式の一つです。

キャッシュに空きがない状態で新しいデータを格納する場合、既存のブロックの一つを置き換える必要があります。

LRUでは、各ブロックが最後に参照された時点を考えます。

```text
最近参照された
→ これからも使われる可能性がある

長い間参照されていない
→ 置き換え候補にする
```

### FIFOとの違い

FIFO（First In First Out）は、**最も早く読み込まれたブロック**を置き換えます。

```text
LRU
→ 最後に使ったのはいつ？

FIFO
→ 最初に入ったのはいつ？
```

例えば、最も古く読み込まれたブロックでも、直前に参照されていれば、LRUでは残ります。

一方、FIFOでは途中で何回参照されたかは関係なく、読み込まれた順番だけを見ます。

### LFUとの違い

LFU（Least Frequently Used）は、**参照回数が最も少ないブロック**を置き換えます。

```text
LRU
→ 最後に使った時刻

LFU
→ 使われた回数
```

「最近使われたか」と「何回使われたか」は別の判断基準です。

### NRUとの違い

NRU（Not Recently Used）は、**最近参照されていないブロックを優先して置き換える**考え方です。

LRUのように「最後に参照された時刻を厳密に比較する」というより、最近使われたかどうかを区分して判断します。

このテーマは、基本情報技術者試験のコンピュータ構成要素やメモリ管理と関係します。公式の出題範囲やシラバスは、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html)から確認できます。

## 科目Aでどう出る？

科目Aでは、置換方式の説明から該当する用語を選ぶ問題が出ます。

そのときは、文章の中で**何を基準に置き換えているか**を確認します。

| 問題文の表現 | 判断 |
|---|---|
| 最後に参照されてから最も長い時間が経過 | LRU |
| 参照回数が最も少ない | LFU |
| 読み込まれてから最も長い時間が経過 | FIFO |
| 最近参照されていない | NRU |

### 選択肢を切る順番

まず、「時間」なのか「回数」なのかを見ます。

```text
回数が少ない
→ LFU

時間に注目
→ LRU / FIFO
```

次に、時間の基準を確認します。

```text
最後に参照された時刻
→ LRU

最初に読み込まれた時刻
→ FIFO
```

これだけで、多くの選択肢を切れます。

## どんな場面で使う？

LRUの考え方は、限られた高速な記憶領域を効率よく使いたい場面で使われます。

例えば、次のような場面です。

- キャッシュメモリ
- ページ置換
- データキャッシュ
- Webブラウザやアプリのキャッシュ管理

共通しているのは、**保存できる量に限りがあるため、何を残して何を追い出すか決める必要がある**ことです。

## よくある誤解・混同

### LRUは「最初に入ったもの」を追い出す

それはFIFOの考え方です。

```text
LRU
→ 最後に使われた時刻を見る

FIFO
→ 入った順番を見る
```

### LRUは「最も使用回数が少ないもの」を追い出す

それはLFUです。

```text
LRU
→ Recency：最近使われたか

LFU
→ Frequency：何回使われたか
```

英単語の意味から切り分けると覚えやすくなります。

### 長くキャッシュにあるブロックほどLRUで追い出される

必ずしもそうではありません。

古くからキャッシュに存在していても、直前に何度も参照されていればLRUでは残ります。

LRUで見るのは、**キャッシュへ入った時刻ではなく、最後に参照された時刻**です。

### LRUとNRUは同じ

似ていますが、判断の細かさが異なります。

LRUは最後に参照された順序を使って、最も古いものを選びます。

NRUは最近参照されていないものを候補にする考え方です。

FE試験では、まず次の言葉で切り分けるのが安全です。

```text
「最後に参照されてから最も長い」
→ LRU

「一定時間参照されていない」
→ NRU
```

## まとめ（試験直前用）

- LRUは、**最後に参照されてから最も長い時間が経過したブロック**を置き換える
- LFUは、**参照回数が最も少ないブロック**を置き換える
- FIFOは、**最も早く読み込まれたブロック**を置き換える
- NRUは、**最近参照されていないブロック**を優先する
- LRUとFIFOで迷ったら、「最後に使った時刻」か「最初に入った時刻」かを見る
- LRUとLFUで迷ったら、「時間」か「回数」かを見る
