Ciao, questo è quello da fare.
Abbiamo appreso che l'interpretazione bytecode Java di GBM aiuta a cogliere la pronuncia della famiglia che
non compromette la velocità DVM è una piattaforma incredibilmente ben collaudata e ottimizzata.
È così bello che anche i programmi scritti in altri linguaggi popolari come Scallan Ruby possono essere compilati in
un bytecode Java che può essere fatto su JVM.
In questo modo ottengono anche il beneficio dell'indipendenza dalla piattaforma oltre ad altri vantaggi come
la velocità e la sicurezza offerti da JVM.
Abbiamo un capitolo a parte dedicato a JVM solo noi idee elevate sul funzionamento interno di JVM, ma per
ora otteniamo una buona comprensione di alto livello di JVM.
È una lezione un po 'lunga, ma dovrebbe sicuramente aiutarti a capire quanto sia potente e sofisticata
la JVM.
GBM è la pietra angolare della nostra piattaforma e aiuta Jawa ad alcuni dei suoi obiettivi come la sicurezza
dell'indipendenza della piattaforma e l'esecuzione molto veloce.
La piccola macchina Java è chiamata ciò che si vuole perché è una macchina di calcolo astratta che è come una
vera macchina di calcolo.
Ha un set di istruzioni che esegue le istruzioni di Arnis che è il bytecode di Adela.
Quindi voglio vedere il tuo codice macchina in modo che le istruzioni impostino uno per un byte Java JVM.
Quindi, se l'istruzione è impostata come una vera macchina informatica, JVM manipola la memoria in fase di runtime.
Cioè utilizza la memoria per eseguire i suoi programmi.
Sottoponga i loro dati.
Non che il termine runtime qui si riferisca al momento in cui il programma viene effettivamente eseguito.
Nessun GBM ha poche possibilità di coro e include l'apprendimento e l'interpretazione della sicurezza bytecode Java e della
gestione automatica della memoria.
Sappiamo già che interpretare il bytecode Java aiuta l'indipendenza dalla piattaforma.
La sicurezza è fondamentale poiché Job è stato sviluppato per un ambiente di rete
che i programmi vengono scaricati da tutta la rete e non si vuole
che quei programmi eseguano attività dannose sulla macchina dell'utente a meno che non si sia in grado di programmare direttamente
la memoria processo automatico di gestione della memoria.
Ciò semplifica la programmazione in Java e inoltre rende i programmi Java molto più sicuri.
In questo modo si ridurranno notevolmente alcuni errori di memoria veramente brutti che si possono fare.
Come vedremo in GBM ha componenti separati per gestire queste responsabilità.
Quando discutiamo di GBM ci sono tre cose che riguardano per prima cosa la specifica GBM.
È semplicemente un documento che descrive le funzionalità di GBM su come dovrebbe funzionare.
Specifica anche il set di istruzioni bytecode.
Vedremo alcune delle istruzioni bytecode nella JVM e le ciambelle Shapter chiunque può utilizzare le
specifiche per implementare il proprio GBM. No, proprio come le specifiche Gibeon.
C'è anche la disfigurazione della lingua Java che è gelosa di sicuro.
Questo è un altro documento che fornisce una descrizione dettagliata della sintassi e della semantica del linguaggio
Java e può essere considerato probabilmente la risorsa più completa per il linguaggio Java.
Solo l'azione specifica di google per Java sul primo collegamento conterrà collegamenti sia con
i giornalisti sia con il GBM specifico di GBM relativo a Gibeah è un'implementazione concreta delle specifiche GBM e delle
implementazioni GBM più diffuse nei buoni articoli hotspot su IBM Debian.
Ancora una volta, non tutte le implementazioni di GBM dovrebbero seguire le specifiche JVM.
Quindi le specifiche di Gibeon sono come un progetto per una casa.
Quale implementazione JVM è la casa vera e propria.
Infine, la terza nozione relativa a JVM è un'istanza di runtime che è semplicemente un'istanza di
un'implementazione GBM concreta.
Diamo un'occhiata a un esempio.
Diciamo che abbiamo un programma chiamato Hello November, ottieni questo programma usando lo spazio combinato di Jervoise.
Ciao e istanza di Gibeah maltrattata e caricata in memoria.
Quindi questa è l'istanza di runtime JVM.
Poi fatto carica il programma ciao in memoria e poi lo esegue come puoi vedere Il programma non confermato GBM è ora
in memoria.
Quindi ogni obbligo Jahl viene eseguito all'interno dell'istanza di runtime di alcune implementazioni concrete di GBM.
Si noti inoltre che un'istanza di runtime esegue solo un'azione Jalopnik per quanto riguarda le prestazioni.
GBM svolge un ruolo fondamentale nel garantire che Joe funzioni molto velocemente e siamo pronti a discuterne.
Interpretare il bytecode Java è molto più rapido dell'interpretazione del codice sorgente.
E questo perché il tribunale ha un formato compatto ed è già compilato, inoltre sono ottimizzati e, inoltre, per accelerare
ulteriormente l'esecuzione, la maggior parte delle implementazioni GBM eseguono anche qualcosa chiamato just in time.
Completamento Art Jackky.
E così funziona.
Poiché il bytecode viene interpretato, GBM monitora la frequenza in cui ogni pezzo di codice eseguito su
alcuni dei codici viene eseguito più frequentemente di altri e il record frequentemente
uscito viene definito come hotchpotch su hotchpotch assegnato a un sottocomponente di JVM attuale compilatore Jayati compilatore Geddie quindi convertire
questi hotspot in codice macchina.
Su questo codice macchina viene quindi memorizzato nella cache.
Questa è la memoria di Sybrand e in futuro il codice della macchina da scrivere viene eseguito direttamente, con prestazioni molto
più veloci a meno che il codice non sia ancora interpretato dall'interprete di luglio.
Quindi il codice spesso segreto non viene interpretato ogni volta che il codice corrispondente
della cassa è ciò che viene eseguito questa compilazione JRD viene anche definita come completamento dinamico come una compilazione o
il codice macchina viene eseguito dinamicamente in fase di esecuzione, non un completamento dinamico non è definito e Gibeon specifica.
È un dettaglio di implementazione che è una particolare implementazione JVM potrebbe scegliere di non
implementare la compilazione dinamica.
Tuttavia, la maggior parte delle implementazioni di GBM incluso l'hotspot di Oracle e IBM Studium utilizzano il completamento dinamico.
Iniziamo con un semplice esempio per avere un'idea migliore della concorrenza.
Consideriamo che abbiamo questi due metodi, chiamati unbar non alimentari.
Potresti sapere quali sono i metodi se non sai cosa sono.
Sono semplicemente blocchi di codice che possono essere eseguiti qualsiasi numero di volte e in genere rappresentano la logica
di business del software.
E discuteremo i metodi in dettaglio e il prossimo capitolo.
Ora qui consideriamo che la barra del metodo ha cinquanta righe di codice non runtime che il codice corrispondente a queste
50 righe di codice viene interpretato dall'interprete Jola sul corrispondente codice macchina
che viene eseguito.
Ora succede sempre e succede anche la seconda volta e così via e non vedo la pausa in tempo.
Quindi ogni volta che viene interpretato il bytecode corrispondente a ogni riga di codice e viene generato
un codice di spawning machine.
Ora che ha funzionato 4000 volte, il metodo cattivo discord può essere considerato come eseguito frequentemente.
Questo sarebbe stato designato come hotspot e il compilatore GRB avrebbe poi eseguito il kick-in e avrebbe
generato la propria versione di codice macchina di questo metodo e questo movimento è probabilmente una versione ottimizzata del
codice macchina che è stato eseguito finora.
Quindi, come un normale compilatore, il compilatore G-Ride può anche eseguire l'ottimizzazione su questo codice macchina generato
GRB, viene memorizzato nella cache e deve essere eseguito per il tempo impeccabile e senza fronzoli che il codice macchina
cast verrà eseguito direttamente.
Quindi non c'è più un'interpretazione del bytecode corrispondente alle 50 linee di codice in questo metodo,
ma poiché il codice macchina viene eseguito direttamente, verrebbe eseguito molto velocemente proprio come il codice scritto in
C o C ++.
È per questo motivo che Julys considerava quasi come le lingue come il precipizio del CRC.
Ora, se la parola Barmouth è esecutore per dire due dozzine di volte, allora potrebbe innescare
un altro round di ottimizzazione da parte del conduttore Jackky che accelera l'esecuzione.
Non che io sia pazzo.
Potrebbe non essere quello eseguito frequentemente sulle mani potrebbe essere interpretato ogni volta.
Quindi questo è il modo concettualmente in cui il compilatore di agenti funzionerebbe esattamente nel modo in cui è implementato.
Potrebbe variare da un'implementazione JVM a un'altra.
Finalmente ecco un'architettura tipica di un'implementazione JVM che ha diversi componenti.
Qui abbiamo un programma Java chiamato halloed o Java che è compilato in ciao buio e l'esecuzione.
Ciao Doc Plus usando il comando.
John waspish.
Ciao.
Come sappiamo, l'istanza GBM verrà lanciata per la prima volta Gibeah.
Poi in walk sottocomponente chiamato classloader che come dice il nome indica che la classe Hello Doc rispetta il
corso di byte corrispondente e fa Malmedy i codici di byte sono quindi verificati da un
componente chiamato verificatore bytecode per assicurare che il file di classe caricato abbia una struttura interna adeguata e conforme a
le regole del linguaggio del lavoro.
E questo è fondamentale per garantire l'integrità di JVM in quanto i classificatori possono essere scaricati da tutta la
rete.
Come nel caso delle applet, devono essere compresi solo da compilatori cattivi o dannosi.
Una volta che il campo è stato pronto, può essere eseguito in sicurezza dal motore di esecuzione
che in questo caso include decompilatore.
Oltre all'interprete, la spazzatura può apparire come un componente responsabile della gestione automatica della
memoria.
E sappiamo che la gestione automatica della memoria è una delle principali responsabilità di JVM. Il
successivo gestore della sicurezza può essere utilizzato per consentire agli utenti di eseguire un bytecode non affidabile purché il
bytecode non compia operazioni pericolose.
Ad esempio, si potrebbe voler limitare qualsiasi codice byte scaricato dall'accesso al proprio file system su
security manager, in quanto è possibile eseguire il byte court in un ambiente più ristretto chiamato ambiente sandbox.
E infine in cima abbiamo le diverse idee sui dati di runtime che fanno parte della memoria che Gibeah fa confusione.
Lo guardo.
Quindi, all'avvio di JVM, viene ottenuto un blocco di memoria dal sistema operativo sottostante per eseguire i suoi programmi
e le diverse parti di un programma verranno archiviate in queste diverse aree di memoria.
Non parleranno ora di queste aree, ma nella JVM e in questo capitolo Bebel ha
discusso molte di queste aree.
Allo stesso modo discuteremo anche altri componenti come il verificatore bytecode del programma di caricamento e il garbage collector.
Effettivamente e mi piacerebbe davvero usare i programmi demo per ottenere una solida comprensione di questi diversi componenti.
Quindi questo è tutto.
E questa è una panoramica di alto livello di JVM e si può vedere che si tratta di
un software altamente sofisticato che rende i programmi Java eseguiti molto velocemente e in sicurezza e anche in una piattaforma indipendente.
Grazie.