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:
The Server Edition uses the Deadline I/O scheduler instead of the CFQ scheduler used by the Desktop Edition.
Preemption is turned off in the Server Edition.
The timer interrupt is 100 Hz in the Server Edition and 250 Hz in the Desktop Edition.