Mi az a Virtuális gép?
Az #1-ső számú válaszoló szerintem elkapkodta a választ... ...elsőbbén is arra gondoltam, amire ő, de aztán elolvastam a többi részét is a kérdésnek...
Szóval a Java valójában egy bytekódot gyárt, amit egy virtuális gép futtat, ezt JVM-nek (Java Virtual Machine) nevezik... ...és tök logikus, hogy ez így lasabb futtatást eredményez.
A C#-nél már talán azért nem ennyire tragikus a hyelzet, de ott is beékelődik még egy szint a kód és a futtatás közé, ezt ott .NET keretrendszernek hívják.
Tehát olyan ez, mint amikor mész az utcán, majd belelépsz egy kutyaszarba... :-) ...végülis azután is tudsz még menni, csak már nem az igazi... :-)
A java virtuális gép is ugyanúgy virtuális gép, csak nem általános felhasználású, a kérdésre tökéletes válasz.
Egyébként a C# is ugyanúgy virtuális gépen fut, mint a Java.
A C++ meg azért nem használ ilyet, mert a C++ se nem Java, se nem C#.
A C++ régi idők szülötte, amikor még nem volt "divat" az ilyesmi. Manapság viszont már elvárás a sandboxing lehetőségek és a bináris hordozhatóság miatt. Egyénként C++ forráskódot is be lehet forgatni ilyen környezet alá, illetve Java/C# kódot is lehet közvetlenül natív binárissá fordítani, csak egyiknek sincs sok értelme. Első esetben a két magasszintű nyelv fejlettségét, utóbbi esetben a JIT és a bináris hordozhatóság lehetőségét veszíted el.
Azt sem lehet ma már kijelenti, hogy lassabb lenne, ugyanis a JIT (just-in-time) compilation miatt sokkal jobban tudnak ezek a rendszerek optimalizálni, mint mondjuk egy GCC.
Vonatkozó blogposzt Verhás Péter tollából... akarom mondani billentyűzetéből:
A VM által futtatott kódot Java esetén bytecode -nak, C# esetén IL -nek (intermediate language) hívják. Maga VM pedig egy interpreter és egy runtime ezekhez, nem a szó szoros értelmében vett virtuális számítógép, bár azért elég komplikált cuccok.
Végfelhasználói alkalmazásoknál kellemetlen, ha még egy külön futtatókörnyezet (nem is kicsi) megléte is szükséges egy adott program futtatásához, ráadásul jellemzően a JIT sem olyan hatékony ezekben az esetekben.
Egy nagyléptékű üzleti rendszer esetén azonban már bőven előjönnek az előnyei. Nem véletlen, hogy az ilyen rendszerek túlnyomó többsége Java-ban íródik.
Van bankszámlád? Szoktál átutalással fizetni? Esetleg netbankot használni? Vagy simán bankkártyával vásárolni? Jó esélyed van rá, hogy a folyamat mögött egy ordas méretű Java rendszer ketyeg.
Valóban van olyan feladat, amelyre nem alkalmasak a VM-en futtatott kódok (jellemzően rendszerközeli programozás), de még véletlenül sem a futtatási sebesség okozza itt a problémát, hanem a tényleges hardvertől való teljes elszeparáltság.
Aki 2014-ben még a C#/Java sebességéről prédikál, azt messze kerüld el, mert nem beszámítható.
Valaki írta itt,hogy a c# ban írt programok is virtuális gépet használnak úgy mint a java de ez nem igaz nincs .net virtuális gép.
Általános tévhit, hogy a VES/CLR t virtuális gépként azonosítják. Ez abból a szintén téves elképzelésből alakult
ki, hogy a .NET ugyanaz, mint a Java, csak Microsoft köntösben. A valóságban nincs .NET virtuális gép, helyette
ún. felügyelt (vagy managed) kódot használ, vagyis a program teljes mértékben natív módon, közvetlenül a
processzoron fut, mellette pedig ott a keretrendszer, amely felelős pl. a memóriafoglalásért vagy a kivételek
kezeléséért.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!