Różnice między poszczególnymi typami takich maszyn są płynne. Np. wirtualna maszyna Javy jest powszechnie znana jako samodzielny interpreter, ale ponieważ istniały komputery, które potrafiły wykonywać programy w kodzie bajtowym Javy bezpośrednio, można ją także traktować jako emulator tych maszyn. Ponadto kompilator JIT również jest rozwiązaniem wykorzystywanym podczas interpretacji kodu bajtowego Javy.

Możliwości maszyn wirtualnych Maszyny wirtualne pozwalają uruchamiać programy napisane dla innych architektur bez żadnych zmian lub tylko z niewielkimi modyfikacjami (parawirtualizacja). Daje to dużą niezależność od fizycznego sprzętu, choć kosztem dodatkowej warstwy abstrakcji, która wiąże się z pewnymi niedogodnościami: oprogramowanie wirtualizujące samo wymaga części czasu procesora i pamięci operacyjnej, zwiększa także stopień komplikacji układu, a więc i ryzyko błędu. Ponieważ jednak wydajność współczesnych komputerów ciągle rośnie, a osobne warstwy ułatwiają znajdowanie błędów, coraz częściej jest to cena, jaką warto zapłacić za dodatkowe możliwości.