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 natywna aplikacja?
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. Tak zbudowany program 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ść jest tak dużym problemem w aplikacjach natywnych, ż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 Biblioteka kompresji BZLib co ilustruje użycie ifdefs, aby wyodrębnić osobliwości platformy:
#ifdef _WIN32. # zawierać # ifdef small / * windows.h definiuje małe na char * / # undef small. # endif. # ifdef BZ_EXPORT. # Zdefiniuj BZ_API (func) WINAPI func. # Zdefiniuj BZ_EXTERN zewnętrzny. # else / * importuj dll systemu Windows dynamicznie * / # Zdefiniuj BZ_API (func) (WINAPI * func) # zdefiniuj BZ_EXTERN. # endif. #jeszcze. # Zdefiniuj BZ_API (func) func. # Zdefiniuj BZ_EXTERN zewnętrzny. #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, kod nie będzie przenośny w tych 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, używając prymitywów języka java i java maszyna wirtualna jest odpowiedzialna za przetłumaczenie tych operacji podstawowych na system operacyjny hosta budynków. 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 połączeń niskopoziomowych, które powodują, że program jest nieprzenoś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 bajtu, aby lepiej działał 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 pod kątem długo działających programów serwerowych, a tryb klienta JVM optymalizuje 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