Visita il nuovo sito https://www.markonetools.it/java-virtual-machine-info-generali/
Il linguaggio di programmazione Java è forse uno dei più diffusi o comunque uno dei più famosi nel panorama attuale. Fi introdotto intorno agli inizi degli anni '90 da Sun Microsystems.
Le principali caratteristiche di Java sono:
Quando si compila un programma Java si ottiene un file con estensione .class il quale è indipendente dalla piattaforma e per essere eseguito ha bisogno di una Java Virtual Machine (JVM) che è l'infrastruttura tra l'applicazione Java e il sistema operativo.
IBM i dispone di diverse versioni di Java Virtual Machine (JVM). Ogni versione di sistema operativo può avere JVM diverse.
Il prodotto interessato ha codice 57xx-JV1. Le varie opzioni di questo prodotto identificano le diverse versioni di JVM.
Per esempio in IBM i 7.1 si potrebbe avere una situazione di questo tipo (comando DSPSFWRSC
):
5761JV1 *BASE IBM Developer Kit per Java
5761JV1 *8 J2SE 5.0 32 bit
5761JV1 *9 J2SE 5.0 64 bit
5761JV1 *11 Java SE 6 32 bit
5761JV1 *12 Java SE 6 64 bit
Le versioni di JVM a 32-bit sono disponibili a partire dalla versione IBM i V5R4.
La prima versione di JVM disponibile su IBM i risale alla versione V4R2 (circa 1998) ed era a 64-bit.
Le versioni di JVM a 64-bit vengono denominate "Classic JVM".
Invece le versioni a 32-bit sono denominate "IBM technology for Java".
Le versioni a 32-bit sono eseguite nell'ambiente PASE (Portable Application Solutions Environment), quindi è richiesto che sia anche installata l'opzione 33 del prodotto 57xxSS1 (Portable App Solutions Environment).
I prodotti citati 57xxJV1 e 57xxSS1 opz. 33 sono gratuiti.
Avendo più versioni di JVM installate su IBM i è importante saper scegliere quale versione eseguire. Il controllo della versione di JVM che verrà avviata dipende dalla variabile di ambiente JAVA_HOME.
Per visualizzare i valori delle variabili di ambiente attualmente impostate si può usare il comando
WrkEnvVar level(*job)
: visualizza le variabili ambiente a livello del job corrente
WrkEnvVar level(*sys)
: visualizza le variabili ambiente a livello di sistema
Per impostare p.es. la JVM J2SE 5.0 a 32 bit a livello del lavoro corrente si può usare il comando:
ADDENVVAR ENVVAR(JAVA_HOME) VALUE('/QOpenSys/QIBM/ProdData/JavaVM/jdk50/32bit') LEVEL(*JOB)
Ovvero si imposta nella variabile JAVA_HOME il percorso dell'IFS ove è installata la JVM.
Per determinare quale sia la versione di JVM correntemente in esecuzione in un job si può aprire una sessione qshell
StrQsh
e digitare il comando
java -version
l'output del comando dopo qualche istante di attesa può essere
java version "1.6.0"
Java(TM) SE Runtime Environment (build pap3260sr16fp41-20170215_04(SR16 FP41))
IBM J9 VM (build 2.4, JRE 1.6.0 IBM J9 2.4 OS/400 ppc-32 jvmap3260sr16fp41-20170215_04 (JIT enabled, AOT enabled)
J9VM - 20161215_329869
JIT - r9_20160630_120368
GC - GA24_Java6_SR16_20161215_0927_B329869)
JCL - 20170215_01
Oppure molto più semplicemente eseguire il comando RUNJVA CLASS(*VERSION)
.
In generale è preferibile usare una JVM a 32-bit che ha un minore impatto sulle prestazioni, sopratutto a livello di memoria. Però lo svantaggio è che l'applicazione potrà avere al massimo 4 Gb di heap size (decurtato della memoria utilizzata dalla JVM stessa a disposizione dell'applicazione rimangono circa 3 Gb).
La JVM a 64-bit invece ha un limite di 240 Gb.
Ogni versione di sistema operativo IBM i può avere una JVM che viene avviata per default diversa:
Come si può vedere tutte le release hanno come JVM di default una versione a 32 bit tranne la V5R4.
Per impostare anche su una V5R4 come una JVM di default a 32 bit si può usare il comando:
ADDENVVAR ENVVAR(JAVA_HOME) VALUE('/QOpenSys/QIBM/ProdData/JavaVM/jdk50/32bit/jre/lib/ext') LEVEL(*SYS)
JVM in esecuzione
Per visualizzare i job che stanno utilizzando una JVM si può usare il comando WRKJVMJOB
.
Dall'elenco dei lavori si può fare opzione 9 su un lavoro per visualizzare le informazioni relative alla JVM tra cui la versione.
P.es.
Visualizz. informazioni raccolta dati inutili
Sistema: Sxxxxxx
Lavoro . . . . . : QSRVMON PID . . . . . . : 501
Utente . . . . . : QSYS JDK . . . . . . : 1.6.0
Numero . . . . . : 229738 Bit . . . . . . : 32
Bibliografia