U prethodnom poglavlju, gde smo objašnjavali kako JVM izvršava Java kod, pomenuo sam da JVM mora da učita kompajlirani fajl bajtkoda u svoju runtime podatkovnu oblast kako bi ga izvršio. Ovaj proces obuhvata mehanizam učitavanja klasa u Javi (znanje koje se često pita na intervjuima), pa ćemo ga detaljno obraditi.
- AI210
- Java jezgro128
- Java enterprise razvoj30
- Java osnove19
- Jezgro Jave19
- Java razvoj na nivou preduzeća17
- PDF16
- Java core11
- Sajt10
- Putanja učenja10
- Posao i intervju9
- Posao i intervjui7
- Java srž6
- Vodič za učenje5
- Tehnički članci5
- Saveti za traženje posla5
- MySQL4
- Planovi učenja4
- Traženje posla4
- Strategija za traženje posla4
- Razvoj/alati za izgradnju3
- Preokret intervjua3
- Intervju pobeda3
- Osnove računarstva2
- Baze podataka2
- Redis2
- Ostali sajtovi2
- Drugi sajtovi2
- Traženje posla i razgovori2
- Intervju-pobeda2
- Tehnički članak2
- Javni WeChat nalog1
- Razvoj/alatke za izgradnju1
- Razvoj/build alati1
- Segmentfault1
- Java u enterprise razvoju1
- Škola početnika1
- Akademija za početnike1
- Juejin zajednica1
- Traženje posla i intervjui1
- Pobeđivanje na intervjuu1
- Mianzini Nixi1
- Pobeda na intervjuu1
- Prevazilaženje na razgovoru1
- Preokret intjuvijanja1
- Intervju-preokret1
- Povratak intervjua1
- Preokret na intervjuu1
- Protivnapad na intervjuu1
- Preokret kandidata1
- Priprema za intervju1
- Kandidat1
- Poboljšanje intervjua1
- tehnicki clanci1
- tehnički članak1
- AI alat1
Mnogi kolege koji se bave Java razvojem, iz dana u dan pišu Java kod, a taj rad sigurno ne može bez osnovnog Java okruženja — JDK-a, jer naš Java kod na kraju radi na JVM virtuelnoj mašini.
Uobičajeno je da pre učenja Java-e prvi korak bude instalacija JDK okruženja. To je jednostavno — uglavnom direktno preuzmemo JDK sa zvaničnog sajta, instaliramo, podesimo promenljive okruženja i već veslo možemo da koristimo.
- Propusnost (throughput): udeo vremena rada programa u ukupnom vremenu izvršavanja (ukupno vreme = vreme rada programa + vreme sakupljanja smeća); što je vreme sakupljanja smeća kraće, propusnost je veća;
- Vreme pauze (pause time): trajanje STW-a;
- Zauzeće memorije: veličina koju zauzima Java heap.
„Autor, pošto sam pogledala kod Hello World, zaista me zanima kako se u Run panelu IDE-ja ispisalo ‘Sanmej, manje gledaj u telefon, manje igraj igrice, uči lepo, lepa budi’?” — rekla mi je Sanmej posle jednog gutljaja mlečnog čaja od žitarica i kakaa.
OutOfMemoryError, odnosno zloglasni OOM (curenje memorije), sigurno su mnogi kolege već iskusili; u poređenju sa uobičajenim poslovnim izuzecima, poput prekoračenja granica niza ili null pokazivača, problem OOM-a znatno je teže locirati i rešiti.
Predstavimo mini-knjigu «Autorov put ka naprednoj JVM». Mini-knjiga se vrti oko JVM-a u Javi, sadrži ukupno 19 poglavlja, preko 100 000 reči i 100+ ručno nacrtanih ilustracija, i u nju je uloženo ogromno truda. Evo osnovnih informacija o mini-knjizi.
- Naziv mini-knjige: Autorov put ka naprednoj JVM
- Autor mini-knjige: Marko Marković
- Kvalitet mini-knjige: Sadržaj mini-knjige potiče iz open-source baze znanja «Put ka naprednom Javom» koju je Autor objavio na GitHub-u (Put ka naprednom Javom). To što na GitHub-u ima 17000+ zvezdica jasno svedoči o kvalitetu, posebno imajući u vidu da mnogim kolegama u Kini pristup GitHub-u nije nimalo lak.
- Namenjenost mini-knjige: Ko je ikada bio na intervjuu dobro zna — JVM zauzima veliki deo intervjua za Java pozicije, pogotovo ako se prijavljuješ poznatijoj firmi. Teme poput mehanizma učitavanja klasa, mehanizma sakupljanja smeća, runtime podatkovnih oblasti Jave, JIT just-in-time kompilacije, instrukcija bajtkoda i optimizacije performansi na intervjuima se često pojavljuju. Pored toga, programeru sa jednom-dve godine iskustva koji želi da napreduje do seniora, znanje o JVM-u je prosto nezaobilazno. Upravo zato je Autor uložio toliko truda u pripremu «JVM mini-knjige»(https://javasi.dev/jvm/) — kako bi svima pomogao da lako i temeljno savlada znanja o JVM-u.
- Kratak opis mini-knjige: Posvećena je objašnjenju JVM-a, uključujući šta je JVM, runtime podatkovne oblasti, mehanizam učitavanja klasa, sakupljanje smeća, kao i pitanja sa intervjua o optimizaciji performansi. Sadržaj pokriva sve aspekte Java virtuelne mašine i predstavlja izvrstan materijal za učenje o JVM-u.
- Napomena o mini-knjizi: Ova mini-knjiga je sestrinska sa «Autorovim putem ka naprednom Javom — osnove»(https://javasi.dev/overview/) i «Autorovom mini-knjigom o konkurentnom programiranju»(https://javasi.dev/thread/). Možeš je čitati na GitHub-u ili na Autorovom sajtu.
Sakupljanje smeća jeste mehanizam koji u heap memoriji pronalazi koje se objekti još koriste, a koje ne, pa potom ove druge sakuplja i oslobađa.
Pod objektom u upotrebi podrazumevamo objekat na koji u programu još uvek postoji referenca; pod neiskorišćenim objektom podrazumevamo objekat na koji u programu više nema reference, pa ni memoriju koju zauzima moguće je osloboditi.
Prethodno smo obradili alatke za nadzor performansi JVM-a — deo za komandnu liniju; u ovom tekstu predstavljamo neke vizuelne alatke za nadzor performansi, uključujući JConsole, VisualVM, Java Mission Control itd., dok Arthas iz Alija ostavljamo za posebno poglavlje koje sledi.
Ovo poglavlje prvobitno je bilo namenjeno direktnom objašnjavanju instrukcija bajtkoda, ali pre toga moramo govoriti o arhitekturi skupa instrukcija, a arhitektura skupa instrukcija deli se na dve vrste: na bazi steka i na bazi registara.
Zato ćemo u ovom poglavlju posebno obraditi virtuelnu mašinu na bazi steka i virtuelnu mašinu na bazi registara, njihove razlike i prednosti i mane svake.
„Autor, još dok si pričao o prvoj liniji Java koda, hello world, pomenuo si JVM; već tada sam želela da znam šta je JVM zapravo, ali si rekao da je to vrlo velika tema koja će doći kasnije, posebno. Sad sam savladala osnove Jave, a i konkurentno programiranje, pa da li danas učimo JVM?” — rekla mi je Sanmej posle jednog gutljaja mlečnog čaja od žitarica i kakaa.
