Witam.
Czy są takie dane mówiące o wydajności (w pewnym przybliżeniem) kodu wykonywanego na VM vs kodu wykonywanego w środowisku .Net (tworzonego np. w C#). Zakładając oczywiście, że zastosowane konstrukcje są tożsame?
Witam.
Czy są takie dane mówiące o wydajności (w pewnym przybliżeniem) kodu wykonywanego na VM vs kodu wykonywanego w środowisku .Net (tworzonego np. w C#). Zakładając oczywiście, że zastosowane konstrukcje są tożsame?
Swojego czasu szukałem odpowiedzi na to pytanie i znalazłem bardzo sprzeczne opinie. W zasadzie każdy test spotykał się z ostrą falą krytyki i ciężko było wyciągnąć jednoznaczny wniosek, w tę czy inną stronę.
Ale spróbujmy podsumować rozwiązania techniczne obu wariantów:
C#/.NET:
- kod źródłowy kompilowany jest do poziomu Common Intermediate Language (CIL), a podczas pierwszego uruchomienia zamieniany jest na kod natywny poprzez kompilator JIT
- powyższe sugeruje że aplikacja .NET będzie startować dłużej, ale po pierwszym wykonaniu kodu będzie wykonywać się szybciej
Java:
- kod bajtowy Javy wykonywany jest w maszynie wirtualnej, przez co nie jest tracony czas na kompilację czasu wykonania
- na przykładzie maszyny wirtualnej Hotspot - istnieje kilka poziomów optymalizacji, które włączają się w zależności od ilości wywołań danej sekcji kodu
- optymalizacja następuje w czasie rzeczywistym i potrafi zamienić często wykonywany fragment kodu na kod natywny
- optymalizator potrafi zrobić także czynność odwrotną - jeśli fragment stanie się mniej "popularny", wówczas może zostać przepisany z powrotem na formę kodu bajtowego, co sprzyja elastyczności
Zachęcam specjalistów do uzupełnienia i/lub skorygowania mojego postu w celu powstania listy plusów i minusów danej technologii, obiecuję również uzupełniać temat w miarę odszukiwania nowych informacji.