1 / 28

Java Virtual Machine

Java Virtual Machine. Massa Laura Mela Enrica. La macchine astratte. La tendenza comune nella nuova tecnologia software è quella di conseguire la portabilità dei programmi: dal programma compilato in una forma intermedia in una definizione astratta di macchina virtuale. Situazione ideale.

kevina
Download Presentation

Java Virtual Machine

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java Virtual Machine Massa Laura Mela Enrica

  2. La macchine astratte • La tendenza comune nella nuova tecnologia software è quella di conseguire la portabilità dei programmi: dal programma compilato in una forma intermedia in una definizione astratta di macchina virtuale.

  3. Situazione ideale Front-end indipendente dall’hardware Back-end indipendente dal linguaggio del SOURCE CODE

  4. Linguaggio intermedio • Molte di queste rappresentazioni di linguaggi intermedi sono basate sulle macchine astratte a stack • P-code: particolare rappresentazione inventata cone forma intermedia per ETH compilatori Pascal( diventata poi dominante come codice macchina per il sistema UCSD Pascal)

  5. Programma codificato per una macchina astratta interprete compilatore Codice eseguibile (dipende dall’architettura) Emula la macchine astratta lento Codice più denso

  6. UCSD usa interprete • codice molto intenso e compatto • primi usi su microcomputer • linguaggi ad alto livello su microcomputer • la portabilità del sistema di linguaggio su una nuova macchina si riduce alla creazione di un nuovo interprete.

  7. Architecture Neutral Distribuition Form (ANDF) • Idea di base: distribuire programmi in una forma intermedia e completare il compito della compilazione durante l’installazione. • Nella forma intermedia, durante la compilazione, tutti gli accessi ad indirizzi sono lasciati in forma simbolica

  8. Macchine astratte • Nei tardi ’90 Sun Microstystem distribuisce il sistema di linguaggio Java, basato su una macchina astratta a stack, e come l’ANDF usa gli accessi simbolici • Nel 2000 Microsoft svela una nuova tecnologia basata sul vasto mondo del WWW. Questa tecnologia, anch’essa basata sulla macchina astratta a stack, diventa nota come .NET System

  9. Introduzione JVM • Macchina astratta su cui vengono eseguite le istruzioni del linguaggio Java • Bytecode • Basata su uno stack • Il suo compito è quello di interpretare un particolare formato di file, class file format

  10. JVMClass file format Altre informazioni Tavola dei simboli Bytecode Class file format

  11. Tipi di dato Primitivi Di riferimento Numerici Di ritorno Classi Interfacce Vettori

  12. Elenco dei tipi numerici • byte: valori con segno, su 8 bit, in complemento a 2 • short: valori con segno, su 16 bit, in complemento a 2 • int: valori con segno, su 32 bit, in complemento a 2 • long: valori con segno, su 64 bit, in complemento a 2 • char: valori senza segno, su 16 bit, in conformità allo standard Unicode versione 1.1.5 I tipi numerici in virgola mobile sono: • float: valori in singola precisione, su 32 bit • double: valori in doppia precisione, su 64 bit

  13. Memorizzazione dei valori: nozione astratta di “parola” • Le dimensioni delle aree di memoria della JVM sono definiti in termini di parole e non di numero effettivo di bit

  14. Area metodi Aree dati Metodo corrente Classe1 pc Classe2 Frame corrente Op stack Var locali Heap Java stack oggetti vettori Thread

  15. Program counter • Contiene l’indirizzo dell’istruzione in esecuzione • Unico per ogni thread • Il registro PC ha le dimensioni di una parola

  16. Stack • Ogni thread ha uno stack privato, creato insieme al thread • Contiene i frame • Mantiene le variabili locali e i risultati parziali • Dimensioni fissi e variabili dinamicamente

  17. Heap • Area di memoria condivisa fra tutti i thread • Vi sono allocati oggetti e vettori • Creato con l’attivazione della JVM ed è gestito dal garbage collector • Dimensione fissa o dinamica(espanso/contratto)

  18. Area dei metodi • Condivisa fra tutti i thread • Contiene le strutture associate ad ogni classe(constant pool, dati dei campi e dei metodi) • Creata con l’attivazione della JVM • Dimensione fissa o dinamica(espanso/contratto)

  19. Constant pool • Rappresentazione runtime della tavola constant_pool • Contiene diversi tipi di costanti • Al caricamento di una classe o di un’interfaccia la JVM crea la corrispondente constant_pool

  20. Frame • Memorizzazione dei dati e dei risultati parziali • Dynamic linking • Per ogni metodo invocato viene creato un frame • Viene chiamato frame corrente, il frame del metodo in esecuzione • Il frame è locale al thread che l’ha creato

  21. Frame Vettore di parole (variabili locali) Stack degli operandi Riferimento al tipo di Metodo corrente

  22. Frame • Ogni frame ospita un vettore di parole contenente i valori delle variabili locali • Le istruzioni della JVM estraggono i valori su cui operare dallo stack delgli operandi del frame corrente • Ogni frame contiene un riferimento al tipo del metodo corrente nel constant pool (supporto del Dynamic Linking)

  23. Esecuzione • La JVM invoca il metodo main della classe specificata • La classe a questo punto viene 1)Caricata 2)Linkata 3)Inizializzata • Il metodo main deve essere dichiarato public, static, void

  24. Esecuzione Caricamento Linking Forma binaria oggetto Forma binaria Combinazione con lo stato corrente della JVM Inizializzione Esecuzione degli Inizializzatori statici

  25. Caricamento • La JVM tenterà di eseguire il metodo main • Visto che la classe non è stata ancora caricata la JVM utilizza il ClassLoader per trovare la rappresentazione binaria della classe

  26. Linking • Il processo di linking include: verifica, preparazione e risoluzione • Verifica: controlla che la rappresentazione della classe sia conforme alle specifiche, e che il bytecode sia conforme alle regole semantiche della JVM. • Preparazione: alloca le strutture dati, ad esempio le tavole dei metodi,e crea e inizializza i campi statici di una classe ai valori di default • Risoluzione: controlla che riferimenti simbolici ad altre classi ed interfacce siano corretti.

  27. Inizializzazione • Esecuzione di tutti gli inizializzatori della classe • Se la classe possiede una superclasse a sua volta deve essere caricata, linkata e inizializzata • Nel caso la classe implementi un’interfaccia questa non deve essere inizializzata

  28. Insieme delle istruzioni In esecuzione l’accesso al constant pool per risolvere i riferimenti è oneroso. Ottimizzazione: istruzioni veloci (quick).

More Related