• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

JRE,JVM,JIT wytłumaczenie

VPS Starter Arubacloud
+3 głosów
453 wizyt
pytanie zadane 3 lutego 2019 w Java przez periedynek Obywatel (1,320 p.)
Cześć. Uczę się nt. różnić pomiedzy JRE,JVM i JIT.

Jeżeli chodzi o JVM, to ogarnąłem mniej więcej jak to działa.

1) javac (który się znajduje w JDK) konwertuje nasz napisy kod na tzw. "bytecode".

2) jvm "łapie" ten bytocde i przechodząc przez te wszystkie komponenty czyli class loader, bytcode verifier, execution engine zamienia bytecode na kod maszynowy

i o ile się nie myle, to jit jest częścią execution engine. Nie potrafię ogarnąć jak to działa. Na stronkach pisza, że usprawnia on JVM, bo sam JVM byłby zbyt wolny ze wzgledu na konwertowanie całego bajtkodu na kod maszynowy. Ludzie piszą, że JIT (just-in-time) konwertuje w czasie run time kod, który jest najbardziej używany na kod maszynowy tak, aby cały kombajn JVM nie musiał konwertować wszystkiego samego sam.

Jak to działa, co to jest ten czas run time, kiedy on występuje?

Jeżeli chodzi o JRE, to na każdej stronie jest napisane, że;

"Actually JVM runs the program, and it uses the class libraries, and other" natomiast

"If you want to run any Java program, you need to have JRE installed in the system.", to co w koncu odpala ten program. Tak wiem, że JRE = JVM+jakies tam biblioteki, ale to w takiem razie to skoro to i to odpala program to po co nam jest JRE?

 

Potrzebuje wytłumaczenia na chłopski rozum, najlepiej na przykładzie.

2 odpowiedzi

0 głosów
odpowiedź 4 lutego 2019 przez mbabane Szeryf (79,280 p.)
wybrane 6 lutego 2019 przez periedynek
 
Najlepsza

Runtime to po prostu czas działania aplikacji. Uruchamiasz aplikację i JIT już działa. Jest polecenie, które uruchamia program javy bez JIT'a:

java -Xint

Zerknij na to na pewno wiele Ci się wyjaśni:

https://www.youtube.com/watch?v=rWdgla54bcc

potem na to:

https://www.youtube.com/watch?v=GXyM7IOTXOM

 

komentarz 5 lutego 2019 przez periedynek Obywatel (1,320 p.)
No tak tak, ale chodzi mi co sie dzieje z kodem, ktory nie jest jitowany. On nie jest konwertowany na kod maszynowy, tylko jest od razu tak jakby wykonywany?
komentarz 6 lutego 2019 przez mbabane Szeryf (79,280 p.)
edycja 6 lutego 2019 przez mbabane

Gdy jita nie ma to kod jest najpierw interpretowany a potem wykonywany. Niestety nie analizowałem tego na własną rękę, a źródła z których czerpałem wiedzę prawdopodobnie jakoś jawnie tego nie poruszały.

Według mnie jeśli kod nie przejdzie przez jitowe optymalizacje będzie najpierw interpretowany, a potem wykonywany.

komentarz 6 lutego 2019 przez mbabane Szeryf (79,280 p.)
Jedno jeszcze sprostowanie. Kod bytecode będzie zawsze zinterpretowany (forma dokonana). Czyli JIT analizuje już zinterpretowany kod i może tę interpretację poprawić. Coś na zasadzie, że tłumaczysz angielski tekst obok nauczyciela (JIT) i w razie jak coś nie do końca dobrze zrozumiesz/przetłumaczysz nauczyciel Cię poprawi.
komentarz 6 lutego 2019 przez periedynek Obywatel (1,320 p.)
a, okej. Czyli cały kod jest intepretowany, mamy napisaną książkę i JIT wprowadza poprawki do tej książki a następnie program jest wykonywany?
komentarz 6 lutego 2019 przez mbabane Szeryf (79,280 p.)

