Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Scelta del profilo e della JVM

Guida alla scelta di una JVM e di un profilo che permetta di includere solo librerie Java necessarie alla realizzazione di un sistema embedded
Guida alla scelta di una JVM e di un profilo che permetta di includere solo librerie Java necessarie alla realizzazione di un sistema embedded
Link copiato negli appunti

Nell'ambito della realizzazione di un applicazione embedded è fondamentale poter scegliere un profilo che permetta di includere solo librerie Java di cui abbiamo effettivamente bisogno limitando cosi quello che viene indicato con il termine di static footprint (memoria fisica su disco del device richiesta dall'applicativo). Una volta determinato il profilo adatto per la nostra applicazione, dobbiamo scegliere la tipologia di Java Virtual Machine che intendiamo utilizzare valutando i requisiti di performance richiesti.

Determinare il profilo

Scegliendo un particolare profilo, possiamo configurare, a seconda del dispositivo e dei requisiti software, una JRE completa oppure limitare lo spazio su disco richiesto dall'applicazione restringendo l'utilizzo dei packages delle API Java a quelli strettamente richiesti dall'applicazione stessa.

I profili messi a disposizione dalla piattaforma Oracle Java SE Embedded sono i seguenti:

  • Compact1 Profile APIs;
  • Compact2 Profile APIs;
  • Compact3 Profile APIs;
  • Full JRE APIs.

Il profilo Compact1 fornisce una JVM minimale che richiede soltanto uno spazio di 12MB per la sua installazione. Oltre alle API fondamentali, in questo profilo abbiamo a disposizione secure sockets layer (SSL) e logging e scripting language (incluso Javascript).

Il profilo Compact2 porta i requisiti di spazio ad un valore di 17MB includendo le API:

  • Remote Method Invocation (RMI, JSR 66);
  • Java API for XML Processing (JAXP, JSR 280);
  • Java Database Connectivity (JDBC, JSR 169).

Il profilo Compact3 estende il Compact2 aggiungendo tools di debugging (serviceability), servizi di naming, API di compilazione e maggior sicurezza. Il Compact3 non è però
utilizzabile con una JVM minimale. Con il profilo Full JRE APIs abbiamo l'aggiunta delle API Desktop, Web services e CORBA con il supporto alle opzioni da riga di comando Java Flight Recorder.

Sebbene quest'ultimo profilo contenga tutte le classi Java SE, è introdotta un'ottimizzazione per la minimizzazione dello spazio di memoria richiesto portando cosi, una Oracle Java SE Embedded JRE completa, ad essere sostanzialmente di dimensioni inferiori (50MB totali circa) rispetto ad una classica Java SE JRE.

Un'applicazione Java con jdeps

Per la determinazione del profilo più adatto, si utilizza il tool jdeps.Per illustrare l'utilizzo di jdeps, realizziamo una semplice applicazione Java.

public class HtmlEmbeddedApp {
  public static void main (String args[]) {
    System.out.println("Questa è la mia prima applicazione embedded!");
  }
}

Compiliamo l'applicazione da riga di comando:

javac HtmlEmbeddedApp.java

Ed utilizziamo jdeps sul file .class generato:

jdeps -P HtmlEmbeddedApp.class

Ottenendo un risultato simile al seguente:

HtmlEmbeddedApp.class -> /net/test11.us.example.com/export/java-re/jdk/8/ea/b124/binaries/linux-i586/jre/lib/rt.jar
<unnamed> (HtmlEmbeddedApp.class)
-> java.io    compact1
-> java.lang  compact1

questo output ci informa che il profilo compact1 è il profilo minimo richiesto dall'applicazione.

La JVM

Una Java Virtual Machine è il cuore di un Java Runtime Environment. Una JVM carica, verifica ed esegue codice applicativo considerando le librerie necessarie alla sua esecuzione.

Una JVM può eseguire codice interpretando direttamente il bytecode, oppure compilare blocchi di bytecode frequentemente utilizzati, in codice macchina specifico della piattaforma sottostante. I blocchi vengono successivamente posti in una cache per velocizzare cosi l'esecuzione delle applicazioni.

Una JVM gestisce l'allocazione, ed il recupero di dati dalla memoria dinamica, attraverso un'applicazione nota con il nome di garbage collector. All'interno del software Oracle Java SE Embedded abbiamo a disposizione tre possibili tipologie di JVM: minimal, client o server.

Con una JVM minima il requisito fondamentale è minimizzare lo spazio richiesto dall'applicativo eliminando tutte le API non necessarie al suo funzionamento. Questa configurazione ha un singolo garbage collector seriale e non è dotata di serviceability.

Una JVM minimale non supporta tutte le opzioni del java launcher. Un JVM client è una Java JVM completa ottimizzata per la velocità di risposta. Questa JVM avvia e compila applicazioni molto velocemente utilizzando meno memoria di una JVM server.

La JVM client è inoltre dotata di opzioni per la garbage collection e supporta il debugging e il profiling. Una JVM server è funzionalmente identica ad una JVM client ma è pensata ed ottimizzata per applicazioni che rimangono in esecuzione per molto tempo.

Caratteristica di quest'ultima JVM è quella dell'utilizzo di un maggiore quantitativo di memoria rispetto ad una JVM client e di una compilazione ed avvio più lento delle applicazioni. Quest'ultima carattetistica è bilanciata da un'esecuzione delle applicazioni estremamente più veloce grazie alla creazione di codice ottimizzato.

Ti consigliamo anche