Na mojej malinowej zrobiłem kilka testów wydajności, takich jak CaffeineMark i SciMark z oboma JVM. Istnieje ogromna różnica w wydajności między nimi, chociaż słyszałem, że różnice są bardzo małe. Próbowałem także obliczać liczbami zmiennoprzecinkowymi, a Oracle JDK uzyskał lepszy wynik, mimo że oba powinny obsługiwać dysk twardy abi.Dlaczego istnieje taka różnica w wydajności Raspberry pi między Open a Oracle JDK?
Używam jako systemu operacyjnego Linux raspberrypi 3.18.11-v7+
.
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
użyłem programu, który zlicza pływaka w 0,1 kroków 600000 próbowałem do testowania wydajności JVM na obsługę pływaków.
OpenJDK: 257ms
OracleJDK: 151ms
0,1 kroki 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());
}
}
że próbował ulepszenia wymienione z SlipperySeal i umieścić przetestuj w pętli. Próbowałem również użyć kompilatora c2, ale wyniki nie były różne.
Proszę oszacowania. Opublikuj niektóre zmierzone liczby wyników. –
Proszę również umieścić wersje, których używasz zarówno jdk –
https://blogs.oracle.com/jtc/entry/comparing_jvms_on_arm_linux to kilka lat, ale wygląda na to, że Oracle właśnie ulepszyło JIT.Możesz również umieścić cały test w pętli, ponieważ JIT nie zawsze zaczynają od razu. Mogą być uruchamiani w trybie interpretacji, dopóki pewna liczba pętli nie wystąpi, zanim zostaną kandydatami do JITing. – slipperyseal