The Linux kernel itself is much smaller and more efficient than the NT kernel. On my 64MB box at work, NT typically takes up about 18MB. On my 64MB box at home, the Linux kernel takes up less than 2MB. That means 16MB of extra memory can be used by applications instead of just holding the OS.
Linux uses a copy-on-write scheme. If two or more programs are using the same block of memory, only one copy is actually in RAM, and all the programs read the same block. If one program writes to that block, then a copy is made for just that program. All other programs still share the same memory. When loading things like shared objects, this is a major memory saver.
Demand-loading is very useful, as well. Linux only loads into RAM the portions of a program that are actually being used, which reduces overall RAM requirements significantly. At the same time, when swapping is necessary, only portions of programs are swapped out to disk, not entire processes. This helps to greatly enhance multiprocessing performance.
Finally, any RAM not being used by the kernel or applications is automatically used as a disk cache. This speeds access to the disk so long as there is unused memory.