Disk space for .vmdk files is allocated on the VM's guest operating system's need, i.e. whenever the guest OS writes data blocks to previously unallocated storage. One reason why the .vmdk file may be smaller than what the guest OS reports as used disk space, is the fact that a simple file creation within the guest, (e.g. a large pagefile) will not consume host disk space until the guest file is modified.
The compression that you see depends just on the gust OS files, i.e. how well they can be compressed.
André