Virtual memory is a methodology by which an application runs in a memory address space independent of the physical addressability of the system. The physical addressability of a system is the number of unique bytes that can be referenced via the address lines in the system i.e. 2 raised to the number of address lines in the system. It abstracts from the application the physical memory characterisitics of the system.
There is a common misconception that virtual memory is for providing more primary storage to an application than that actually exists. Though that is a highly visible effect of virtual memory, it is not the only intention. Commonly a system's physical memory address space is shared by RAM, ROM and device memory. Of these only RAM is available for generic use by applications. The RAM is spread across the system's address space interspersed with ROM and device memory. This layout varies from system to system. If applications have to be written generically these layout differences must be abstracted to them. The Operating System does this abstraction by implementing a virtual memory model. Applications are written for this model and so can execute on any system implementing that model.