연속 메모리 할당
메모리에 프로세스를 그냥 통째로 순서대로 넣는 방법
간단하긴 한데..
메모리에 연속적으로 프로세스를 할당하는 방식에는 문제가 있다. 프로세스를 연속적으로 채워서 실행하다가, 일부 프로세스의 실행이 끝나고 빈 공간이 작게 분산되어 생기게 된다면, 큰 프로세스가 들어갈 수 없게 되어 공간이 낭비된다. 이런 현상을 외부 단편화 라고 한다.

외부 단편화를 해결하기 위해 메모리를 압축할 수 있다. 프로세스를 적당히 재배치시켜 빈 공간을 한 군데로 모으는 방식이다. 하지만 말로만 들어도 번거롭고 오래 걸릴것 같다.
메모리의 빈 공간이 여러개일 때, 프로세스를 어떤 공간에 배치할 지 결정하는 대표적인 방식으로는 최초 적합, 최적 적합, 최악 적합 방식이 있다.

그런데 어떤 프로세스는 잘 쓰이지도 않는데 계속 공간을 차지하고 있어서 다른 프로세스가 들어갈 수 없다. 얘네를 그냥 둬야할까?
스와핑 이란?
메모리에 있는 프로세스 중 현재 실행되지 않는 프로세스는 임시로 보조 기억 장치로 쫓아낸다. 이렇게 해서 생긴 빈 공간에 또 다른 프로세스를 적재하는 방식이다.

💡 JVM과 swap은 상극
GC가 주기적으로 힙 전체를 훑는데, 힙 일부가 swap에 나가 있으면 GC가 그걸 죄다 도로 읽어오느라 엄청난 멈춤이 생긴다. 그래서 운영 JVM 서버는 보통 swap을 끄거나 swappiness를 낮게 둔다.
하지만 이렇게 열심히 쫓아내고 해도 결국 연속 할당 방식으로는 메모리보다 용량이 큰 프로세스를 적재할 수 없다. 이런 문제점들을 해결하기 위해 현대에는 페이징 이라는 기법이 널리 사용되고 있다.