Assuming a Dynamically allocated VDI (virtual hard disk), since a staticly allocated VDI will consume as much space as is allocated to the drive (not stored on it), the storage requirements will be close to the data inside the VM, with the caveat that if you do a lot of deleting inside the VM, the host requirements will increase (that space isn't automatically freed).
You can "compact" the VDI back down, but it is a multi-step process (that may vary, depending on the guest OS).
1) In the guest, you need to "zero" all the empty space (because deleted files are still there, just flagged as "empty"). You might want to "defrag" first, if running Windows.
2) (might not be required, i.e., in Windows, depending on the tool used to "zero" the space.) Remove the "zeroes" space, so it is treated as empty, again.
3) Shut down the VM
4) Compact the VDI from the host. Something like:
VBoxManage modifyhd /path/to/virtual/guest/harddive.vdi --compact