JVM gibi bir sanal makine, genellikle dosyalar, bir dizi basit talimat (genellikle gerçek CPU talimatlarına dönüştürmek kolaydır) olarak kabul eden ve bunları yerel CPU talimatları olarak derleyen ve çalıştıran bir programdır (genellikle HotSpot veya JIT gibi isteğe bağlı bir derleyici).
Aslında bir soyutlama katmanı. VM komut seti uygulamalarını, çeşitli benzerlikler (yığın tabanlı olma gibi) nedeniyle farklı işlemci mimarilerine taşımak genellikle daha kolaydır. Modern programlama dillerine ilkel CPU talimatlarından daha fazla yönelik olduğu için farklı programlama dillerini VM talimatlarına taşımak da çok daha kolaydır. JVM ve CLR (.NET) gibi birçok Sanal Makine, sanal yöntemleri çağırmak ve nesne örnekleri oluşturmak için talimatlar içerir.
Örneğin bir dil alalım. Buna MyLanguage deyin. Bir programlama dili olduğundan, sonuçta bazı CPU mimarisi talimatlarını derler. Bu, uyumlu, esnek bir Sanal Makine komut kümesi verildiğinde, MyLanguage'i bu VM'nin talimatlarından oluşan bir sete derlemek de mümkün olduğu anlamına gelir.
Her zaman verimlilik sorusu vardır, çünkü VM komut setlerinde yerel olarak yapmanız gerekmeyecek bazı geçici çözümleri kesmek zorunda kalabilirsiniz, ancak yine de mümkündür.