Since 12.04, there is no difference between the Desktop linux-generic and Server linux-server kernels; they have been merged. (Source; see here for why this was done.)

The virtual kernel differs only in the number of included drivers. It only includes "the necessary drivers to run inside popular virtualization technologies such as KVM, Xen, and VMWare. ... Other than that, all other options are identical between the generic and the virtual kernels."

In practice, this means the -virtual kernel image is smaller, and may also take up somewhat less room in memory (fewer built-in modules/drivers). The savings are probably in the single-digit megabyte range, so it won't make a difference for most VMs.

Server and Desktop kernel differences before 12.04:

Before 12.04, the differences were: