Dlaczego wirtualna maszyna Java pomaga Twojemu kodowi działać lepiej

  • Gabriel Brooks
  • 0
  • 1857
  • 33
Reklama

Czy obecnie zastanawiasz się, czy użyć Java dla następnej aplikacji, czy używać natywnych zestawów narzędzi i struktur? Czy chcesz wiedzieć, jakie korzyści zapewnia java w porównaniu z programowaniem natywnym dla aplikacji? Czytaj dalej, aby się dowiedzieć!

Co to jest aplikacja natywna?

Aplikacja natywna to program napisany specjalnie dla systemu operacyjnego (OS) i prawdopodobnie dla określonego sprzętu z tym systemem operacyjnym. Najczęściej jest napisany w języku takim jak C / C ++. Kod źródłowy C / C ++ jest kompilowany do postaci obiektowej za pomocą kompilatora, który jest następnie składany w pliku wykonywalnym poprzez połączenie wymaganych bibliotek. Program zbudowany w ten sposób będzie działał na określonym sprzęcie i systemie operacyjnym, dla którego został zbudowany, ale może nie działać poprawnie w innych systemach.

Dlaczego natywne aplikacje nie są przenośne?

Kompilator dla języka takiego jak C / C ++ tłumaczy instrukcje kodu źródłowego na język maszynowy dla docelowego procesora. Podczas próby uruchomienia tego kodu na innym procesorze program może nie działać poprawnie (lub działać w ogóle), ponieważ instrukcje języka maszynowego w skompilowanym kodzie mogą nie być obsługiwane przez ten procesor.

Ponadto nowy system operacyjny może różnić się od oryginalnego i może nawet nie rozpoznawać pliku programu jako pliku wykonywalnego. Wynika to z różnych formatów plików używanych w plikach wykonywalnych w różnych systemach operacyjnych (takich jak Windows, Linux, MacOS itp.).

Przenośność to tak duży problem z aplikacjami natywnymi, że samo uaktualnienie kompilatora do następnej wersji może wprowadzić przełomowe zmiany. Twój kod może wymagać naprawy do pracy z nowszym kompilatorem. Jako taki, rozpryskiwanie kodu źródłowego za pomocą tak zwanego ifdef często występują instrukcje izolowania obejść specyficznych dla sprzętu, systemu operacyjnego lub kompilatora.

Poniżej znajduje się mały fragment kodu z biblioteki kompresji BZLib, który ilustruje użycie ifdefs, aby wyodrębnić osobliwości platformy:

#ifdef _WIN32 # include # ifdef small / * windows.h definiuj małe do char * / # undef small # endif # ifdef BZ_EXPORT # definiuj BZ_API (func) WINAPI func # definiuj BZ_EXTERN extern # else / * importuj dll dynamicznie * / # zdefiniuj BZ_API (func) (WINAPI * func) # zdefiniuj BZ_EXTERN # endif #else # zdefiniuj BZ_API (func) func # zdefiniuj BZ_EXTERN extern #endif 

Przenośność kodu źródłowego w różnych systemach operacyjnych

Sytuację tę można w pewnym stopniu złagodzić, ponownie kompilując kod źródłowy C / C ++ na nowy procesor. Jednak system operacyjny nowego procesora może być inny. A kod źródłowy może nie zostać skompilowany bez zmian, większych lub mniejszych. Nawet niewielkie zmiany w wersjach systemu operacyjnego mogą wymagać pewnych zmian w kodzie źródłowym.

A jeśli wziąć pod uwagę różne systemy operacyjne, takie jak Windows i Linux / UNIX, przenośność to zupełnie nowa gra w piłkę. O ile nie używasz zestawu narzędzi lub frameworka, który całkowicie izoluje cię od systemu operacyjnego, przenoszenie kodu źródłowego jest niemożliwe. Wynika to z faktu, że interfejs systemu operacyjnego jest zupełnie inny w tych systemach. Jeśli w najdalszych zakątkach kodu korzystasz bezpośrednio z podstawowych operacji systemu operacyjnego, Twój kod nie będzie przenośny w różnych systemach operacyjnych.

Czym różni się Java?

