Dziś mam dla Was kolejną część wpisu na temat wydajności języków programowania. W poprzednim porównywałem języki skryptowe (PHP i Python-a), które możemy wykonywać bez kompilacji. Do sparingu chcę jednak dołączyć jeszcze kilku zawodników. Dziś na ring wejdzie więc Java.

Do testów wykorzystałem 3 wersje JVM w dwóch implementacjach.

Miejsce 5 – Java 1.6 (icedtea-bin-6)

IcedTea jest implementacją OpenJDK, wykorzystującą otwarte narzędzia oraz zależności do budowy tego silnika. W środowisku Gentoo Linux stanowi główną maszynę wirtualną obsługującą technologię Java w wersji 1.6 oraz 1.7.

Badana przeze mnie wersja była 64-bitowa a dokłada wersja pakietu to:

Wydajność języków programowania java 1.6 java 1.7 java 1.8

Java 1.6 zajęła 5 miejsce w zestawieniu, ponieważ szybkość wykonywania kodu była znacznie większa od poprzedników – PHP i Pythona. Czas obliczenia 30 000 liczb pierwszych to – w przypadku Java 1.6 (icedtea-bin-6) – 75,55 sekundy.

Wydajność języków programowania w ujęciu Javy jest o wiele lepsza niż w przypadku PHP i Pythona.

Miejsce 4 – Java 1.7 (icedtea-bin-7)

Kolejne miejsce w rankingu zajmuje nieco nowsza wersja implementacji OpenJDK z numerkiem 1.7:

Wydajność języków programowania java 1.6 java 1.7 java 1.8

Java 1.7 swoje obliczenia wykonała w 75,43 sekundy, de facto mieszcząc się w granicach błędu statystycznego w porównaniu z Java 1.6. Wynik jest więc równie zadowalający jak poprzedniczki.

Miejsce 3 – Java 1.8 (oracle-bin-8)

Java 1.8 w wersji Oracle jest doskonałym przykładem tego, że Open Source może być równie wydajny co oprogramowanie komercyjne. Testowane środowisko to binarna dystrybucja Java HotSpot 1.8.20:

Wydajność języków programowania java 1.6 java 1.7 java 1.8

Dokładnie ten sam kod Java 1.8 wykonała w czasie 75,26 sekundy, również mieszcząc się w granicy błędu statystycznego w porównaniu z poprzednikami. W przypadku Java 1.8 zaobserwowałem jednak znaczący wzrost pamięci podczas wykonywania klasy testowej (o 10,32%).

The Code

Wydajność języków programowania w ujęciu Javy testowana była z wykorzystaniem tego samego kodu źródłowego, za każdym razem kompilowanego z wykorzystaniem załączonego do badanego JDK kompilatora.

class Liczbypierwszeint {
  
  public static void main(String[] arguments) {
      long n = 30000;
      long lp = 0;
      long d;
      long p = 2;
      boolean t;
      
      while (lp < n) {
          t = true;
          for (d=2; d<=p-1; d++) {
            if (p % d == 0) {
                t = false;
                break;
            }
          }
          if (t) {
            System.out.print(p+”, „);
            lp++;
          }
          p++;
      }
  }
}

Podsumowanie

Przedstawione wersje Javy wykonały kod w podobnym czasie. Wydajność języków programowania z rodziny Java jest więc przybliżona, choć zaryzykuję stwierdzenie, że identyczna w przypadku obliczeń na liczbach całkowitych. Powinniśmy jednak pamiętać, że każda z tych wersji posiada odpowiednie poprawki zwiększające nie tylko wydajność maszyny wirtualnej w różnych mniej lub bardziej skomplikowanych zadaniach, ale też jej bezpieczeństwo.

Osobiście polecam więc wykorzystanie najnowszej implementacji maszyny wirtualnej Javy, właśnie ze względu na aspekt security.

Nasze zestawienie wygląda więc obecnie następująco:

Wydajność języków programowania java 1.6 java 1.7 java 1.8

Jeśli chcesz zobaczyć wcześniejsze porównanie, kliknij tutaj: Wydajność języków programowania – część 1 – Python vs PHP

Pozdrawiam,

M.M.