Cały tylko myk z JIT-em polega na tym, że on to robi w trakcie wykonywania, nie przed wykonaniem. Można powiedzieć, że on optymalizuje przed kolejnym wykonaniem. I jeśli w czasie pracy JITa, on poprawi dany fragment kodu to przy kolejnym wywołaniu tego samego kodu, kod będzie wykonany z naniesionymi poprawkami JIT'a.

+1 głos
odpowiedź 4 lutego 2019 przez Mateusz51 Nałogowiec (28,180 p.)
Srodowisko javy sklada sie z kilku zbiorow programow i bibilotek. JRE jest to java runtime environment, czyli srodowisko uruchomieniowe. Zawiera ono wirtualna maszyne javy JVM wraz z kilkoma programami i bibliotekami podstawowymi w formie bytecodu.

Odpadają jakikolwiek program w javie odpalasz wlasnie jvm. On ma w sobie class lodery, garbage collectory i tak dalej. Jednym z takich dodatkowych featurow jest JIT just in time compiler. Jego glownym zadanien jest dodatkowa optymalizowaniu tych elementow kodu ktore wykonuja sie najczesciej. W skrocie dziala to tak ze kawalek kodu jest agresywniej optymalizowany.
komentarz 4 lutego 2019 przez periedynek Obywatel (1,320 p.)
Ale to nie jest dalej odpowiedź dla mnie dobra.

Skoro JVM odpala program, to co daje JRE. Prosze o nie mowienie, ze jest to środowisko uruchomieniowe i to ono odpala, to bo już wiem:D
komentarz 4 lutego 2019 przez Mateusz51 Nałogowiec (28,180 p.)
JRE niczego nie odpala. Tak jak JDK jest zbiorem programów pozwalających na development tak JRE jest zbiorem programów i bibliotek pozwalających na uruchomienie programu napisanego w java. JRE zawiera w sobie JVM na którym odpalamy programy.
komentarz 4 lutego 2019 przez periedynek Obywatel (1,320 p.)
Ale ja nie potrafię tego pojąć, w takim razie skoro jre to taki komputer, a jvm to gra?

jre daje srodowisko a jvm odpala sam program?
komentarz 4 lutego 2019 przez Mateusz51 Nałogowiec (28,180 p.)
Nie. JVM to komputer. JRE to karton w którym Ci ten komputer przyjechał wraz z płytkami sterowników.
komentarz 4 lutego 2019 przez periedynek Obywatel (1,320 p.)
ale ja nie potrzebuje zadnego kartonu do komputera ani sterowników i bez tego go odpalę :D
komentarz 4 lutego 2019 przez Mateusz51 Nałogowiec (28,180 p.)
Nie rozumiem troche
komentarz 4 lutego 2019 przez periedynek Obywatel (1,320 p.)
Chodzi mi o to, że skoro to JVM odpala wszystko, to nie potrzebuje JRE aby odpalić ten program, bo skoro mówisz ze to jest karton i sa to sterowniki, to nie są one wymagane do tego by włączyć komputer czyli tzw program.
komentarz 4 lutego 2019 przez Mateusz51 Nałogowiec (28,180 p.)
Ale mając JVM masz też JRE, bo JVM wchodzi w skład JRE. To nie są rozłączne rzeczy. Sam JVM nie odpali programu bo zabraknie mu klas z biblioteki standardowej.
komentarz 4 lutego 2019 przez periedynek Obywatel (1,320 p.)
No tak, ja wiem że JVM jest częscią JRE, które zawiele biblioteki (util,math etc.). Czyli po prostu JVM odpala program, a JRE daje mu miejsce gdzie moze ten program odpalić?
komentarz 4 lutego 2019 przez Mateusz51 Nałogowiec (28,180 p.)
Można tak to nazwać.

Podobne pytania

0 głosów
2 odpowiedzi 677 wizyt
0 głosów
2 odpowiedzi 653 wizyt
pytanie zadane 15 października 2019 w C i C++ przez coderCpp93 Gaduła (4,200 p.)
+5 głosów
2 odpowiedzi 205 wizyt
pytanie zadane 19 czerwca 2020 w Java przez reaktywny Nałogowiec (40,650 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...