W tym scenariuszu Java dostarcza nowy paradygmat, nowy sposób budowania oprogramowania. Podczas programowania w Javie celujesz w maszyna wirtualna. Taka maszyna istnieje jako koncepcja, a język Java zapewnia interfejsy do programowania na tej maszynie. Na przykład możesz zapytać o ilość dostępnej pamięci, liczbę procesorów, interfejsy sieciowe itp. Maszyny wirtualnej.

Jak budowane są aplikacje Java??

Język Java zapewnia kompilator Java, który tłumaczy kod źródłowy na kod obiektowy. Kod obiektu jest następnie wykonywany przez Maszyna wirtualna Java, który jest programem niezależnym od kompilatora. Z kolei system operacyjny postrzega maszynę wirtualną Java jako kolejny program działający w tym systemie operacyjnym.

Ciężar przenoszenia został przeniesiony z programisty aplikacji na dostawcę maszyny wirtualnej Java. Programista aplikacji pisze oprogramowanie przy użyciu prymitywów języka java, a wirtualna maszyna java jest odpowiedzialna za tłumaczenie tych prymitywów na urządzenia systemu operacyjnego hosta. Gdy pojawi się nowa wersja systemu operacyjnego, sprzedawca jest odpowiedzialny za aktualizację wirtualnej maszyny Java, aby działała poprawnie w nowym systemie operacyjnym.

Jakie są zalety wirtualnej maszyny Java??

Jak wspomniano wcześniej, wirtualna maszyna Java zapewnia wirtualny widok systemu operacyjnego i sprzętu dla programisty aplikacji. Ten widok wirtualny ma postać różnych interfejsów i metod i służy do izolowania programisty aplikacji od różnic w systemie operacyjnym hosta i sprzęcie. W ten sposób programista aplikacji może uzyskać dostęp do udogodnień, takich jak pakiet narzędzi do okien, sieci, grafiki 3D, wielu procesorów itp. Bez konieczności uciekania się do wywołań niskopoziomowych, co powoduje, że program nie jest przenośny.

Program Java został napisany i jest kompilowany przy użyciu kompilatora Java. Wynikowy kod obiektu (nazywany kod bajtowy) można przenieść do innego systemu operacyjnego hosta działającego na innym sprzęcie i powinno działać bez problemów.

Kompilator JIT

Maszyna wirtualna Java używa Kompilator JIT aby zoptymalizować kod bajtowy specjalnie dla docelowego procesora. JIT oznacza Just-in-Time i odnosi się do optymalizacji środowiska wykonawczego, które JVM stosuje do kodu bajtów, aby działał lepiej na bieżącym procesorze.

Kolejną zaletą korzystania z wirtualnej maszyny Java jest to, że może ona stosować różne optymalizacje dla różnych przypadków użycia, wszystkie z tym samym kodem bajtu. Na przykład Oracle JVM zapewnia dwie opcje uruchamiania kodu bajtowego: tryb serwera i tryb klienta. Tryb serwera optymalizuje się pod kątem długotrwałych programów serwerowych, podczas gdy tryb JVM klienta optymalizuje się pod kątem krótkich czasów odpowiedzi, ponieważ prawdopodobnie jest używany w trybie interaktywnym.

Podsumowując, natywna aplikacja jest budowana dla określonego sprzętu i systemu operacyjnego. Z drugiej strony aplikacja Java jest zgodna z Buduj raz uruchom gdziekolwiek filozofia polegająca na tym, że JVM uruchamia skompilowane instrukcje kodu bajtowego. Chociaż aplikacje rodzime były tradycyjnie postrzegane jako bardziej wydajne niż aplikacje Java, nie zawsze może być to prawdą ze względu na użycie kompilatora JIT przez JVM.

Czy opracowałeś aplikację natywną i musiałeś przejść na java ze względu na przenośność? Lub odwrotnie z powodu problemów z wydajnością? Daj nam znać w komentarzach poniżej.

Zdjęcie kredytowe: Profit_Image przez Shutterstock.com




Jeszcze bez komentarzy

O nowoczesnej technologii, prostej i niedrogiej.
Twój przewodnik w świecie nowoczesnych technologii. Dowiedz się, jak korzystać z technologii i gadżetów, które nas otaczają każdego dnia i dowiedz się, jak odkrywać ciekawe rzeczy w Internecie.