Perché Java Platform Independent Language?

Pubblicato: 2021-02-08

Sommario

introduzione

Java ha guadagnato un'enorme popolarità tra tutti gli altri linguaggi di programmazione sin dalla sua nascita. E la ragione di una risposta così immensa è la capacità di fornire caratteristiche uniche. La sintassi Java sarà quasi simile a c++ ma fornisce funzionalità molto lontane rispetto a c++.

La disponibilità della programmazione orientata agli oggetti (OOP) ha fatto distinguere java da tutti gli altri linguaggi rimanenti all'epoca. Java è stato sviluppato per utilizzare OOP al suo interno ed è stato uno dei motivi per essere un linguaggio più utilizzato. Questo concetto aumenta la riutilizzabilità, l'esecuzione senza interruzioni. In questo momento, potrebbe esserci una domanda nella nostra mente "perché dovremmo usare un oggetto?".

Gli oggetti in Java sono simili alle strutture nel linguaggio c, dove stiamo legando insieme metodi e variabili simili. Insieme a ciò Java fornisce anche astrazione, incapsulamento, ereditarietà e polimorfismo che incoraggia l'utente a implementare oggetti.

Java svolge un ruolo dominante in molti domini come lo sviluppo di app, lo sviluppo web, la creazione di strumenti software. Ha anche un ricco numero di librerie che semplificano le cose. Inoltre, la disponibilità dell'IDE gioca un ruolo cruciale nell'attirare l'attenzione degli sviluppatori. IDE come Eclipse, IntelliJ, NetBeans sono spesso utilizzati da molti sviluppatori.

Bene, ora veniamo alla nostra discussione.

Ma prima di tutto, cosa significa indipendenza dalla piattaforma? Per ottenere una risposta a questa domanda, dobbiamo sapere cosa succede quando compiliamo un codice.

Compilazione di un codice

Ogni volta che scriviamo un codice, seguiamo le sintassi di un linguaggio di programmazione, che avrebbe una discreta leggibilità. E contiene poche parole, frasi, nomi di variabili, nomi di metodi, ecc. Tutte queste cose sono considerate testo leggibile e comprensibile dall'uomo.

Quindi una macchina utilizza un compilatore per convertire il codice sorgente in un codice leggibile dalla macchina che viene anche definito linguaggio a livello di macchina. Il compilatore costruisce il codice a livello macchina in una presentazione specifica in modo che possa essere facilmente compreso dalla CPU e quindi eseguirlo senza problemi.

Questa costruzione del linguaggio a livello di macchina differisce per ogni linguaggio di programmazione e ogni sistema operativo. Ad esempio, c/c++ genera un file .exe che non è lo stesso per due macchine se sono in esecuzione su un sistema operativo diverso.

E qui sorge il problema!

Quando un linguaggio a livello di macchina differisce per ciascun sistema operativo, non è possibile eseguire un codice compilato in una macchina diversa in una nuova macchina, a meno che entrambi i sistemi non operino sullo stesso sistema operativo. Sembra una merda per molti programmatori e sviluppatori.

Ma Java rende le cose più facili e Java ha una soluzione per questo. Iniziamo.

Java è indipendente dalla piattaforma

Quindi cosa succede quando compiliamo il codice in Java?

Ogni volta che inseriamo un'istruzione "javac filename.java" o compiliamo un codice in java, javac compila il codice. E crea un codice intermedio chiamato Byte Code.

È qui che java fa la differenza tra tutti i diversi linguaggi di programmazione. Crea un file .class, che è considerato byte code. Mentre linguaggi come c/c++ creeranno un codice eseguibile in modo nativo quando vengono compilati e quindi li renderanno dipendenti dalla piattaforma.

Aspetta, è troppo presto per festeggiare. Questo codice byte non è eseguibile. Abbiamo bisogno di un traduttore per eseguire questo codice byte. E JVM fa questo lavoro. Generalmente, JVM risiede nella memoria principale del nostro computer. Java Virtual Machine funge da interprete e quindi esegue il codice byte generato da javac.

E ora che abbiamo finito, il nostro codice viene eseguito con successo.

Quindi, come farà Java a gestire tutto da solo?

E la risposta sarebbe, è a causa della JVM. Il codice byte generato dalla compilazione del codice sorgente verrebbe eseguito in qualsiasi sistema operativo, ma la JVM presente in una macchina differisce per ogni sistema operativo. Ed è così che java è considerato un linguaggio di programmazione indipendente dalla piattaforma.

Per capirlo correttamente, comprendiamo l'architettura e il funzionamento della JVM.

Architettura JVM

JVM fa parte dell'ambiente di runtime java ed è responsabile della conversione di un file .java in un file .class. Quando compiliamo un codice java, JVM chiama il metodo principale nel codice sorgente.

Architettura JVM

Caricatore di classi

È un sottosistema nella macchina virtuale Java. Carica il file .class, controlla se ci sono eccezioni ed è il motivo di poche eccezioni di runtime. E dopo aver verificato che alloca la memoria per le variabili e i metodi presenti, assegna valori di default a variabili e array. Esegue anche i metodi statici o le variabili presenti nel codice.

Ci sono 3 caricatori di classi integrati inJVMm, caricatore di classi bootstrap, caricatore di classi di estensione, caricatore di classi dell'applicazione.

Aree di memoria in JVM

Area metodo/classe

Memorizza informazioni come nomi di classi, nomi di metodi, variabili. È una risorsa condivisa per tutti i metodi e le variabili in una classe.

Mucchio

