Kezdőoldal » Számítástechnika » Programozás » Mi az a Virtuális gép?

Mi az a Virtuális gép?

Figyelt kérdés
Sok helyen láttam azt, hogy a java meg c# azért nem jó erre meg arra, mert lassú a virtuális gép miatt. De ez mit takar egész pontosan?

2014. szept. 9. 15:57
1 2
 1/13 anonim ***** válasza:

Mi az a google?

[link]

2014. szept. 9. 16:31
Hasznos számodra ez a válasz?
 2/13 anonim ***** válasza:
90%

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... :-)

2014. szept. 9. 17:37
Hasznos számodra ez a válasz?
 3/13 A kérdező kommentje:
hát ez a hasonlat kissé... érdekes :D És akkor a c++ miért nem használ ilyet például, ha ezek a "fejlett" nyelvek meg igen?
2014. szept. 9. 17:45
 4/13 anonim ***** válasza:

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#.

2014. szept. 9. 18:06
Hasznos számodra ez a válasz?
 5/13 anonim ***** válasza:

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:

[link]


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ó.

2014. szept. 9. 18:10
Hasznos számodra ez a válasz?
 6/13 anonim ***** válasza:
A JIT optimalizációját ne keverjük össze a statikus optimalizálással, tök más a két dolog. És a példa is rossz három ok miatt: az O3 használata végső lehetőség, nem mindig helyes a fordító kimenete O2-nél még az marad, a gcc kódjánál is lehet jobbat elérni, és a harmadik a feladatokat csoportosítjuk és nem kiemelünk egyet. Feladok neked tisztán számításintenzív feladatot, és meglátjuk, hogyan szerepel le a JIT.
2014. szept. 9. 19:35
Hasznos számodra ez a válasz?
 7/13 anonim ***** válasza:
52%
Na, hogy egy kicsit érthetőbb legyen a dolog: A virtuális gépet úgy kell elképzelni, mintha a gépedben lévő fizikai processzor felett lenne még egy processzor. Ugye a te számítógéped azért tud műveleteket végezni, mivel van utasításkészlete. Namármost a virtuális processzor egy szoftver, ami úgy működik, mint a gépedben lévő fizikai processzor, saját utasításkészlete van, stb. Hogy ennek mi az értelme? Egyszerű. Ezek a virtuális processzorok megírhatóak több operációs rendszerre is, úgy, hogy a virtuális processzor utasításkészlete ugyanaz marad. Gyakori jelenség, hogy ami programot te megírsz Windowsra, nem fog futni mondjuk Linuxon. Mivel a virtuális processzor utasításkészlete ugyanaz minden oprendszeren, így amit te a virtuális processzorra írsz programot, ugyanúgy fog menni Windowson, Linuxon, stb.
2014. szept. 9. 20:16
Hasznos számodra ez a válasz?
 8/13 A kérdező kommentje:
azt úgy mellékesen megkérdezném még, hogy milyen szinten érdemes ezeket vágni? Kezdő-középhaladó szinten még nem érdemes ezekkel foglalkozni, ugye? Úgy értem, hogy azon a szinten még csak arra kell törekedni, hogy tudj programozni és fusson is rendesen.
2014. szept. 9. 20:23
 9/13 anonim ***** válasza:
Lehet platformfüggő programot írni Java-ban minden nehézség nélkül. Azonban megvan a lehetőséged, hogy olyat írj ami gond nélkül fut más platformon is. Ez nem olyan, hogy mikortól kell tudni, nyilván idővel szedi fel az ember, de a virtuális gép szükségességével tisztában kell lenned. Ha valaki erről beszél veled, azt kéne tudni...
2014. szept. 9. 20:35
Hasznos számodra ez a válasz?
 10/13 anonim ***** válasza:

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.

2014. szept. 9. 23:25
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!