Ultimo aggiornamento: 12-Gen-2019

Java Virtual Machine – info generali

Il linguaggio di programmazione Java è forse uno dei più diffusi o comunque uno dei più famosi nel panorama attuale. Fu introdotto intorno agli inizi degli anni ’90 da Sun Microsystems.

Le principali caratteristiche di Java sono:

  • linguaggio di programmazione di alto livello
  • linguaggio di programmazione orientato agli oggetti
  • linguaggio di programmazione indipendente dalla piattaforma

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.

JVM di default

Ogni versione di sistema operativo IBM i può avere una JVM che viene avviata per default diversa:

  • V5R4 e V5R4M5: IBM Classic JDK 1.4 (57xxJV1 Option 6) (ovvero una JVM a 64-bit). Percorso: /QIBM/ProdData/Java400/jdk14
  • 6.1 e 6.1.1: IBM Technology for Java JDK 5.0 32-bit (57xxJV1 Option 8). Percorso: /QOpenSys/QIBM/ProdData/JavaVM/jdk50/32bit
  • 7.1: IBM Technology for Java JDK 6.0 32-bit (57xxJV1 Option 11). Percorso: /QOpenSys/QIBM/ProdData/JavaVM/jdk60/32bit
  • 7.2: IBM Technology for Java JDK 7.1 32-bit (57xxJV1 Option 14). Percorso: /QOpenSys/QIBM/ProdData/JavaVM/jdk71/32bit
  • 7.3: IBM Technology for Java JDK 8.0 32-bit (57xxJV1 Option 16). Percorso: /QOpenSys/QIBM/ProdData/JavaVM/jdk80/32bit

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