Memorizza le informazioni di tutti i dati memorizzati nell'area dell'heap.

Stack di lingua JVM

Memorizza le informazioni in blocchi chiamati anche stack-frames/frames, che memorizza le informazioni correnti quando c'è una chiamata di funzione, memorizza variabili locali, svolge anche un ruolo dominante nella gestione dei thread.

Registro PC

Memorizza l'indirizzo dell'istruzione che è attualmente in esecuzione. È utile in una situazione di esecuzione multi-thread.

Stack di metodi nativi

Memorizza tutte le informazioni dei metodi nativi utilizzati.

Motore di esecuzione

Il motore di esecuzione eseguirà il byte code e rimuoverà la memoria allocata agli oggetti che sono irraggiungibili o non referenziati. L'interprete nel motore di esecuzione eseguirà il codice byte leggendolo in un flusso e interpretandolo riga per riga.

Ha anche una parte interessante chiamata compilatore JIT (Just In Time Compiler), in cui crea un codice eseguibile nativo per i metodi, quindi se ci sono più chiamate di funzione, la JVM non deve interpretarlo di nuovo, piuttosto utilizzare direttamente il codice eseguibile nativo. Quindi migliora le prestazioni di esecuzione.

Interfaccia del metodo nativo

Questa interfaccia è usata da java per interagire con le applicazioni implementate in diversi linguaggi come C/C++. L'interazione è bidirezionale, in cui la JVM può chiamare tali applicazioni o può essere chiamata da tali applicazioni.

Librerie di metodi nativi

Tiene traccia delle librerie della lingua madre, che possono essere utilizzate dal motore di esecuzione.

Ora che abbiamo compreso l'architettura della JVM, torniamo alla nostra discussione. Quindi questa JVM è diversa per i diversi sistemi operativi, ma l'output generato da tali JVM sarà lo stesso per lo stesso codice byte fornito.

Leggi anche: Idee e argomenti del progetto Java

Impara i corsi di sviluppo software online dalle migliori università del mondo. Guadagna programmi Executive PG, programmi di certificazione avanzati o programmi di master per accelerare la tua carriera.

Conclusione

Abbiamo esaminato alcune caratteristiche uniche di Java, capito cosa succede quando compiliamo codice in linguaggi come C/C++, compreso la differenza tra codice eseguibile in modo nativo e codice byte. Abbiamo spiegato perché java è considerato un linguaggio indipendente dalla piattaforma, abbiamo capito che JVM è la ragione dietro l'indipendenza dalla piattaforma di java. Abbiamo dato un'occhiata all'architettura JVM per una migliore comprensione.

Ora che sei consapevole del motivo per cui java è indipendente dalla piattaforma, esplora altre caratteristiche uniche di java e inizia a utilizzarle!

Se sei interessato a saperne di più su Java, lo sviluppo di software full-stack, dai un'occhiata al programma Executive PG di upGrad & IIIT-B in Full-stack Software Development, progettato per i professionisti che lavorano e offre oltre 500 ore di formazione rigorosa, 9+ progetti e incarichi, stato di Alumni IIIT-B, progetti pratici pratici e assistenza sul lavoro con le migliori aziende.

Quali sono i vantaggi di Java rispetto ad altri linguaggi?

Ci sono molti vantaggi di Java rispetto ad altri linguaggi. Cominciamo con il vantaggio più alto, Java è indipendente dalla piattaforma. Il codice Java può essere eseguito su qualsiasi piattaforma hardware, sistema operativo e browser. Può funzionare su qualsiasi dispositivo. Ciò significa che una volta che hai scritto la tua applicazione in Java, puoi eseguirla su qualsiasi dispositivo. E 'così semplice! Inoltre, una volta scritto il codice, è molto facile eseguire il debug e correggere i bug. Infine, Java è orientato agli oggetti. Ciò significa che è necessario utilizzare programmi e codice più piccoli. Questo renderà più facile lavorare con il tuo codice. Se sono necessarie modifiche, il codice è meno soggetto a errori. Ha funzionalità come Multithreading, Gestione della memoria, Indipendente dalla piattaforma, Sicurezza, Macchina virtuale, ad esempio bytecode, Framework di raccolta, Garbage Collector, Architettura a strati, ecc.

Perché Java è indipendente dalla piattaforma?

Java è indipendente dalla piattaforma perché utilizza una macchina virtuale. Il linguaggio di programmazione Java e tutte le API sono compilati in bytecode. I bytecode sono effettivamente indipendenti dalla piattaforma. La macchina virtuale si occupa delle differenze tra i bytecode per le diverse piattaforme. I requisiti di runtime per Java sono quindi molto piccoli. La macchina virtuale Java si occupa di tutti i problemi relativi all'hardware, in modo che nessun codice debba essere compilato per hardware diverso.

Che cos'è la raccolta automatica dei rifiuti in Java?

La Garbage Collection automatica è una tecnica di Garbage Collection in cui il Garbage Collector viene eseguito automaticamente, senza che il programmatore debba scrivere codice per esso. In Java, la raccolta dei rifiuti viene eseguita mettendo la Java Virtual Machine in una modalità speciale. Il Garbage Collector verrà eseguito quando vede un'opportunità per farlo. Alcuni Garbage Collector utilizzano un approccio stop-the-world e la Java Virtual Machine deve interrompere l'esecuzione del programma per eseguire la Garbage Collection. Garbage Collection non è un concetto facile, ma una volta ottenuto, non si può guardare indietro. E la garbage collection di Java è una delle più facili da capire.