Come utilizzare Classe di applicazione-Funzione di condivisione dei dati di java 10?


Ho letto sui CD in Oracle doc https://docs.oracle.com/javase/8/docs/technotes/guides/vm/class-data-sharing.html

Quello che ho capito è che i file di classe di sistema necessari per caricare la jvm vengono analizzati, verificati e quindi archiviati in un archivio in jre/lib/[arch]/client/classes.jsa. Inoltre forniscono anche la loro mappatura della memoria per jvm, quindi jvm mappa direttamente la memoria in base alle informazioni di mappatura fornite nell'archivio. Quindi questo riduce il sovraccarico del caricamento della classe ogni volta che viene avviata un'istanza jvm. Per favore correggimi se era sbagliato.

Venendo ora a java 10, come posso ottenere questo per il mio codice dell'applicazione ? In secondo luogo, il codice dell'applicazione completo sarebbe idoneo per i CD o ci sono alcune restrizioni?

Author: Shubham Kadlag, 2018-06-01

2 answers

Ci sono tre passaggi essenziali per creare e utilizzare un archivio con application class-data (per maggiori dettagli, leggi il mio post sulla condivisione dei dati di application class):

  1. Creazione di un elenco di classi da includere nell'archivio:

    java -XX:+UseAppCDS
        -XX:DumpLoadedClassList=classes.lst -jar app.jar
    
  2. Creazione di un archivio:

    java -XX:+UseAppCDS -Xshare:dump 
        -XX:SharedClassListFile=classes.lst -XX:SharedArchiveFile=app-cds.jsa --class-path app.jar
    
  3. Utilizzo dell'archivio:

    java -XX:+UseAppCDS -Xshare:on 
        -XX:SharedArchiveFile=app-cds.jsa -jar app.jar
    

Tieni presente quanto segue:

  • non è possibile utilizzare caratteri jolly o JAR esplosi per il percorso della classe quando si crea l'archivio
  • il percorso della classe utilizzato per avviare l'applicazione deve avere come prefisso quello utilizzato per creare l'archivio
  • in caso di problemi, utilizzare -Xlog:class+load (più su -Xlog) per ottenere maggiori informazioni
 7
Author: Nicolai, 2018-06-01 12:50:20

Il JEP per AppCDS ha l'esempio mostra l'involucro come aggiungere le classi di applicazioni all'archivio condiviso. Per quanto riguarda le restrizioni, ce ne sono poche:

  1. Classi rette (.classe) presente nella directory sul percorso della classe impossibile aggiungere all'archivio condiviso. Vedi questo thread .
  2. Classi caricate da custom impossibile aggiungere i caricatori di classe all'archivio condiviso. Vedi questo thread .

Ci sono altre considerazioni pratiche di cui essere consapevoli quando utilizzo di CD / APPCD, come ad esempio:

  1. Se si aggiornano i file jar sul file system, sarà necessario ricreare l'archivio condiviso.
  2. Se si utilizzano agenti Java o JVMTI che modificano/ri-trasformano/ridefiniscono il file di classe in fase di esecuzione, l'archivio condiviso non sarà utile in quanto le classi verranno caricate dal disco poiché gli agenti necessitano di dati classfile effettivi che credo non siano memorizzati nell'archivio condiviso.

Un altro articolo bello e dettagliato su CD e AppCDS è https://simonis.github.io/cl4cds/.

L'autore dell'articolo ha anche scritto uno strumento che consente la condivisione di classi di applicazioni anche se vengono caricate da caricatori di classi personalizzati.

Se siete interessati ad usare i CD, potete anche provare OpenJ9 JVM che ha questa caratteristica da molto tempo ed è molto più maturo e completo. Per saperne di più qui.

 3
Author: Ashutosh, 2018-06-03 04:48:19