Vad står det i jvm

Obs: JVM är flertrådad. Det kan vad står det i jvm att flera trådar försöker initiera samma klass samtidigt. Detta kan leda till samtidiga problem. Du måste hantera trådsäkerhet för att programmet ska fungera korrekt i en flertrådad miljö. Runtime data area Det finns fem komponenter i runtime data area: låt oss titta på var och en för sig.

Alla data på klassnivå lagras här, till exempel en beständig körtidspool, fält-och metoddata och kod för metoder och konstruktorer. Anta till exempel att du har följande klassdefinition: Offentlig Klassanställd {privat Strängnamn; privat int-ålder; Strängnamn för en offentlig anställd, int-ålder {detta. Metodomfånget skapas när VM startar, och det finns bara ett metodomfång per JVM.

Heap-området alla objekt och motsvarande instansvariabler lagras här. Detta är runtime - dataområdet från vilket minne tilldelas för alla instanser av klassen och arrays. Högen skapas när VM startar, och det finns bara ett högområde på JVM. Observera. Eftersom metoden och högregionerna har samma minne för flera trådar är data som lagras här inte säkra. Stack Area när en ny tråd skapas i JVM skapas också en separat runtime stack samtidigt.

Alla lokala variabler, metodsamtal och partiella resultat lagras i stackområdet. Om bearbetning som utförs på en tråd kräver en större stackstorlek än vad som är tillgängligt, kastar JVM en StackOverflowError. För varje metodsamtal görs en post i stackminnet, som kallas stackramen. När metodanropet är klart förstörs stapelramen. Stackramen är uppdelad i tre divisioner: lokala variabler-varje ram innehåller en rad variabler som kallas dess lokala variabler.

Alla lokala variabler och deras värden lagras här. Längden på denna array bestäms vid kompileringstiden. Detta fungerar som en runtime-arbetsyta för att utföra mellanliggande operationer. Det maximala djupet för denna stapel bestäms vid kompileringstiden. Ramdata - alla symboler som motsvarar metoden lagras här. Det lagrar också information om fångstblocket vid undantag.

Operandstacken innehåller variabler och operatörer som är nödvändiga för att utföra matematiska beräkningar av subtraktion och division. Observera. Eftersom stackområdet inte delas är det i sig säkert. Efter vad står det i jvm ha utfört instruktionen uppdateras PC-registret med följande instruktion. En separat inbyggd metodstack tilldelas också för varje ny tråd.

Exekveringsmotorn. När bytekoden har laddats in i huvudminnet och detaljerna är tillgängliga i runtime-dataområdet är nästa steg att köra programmet. Exekveringsmotorn hanterar detta genom att köra koden som finns i varje klass. Innan programmet körs måste bytecoden dock konverteras till maskinspråksinstruktioner.


  • vad står det i jvm

  • Tolken läser och kör en rad instruktioner med byte-kod. På grund av utförandet rad för rad är tolken jämförelsevis långsammare. En annan nackdel med tolken är att när en metod kallas flera gånger krävs Varje gång en ny tolkning. Använder främst en tolk för att köra bytekod, men när den hittar någon dubblettkod använder vad står det i jvm en JIT-kompilator. JIT-kompilatorn samlar sedan in all bytekod och ändrar den till inbyggd maskinkod.

    Denna inbyggda maskinkod används direkt för upprepade metodsamtal, vilket förbättrar systemets prestanda. Detta är en dyr operation eftersom den får tillgång till minne varje gång den går in i en slinga. JIT-kompilatorn kommer dock att känna igen att den här koden har en hotspot och kommer att utföra optimering på den. Den lagrar en lokal kopia av SUM i PC-registret för strömmen och fortsätter att lägga till värdet av I till det i en slinga.

    När slingan är klar kommer den att skriva summan tillbaka till minnet. Observera. JIT-kompilatorn tar längre tid att kompilera koden än för tolken att tolka en rad kod rad för rad. Om du bara ska köra programmet en gång är det bättre att använda en tolk. Detta är processen att återställa vad står det i jvm för automatiskt minne genom att förstöra dem. Skräpinsamling gör Java-minnet effektivt eftersom det tar bort oskyddade objekt från heap-minnet och ger ledigt utrymme för nya objekt.

    Den innehåller två faser: Markera-i detta skede identifierar GC oanvända objekt när du distribuerar minne - i detta skede raderar GC objekt som identifierats under tidigare skräpsamlingar, körs automatiskt av JVM och behöver inte behandlas separat. Det kan också orsakas av ett systemanrop. JVM innehåller 3 olika typer av sophämtare: serial GC är den enklaste implementeringen av GC, och är utformad för små applikationer som körs i enkeltrådade miljöer.Under laddningsprocessen hittar JVM en binär representation av klassen och skapar den.

    Under länkningsprocessen slås de laddade klasserna samman i JVM-körtidstillståndet så att de kan köras i initialiseringsstadiet. JVM använder i princip en symboltabell lagrad i en ihållande runtime pool för länkningsprocessen. Initialisering består av det faktiska utförandet av relaterade klasser. Följande är typerna av klasslastare: Bootstrap klasslastare: denna klasslastare är högst upp i klasslastarhierarkin.

    Lastaren av applikationsklassen: Denna klasslastare finns längst ner i klasslastarhierarkin och är det direkta barnet till applikationsklasslastaren. Om inte, kastas felet och länkningsprocessen stannar. För att uppnå detta används en tabell med symboler i permanent minne ur klassmetodens synvinkel. Initialisering är den sista fasen av klassladdningsprocessen. Statiska variabler tilldelas sina ursprungliga värden och statiska block körs.

    Dataområden för körtid JVM-specifikationen definierar specifika dataområden för körtid som behövs under programkörning. Några av dem skapas medan JVM körs. Andra är lokala för trådar och skapas endast när en tråd skapas och förstörs när en tråd förstörs. Stack den är lokal för varje tråd och lagrar parametrar, lokala variabler och returadresser under metodsamtal.

    Ett StackOverflow-fel kan uppstå om en ström kräver mer stackutrymme än tillåtet. Om stapeln expanderar dynamiskt, det kan fortfarande kasta en OutOfMemoryError. Högen av den delas mellan alla trådar och innehåller objekt, klassmetadata, arrays etc. Du kan styra mängden heap som din JVM kräver från operativsystemet med vissa flaggor, mer om det senare.

    Försiktighet måste vidtas för att inte kräva för lite eller för mycket minne, eftersom det har viktiga prestandaimplikationer. Dessutom hanterar GC detta utrymme och tar ständigt bort döda föremål för att frigöra utrymme. Den lagrar strukturer för varje klass, till exempel en permanent pool, mer av detta senare, kod för konstruktörer och metoder, metoddata etc.

    Det kan också expandera eller inte expandera enligt applikationens behov.