Please read a book/the documentation about the linux memory management.
please also try to look into the output of the command "free". It looks like
total used free buffers cached
Mem: 2057604 2037524 20080 23640 1045648
-/+ buffers/cache: 968236 1089368
Swap: 2996112 2684 2993428
As you can see I have 2 GB of memory and only 26MB free BUT - and that is important - I also have 23 MB of buffer space and about 1GB of cache space. So in reality I have about 1 GB of free memory because the cache and buffer space is allocated dynamically.
I only have 1 GB of free memory because that is my workstation and I just use a large java application.
You can change that behaviour if you know what your are doing with sysctl.