Just ignore Virtual Memory size. It is a number only a "Kernel Developer" could love, and very few of those even care.
The Activity Monitor VM Size is just adding up the highest address of every running application. And since your applications can be 64 bit apps, they could have a high address of 18,446,744,073,709,551,615 :-)
Most virtual address space is empty. I don't mean it has memory that is not used, I mean it has no real memory nor swap space associated with it. Nothing. Nada. Zilch!
When an application starts, it need address space for the program's code, for the program's data, for any application frameworks and shared libraries, and for dynamically allocated memory the program may need (more on this in a moment).
When shared application frameworks and libraries are mapped into the program's address space it is generally given its own unique chunk of address space that is NOT contiguous with the program's code, nor other shared frameworks and libraries. So for each mapped shared framework and library there will generally be a gap of unused virtual addresses. These virtual addresses may never get used, but since they do not take up real memory nor any disk space, it is not a problem, and it makes the operating system's life easier, especially if the operating system can place their shared frameworks and libraries in every application that uses them at the same virtual address. And it makes loading those shared frameworks and libraries much faster for you, as the operating system does not need to do address fixup for each shared framework and library, which then saves real memory for address fixup vectors. And the only cost is some empty virtual address space.
Dynamically allocated memory. The program's stack dynamically grows as the program calls different subroutines and those subroutines need local memory. This local memory comes from the stack. If a program calls almost no subroutines, it might use almost no stack space. But if a program calls lots of deeply nested subroutines, and if some of those subroutines need lots of local memory, a program's stack may grow to 100's of megabytes, or even gigabytes. The operation system does not know in advance how large a program's stack is going to grow, so the operating system need to map the application's stack into virtual memory so that it has room to grow contiguously.
An application can also ask the operating system to give it chunks of memory that have to be mapped into the program's virtual address space. The operating system will get the virtual address space for allocations like this from existing ranges of unused virtual address space if it can, but if it cannot, then the operating system will just grow the highest virtual address range and map the program's request from the new virtual address space.
But wait there's more! A program does not need to accept the dynamically allocated memory at the virtual address specified by the operating system. It can ask the operating system to give it the memory at a specific address. If that address is beyond the current highest virtual address currently being used the the application, then the OS will just extend the application's virtual address space so it can give the app the virtual address it wants. The OS will not put anything in the gap between the old highest address and the start of the dynamically allocated memory virtual address. And that gap will not require memory nor swap space as it is not being used for anything.
Anyway, chances are most of your virtual address space is unused, and just comes from the collection of shared frameworks and libraries, or from an application asking for some dynamically allocated memory at a specific high address.
OK, unused Virtual Memory it not 100% free. The operating system does have to keep track of it, and generally this costs 8 bytes for every page (4096 bytes) of unused virtual address space. But that is a 512 to 1 ratio, and while I do not know what Mac OS X is using for virtual memory page tables, I know there are sparse page table algorithms available so it is not necessary to even worry about some parts of the unused virtual address space.
If you really want to know what is mapped into what parts of a program and find the parts of used virtual address space vs unused gaps, you can play with the Applications -> Utilities -> Terminal and run the vmmap command (man vmmap). You may need to use the sudo command to access the virtual memory map of some applications.
Bottom line. Just ignore it, most kernel developer do, and they are the only ones that come even close to caring about VM Size.