Sul mio Raspberry ho fatto alcuni test sulle prestazioni come CaffeineMark e SciMark con entrambe le JVM. C'è un'enorme differenza di prestazioni tra di loro anche se ho sentito che le differenze sono molto piccole. Ho anche provato a calcolare con numeri mobili e Oracle JDK ha ottenuto un punteggio migliore anche se entrambi dovrebbero supportare l'hard float abi.Perché c'è una differenza di prestazioni su Raspberry pi tra Open e Oracle JDK?
Io uso Linux raspberrypi 3.18.11-v7+
come sistema operativo.
OpenJDK:
java version "1.7.0_79"
OpenJDK Runtime Environment (IcedTea 2.5.5) (7u79-2.5.5-1~deb7u1+rpi1)
OpenJDK Zero VM (build 24.79-b02, mixed mode)
OracleJDK:
java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) Client VM (build 24.0-b56, mixed mode)
SciMark results:
OpenJDK OracleJDK
Composite Score 14.280735577363213 || 32.24948180361924
FFT (1024) 9.482866845055302 || 26.447121360843663
SOR (100x100) 27.14938943220646 || 59.68022533004399
Monte Carlo 3.6298604956147384 || 10.561671865446971
Sparse matmult 15.603809523809524 || 26.64931580928407
LU (100x100) 15.53775159013005 || 37.90907465247749
ho usato un programma che conta un galleggiante ad intervalli di 0,1 a 600000 Ho cercato di verificare le prestazioni di JVM da manipolazione galleggianti.
OpenJDK: 257ms
OracleJDK: 151ms
0.1 gradini 1200000:
OpenJDK: 457ms
OracleJDK: 263ms
public class Testing {
/**
* @param args
*/
public static long Test()
{
float counter=0.0f;
long startTime = System.currentTimeMillis();
while (counter <= 1_200_000.0f)
{
counter += 0.1f;
}
return System.currentTimeMillis() - startTime;
}
public static void main(String[] args){
System.out.println(Test());
}
}
Ho provato i miglioramenti citati da SlipperySeal e mettere il prova nel ciclo. Ho anche provato ad usare il compilatore c2 ma i risultati non erano diversi.
Si prega di quantificare. Pubblica alcuni numeri prestazionali misurati. –
Inoltre, si prega di inserire le versioni che si stanno utilizzando di entrambi jdk –
https://blogs.oracle.com/jtc/entry/comparing_jvms_on_arm_linux questo ha alcuni anni ma sembra che Oracle abbia appena creato un JIT migliore.Inoltre, potresti voler inserire l'intero test in un ciclo, perché le JIT non sempre danno il via immediatamente. Possono essere eseguiti in modalità interpretata fino a quando si verifica un certo numero di cicli prima di diventare candidati per JIT. – slipperyseal