Efectivamente el kernel Linux ya se ocupa de eso...
Si abres muchas paginas web por ejemplo y luego las cierras, esa memoria no queda "sin usar" (como en windows), sino que pasa a ser cache. Si entonces vuelves a abrir alguna de esas páginas, ya no hará falta volver a cargarla, porque se encuentra en caché. Puedes ver el estado de tu cache con el comando "free".
Puede que no sea exactamente lo que buscas, pero hay una manera de vaciar las caches a partir del kernel 2.6.15 creo que es... Ten en cuenta que la memoria que no sea cache ni buffer, no puedes eliminarla... podrias perder datos, o recibir resultados inesperados de algunas aplicaciones que tengas funcionando.
echo -n 3 > /proc/sys/vm/drop_caches
Mira este ejemplo con mi ordenador
localhost generico # free
total used free shared buffers cached
Mem: 4019188 1426936 2592252 0 436104 297660
-/+ buffers/cache: 693172 3326016
Swap: 4200988 0 4200988
localhost generico # echo -n 3 > /proc/sys/vm/drop_caches
localhost generico # free
total used free shared buffers cached
Mem: 4019188 305552 3713636 0 1948 76508
-/+ buffers/cache: 227096 3792092
Swap: 4200988 0 4200988
De un total de 4GB tenía 2.5GB libres y 694MB en buffers y cache. Por lo que tenía unos 800MB realmente ocupados.
Despues de vaciar las caches, obtengo: 3GB libres y 220MB en buffers y cache. Por lo que conservo los 800MB de memoria ocupada.
He ganado 500MB de memoria Free.
Por último también puede serte útil el archivo: /proc/sys/vm/swappiness
Muestra un valor de 0 a 100, es la "oposicion" a usar swap. Es decir, si esta a 100, el sistema hara lo máximo para no tener que usar swap.
RECTIFICO
swappiness es la tendencia del kernel a utilizar más o menos swap. Es decir, un valor mas alto significa mas facilidad para usar swap, i más bajo menos facilidad.