Actually 'defraging' your physical memory is completely impossible as there's no way to tell running processes to relocate their data. And there's no way to find out yourself where all the pointers are.
With the help of the MMU it would be possible to re-align the non-allocated tile sized memory chunks into one single chunk (thus creating additional logical memory), but there's no such tool around afaik.
Logical memory can create problems with allocating buffers for DMA, too...