[ Neflernis @ 25.05.2003. 13:49 ] @
(odgovor moze i na srpskom, mrzelo me da prevodim jer sam slao na strane forume)

this is probably stupid question but it bothers me a lot so i must ask.

In most java books it is explained what is JVM but the explanation why acctualy we need it is quite strange for me. So, here is how i see it:

We have say C++ and its compiler for Windows or Linux or some X operating system. But in Java we have first compiler to byte code and than JVM one for Windows one for Linux and one for some X operating system. It seems to me like double work !

Ain`t sufficient to write compilers who compile the exact syntax ? For example i write C++ code and than compile it with Windows compiler or Linux compiler and it does the same ?!

tia
[ cedomir @ 25.05.2003. 15:43 ] @
Ne samo da za Javu nemas 2 kompajlera nego nemas ni jedan!

Kada napises imefajla.java fajl njega naredbom
Code:
javac imefajla.java
prvo prevodis da bi dobio imefajla.class fajl a onda ga naredbom
Code:
java imefajla
interpretiras - JVM ga procita i izvrsi njegove naredbe...
[ c00l_daem0n @ 25.05.2003. 16:07 ] @
Na ovoj adresi http://www.codeproject.com/dotnet/clr.asp imas sjajan text, mada objasnjava slicnosti i razlike izmedju .NET-ovog CLR-a i Javinog JRE-a, ali u sustini saznaces kako sve to radi.
[ Gojko Vujovic @ 25.05.2003. 19:33 ] @
Ukratko, prevodi se u java byte code zbog portabilnosti što je jedan od prvobitnih ciljeva Jave. Jedino na ovaj način će ti isti kompajliran kod raditi na svim platformama jer se u suštini izvršava u jednoj virtuelnoj - JVM, bez obzira na arhitekturu kompjutera o kojoj je reč.

Da im portabilnost nije bila bitna, pravili bi direktan kompajler, ali time bi dobio exe fajl u windowsu na primer od koga bi imao slabe koristi na mac-u ili linux-u, i slično.
[ leka @ 28.05.2003. 13:03 ] @
- Sto takodje postoji, i zove se JAVA Native Compiler ...
[ srki @ 28.05.2003. 13:50 ] @
A sto java radi kao interpeter? Zasto ne bi mogao da kompajlira u native formu taj kompajlirani kod pa onda da ga izvrsava? Tako bi mogla i java da ima brzinu c-a. Ili jednostavno sto mora da java byte code bude portabilan. Dovoljno je da sam source bude portabilan pa dalje neka se kompajlira u native formu. Nesto kao ansi-c ili iso c++.
[ tOwk @ 28.05.2003. 14:11 ] @
Pa to bi bilo još sporije.

Zamisli da svaki korisnik mora da ima Java kompajler (umesto samo Java VM), i da pri svakom pokretanju programa mora da čeka na njegovo prevođenje!

Pa to je besmisleno i mnogoooo sporije! Ili si ti možda mislio da treba spremiti izvršne fajlove za „sve“ platforme (gde si uključio Windows, GNU/Linux, MacOS, možda neki BSD i još par sistema, a ostalih 5491 na ovom svetu neka se nose, a? :-))
[ Dragi Tata @ 28.05.2003. 18:13 ] @
U principu, postoji JIT

http://wwws.sun.com/software/solaris/jit/

mada je Java spora i sa njime.
[ srki @ 28.05.2003. 18:20 ] @
Citat:
tOwk:
Pa to bi bilo još sporije.

Zamisli da svaki korisnik mora da ima Java kompajler (umesto samo Java VM), i da pri svakom pokretanju programa mora da čeka na njegovo prevođenje!

U pravu si.

Citat:
Pa to je besmisleno i mnogoooo sporije! Ili si ti možda mislio da treba spremiti izvršne fajlove za „sve“ platforme (gde si uključio Windows, GNU/Linux, MacOS, možda neki BSD i još par sistema, a ostalih 5491 na ovom svetu neka se nose, a? :-))

Pa ako mogu da naprave java virtual machine za svaku od tih platformi zasto onda ne bi mogli onda bi jos lakse bilo da su umesto toga pravili kompajere za te masine. I onda ne bi bio problem da svako na svojoj masini spremi te fajlove za svoj procesor ( ne da pri svakom pokretanju kompajlira).
Znaci java code bi i dalje bio portabilan a ne kao sada i java code i java byte code.
[ tOwk @ 28.05.2003. 18:51 ] @
Srki, ideja je u tome da Java bytecode radi i na budućim platformama koje imaju JVM.

Ako ja sad napravim neki super-uređaj na nekoj novoj platformi koji podržava Javu, svaki Java program će raditi, bez potrebe za prekompajliranjem.

Znači, umesto da teram sve koji pišu Java programe da ih prevedu za konačan broj postojećih platformi, i čim izađe neka nova da ih opet prevode, dovoljno je da jednom prevedu, i to je sve.
[ dejankr @ 02.06.2003. 12:00 ] @
Jedna napomena.
Sve skorije verzije Jave imaju uključen JIT (Just In Time Compiler) po defaultu. To znači da se Java PREVODI u izvršni kod pri svakom pokretanju automatski. Doduše, ovo i nije baš uvek tačno jer sama JVM odlučuje šta će i kada prevesti u nativni kod tako da neke metode koje se retko koriste mogu i da ostanu u bajtkodu.

U svakom slučaju to znači da imamo i portabilnost (jedan class fajl je isti za sve platforme) i performanse koje mogu da se približe programima pisanim u C++ (teoretski mogu biti i bolje ali u praksi se verovatno to nikad neće desiti).

Dejan
[ impaque @ 02.06.2003. 14:48 ] @
Da li bi neko mogao da mi pojasni ovo:
Citat:
7. Compiled programs do not allow security to be implemented with in the code - e.g. a compiled program can access any area of the memory, and can do whatever it wants with your PC (most of the viruses are made in compiled languages).

Zar nije na operativnom sistemu da dozvoljava/ne dozvoljava programu pristup određenim delovima memorije, tj. da mu dodeli memorijski prostor u kome treba da se izvršava (koji adresni prostor da "troši")?
[ tweeester @ 02.06.2003. 15:02 ] @
Ovo ti je malo offtopic ali odgovor je NE, ovaj citat koji si gore naveo nije tacan, u pravu si kad kazes da OS namece programu security restrictions po pitanju memorije i jos koje cega ... tako da nije tacno da kompajliran program moze da radi "sta hoce" - stavise, daleko od toga...
[ sonja @ 05.06.2003. 11:52 ] @
zar niko ne zna za jikes(ibm)?
[ c00l_daem0n @ 05.06.2003. 13:27 ] @
Naravno da zna.
Jikes je super, napisan je u C-u pa mnogo brže kompajlira u byte code.
Često ga koristim umesto javac.
Nego jel se neko igrao sa gcj-om, ili SWT-om, ili možda sve zajedno?
[ tweeester @ 05.06.2003. 13:29 ] @
naravno da znamo za jikes, sta s njim?
[ Djuki @ 11.07.2003. 02:03 ] @
Java je zamisljena tako da programi pisani u njoj budu PRENOSIVI i da se mogu izvrsavati na svim platformama. Programi se prvo prevedu u bytecode koji se moze izvrsavati na bilo kojij platformi a zatim se oni mogu interpretirati i izvrsiti na bilo kom kompjuteru u svetu koji ima JVM. Kada znate da se svaki java program koji je preveden u platformski-nezavistan bytecode treba uvek pri pokretanju da se prevede tj interpretira, logicno zakljucujete da ce takvi programi biti sporiji od programa koji su pisani u c++-u npr.Ali to nije istina. U praksi se pokazalo da java aplikacije mogu da budu isto tako brze kao i one pisane u c++-u. Barem tako pise u knjizi za J2SE od Johna Zukowskog.
[ filmil @ 11.07.2003. 13:09 ] @

Ima još jedan štos: i C je prenosiv jezik, ali ne na virtuelnim nego na realnim mašinama. I šta je posledica? Standardni jezik C je toliko spartanski i toliko neodređen da je to pravi užas. C ne govori o ulazu i izlazu osim standardnog, nema ni pomena o garbage collection-u, nema ni pomena o mrežama i mrežnom programiranju, na kraju krajeva čak ni veličina osnovnih tipova nije jednoznačno definisana a standardna runtime biblioteka je pravi primer asketizma.

Zašto? Zato što mnoge mašine na kojima C treba da radi pojma nemaju ni o jednoj od gore navedenih stvari. U C-u se mogu programirati i mikrokontroleri, koji ne znaju šta su to fajlovi, koji nikada neće izaći na mrežu jer rade recimo u tosteru i koji nikada neće skupljati memorijsko đubre jer i nemaju (random access) memoriju već je sve u ROM-u.

Java je uzela drugi kurs. Definisan je jezik sa naprednim mogućnostima ali su takođe definisani i uslovi koje mašina treba da ispunjava da bi mogla da izvršava javu. Tako je sam jezik mogao da dobije podršku za gore navedene stvari pa čak i mnogo više, standardne biblioteke su porasle preko svake mere i podržavaju sve i svja, a problem prenosivosti je prebačen na autore virtuelne mašine: mi pravimo jezik uz pomoć koga i uz pomoć čijih standardnih biblioteka se može sve i svašta, a vi smišljajte kako da napravite virtuelnu mašinu koja će sve to podržati. Još je samo problem na tržište kontrolera progurati procesore koji mogu da teraju jvm i svi će biti srećni i zadovoljni. Najbolji fazon u celoj priči je što to lagano uspeva.

f