Publicitate
În momentul de față dezbateți dacă folosiți Java pentru următoarea aplicație sau utilizați seturi de instrumente și cadre native? Doriți să știți ce avantaje oferă java față de programarea nativă pentru o aplicație? Citiți mai departe pentru a afla!
Ce este o aplicație nativă?
O aplicație nativă este un program scris special pentru un sistem de operare (OS) și, eventual, pentru hardware-ul specific care rulează acel sistem de operare. Este scris mai ales într-o limbă precum C / C ++. Codul sursă C / C ++ este compilat într-un formular de obiect folosind un compilator, care este apoi asamblat într-un executabil prin legarea bibliotecilor necesare. Un program construit în acest fel va rula pe hardware-ul specific și sistemul de operare pentru care este construit, dar este posibil să nu funcționeze corect la alte sisteme.
De ce nu sunt portabile aplicațiile native?
Un compilator pentru un limbaj precum C / C ++ traduce declarațiile codului sursă în limbajul mașinii pentru procesorul vizat. Când încercați să rulați acest cod pe un procesor diferit, este posibil ca programul să nu funcționeze corect (sau să funcționeze deloc), deoarece este posibil ca instrucțiunile de limbaj mașină din codul compilat să nu fie acceptate de acest procesor.
În plus, noul sistem de operare poate fi diferit de cel inițial și poate chiar nu recunoaște fișierul de program ca executabil. Acest lucru se datorează diferitelor formate de fișiere utilizate pentru executabile pe diferite sisteme de operare (cum ar fi Windows, Linux, MacOS etc.).
Portabilitatea este o problemă atât de mare în cazul aplicațiilor native, care doar modernizarea compilatorului la următoarea versiune poate introduce modificări de rupere. Este posibil să fie necesar să se stabilească codul dvs. pentru a lucra cu cel mai nou compilator. Ca atare, stropirea codului sursă cu ceea ce sunt cunoscute ca fiind ifdef instrucțiunile de izolare a soluțiilor de rezolvare specifice hardware-ului, sistemului de operare sau ale compilatorului sunt comune.
Următorul este un fragment de cod din Biblioteca de compresie BZLib ceea ce ilustrează utilizarea ifdefs pentru a izola particularitățile platformei:
#ifdef _WIN32. # include # ifdef small / * windows.h definește mic pentru char * / # undef mici. # endif. # ifdef BZ_EXPORT. # define BZ_API (func) WINAPI func. # define BZ_EXTERN extern. # else / * import windows dll dinamic * / # define BZ_API (func) (WINAPI * func) # define BZ_EXTERN. # endif. #else. # define BZ_API (func) func. # define BZ_EXTERN extern. # endif.
Codul sursă Portabilitatea în sistemele de operare
Această situație poate fi atenuată într-o oarecare măsură prin compilarea codului sursă C / C ++ la noul procesor. Cu toate acestea, sistemul de operare pentru noul procesor poate fi diferit. Și codul sursă s-ar putea să nu se compileze fără modificări, majore sau minore. Chiar și modificări minore ale versiunilor sistemului de operare pot necesita unele modificări ale codului sursă.
Și atunci când aveți în vedere sisteme de operare diferite, cum ar fi Windows și Linux / UNIX, portabilitatea este un joc cu bile cu totul nou. Dacă nu utilizați un set de instrumente sau un cadru care vă izolează complet de sistemul de operare, portabilitatea codului sursă este imposibilă. Acest lucru se datorează faptului că interfața sistemului de operare este complet diferită între aceste sisteme. Dacă în colțurile cele mai îndepărtate ale codului dvs. utilizați direct orice sistem de operare direct, atunci codul dvs. nu va fi portabil pe aceste sisteme de operare diverse.
Cum diferă Java?
În acest scenariu, Java oferă o nouă paradigmă, un nou mod de a construi software. Când programați în Java, vizați a mașină virtuală. O astfel de mașină există ca un concept, iar limbajul java oferă interfețe pentru programarea acestei mașini. De exemplu, puteți interoga cantitatea de memorie disponibilă, numărul de procesoare, interfețele de rețea etc. ale mașinii virtuale.
Cum sunt construite aplicațiile Java?
Limba java furnizează un compilator java care traduce codul sursă în cod obiect. Codul obiect este apoi executat de către mașină virtuală java, care este un program separat de compilator. La rândul său, sistemul de operare vede mașina virtuală java ca doar un alt program care rulează pe acel sistem de operare.
Sarcina portabilității a trecut acum de la programatorul de aplicații la furnizorul de mașini virtuale java. Programatorul de aplicații scrie software-ul folosind primitivele limbajului java și java mașina virtuală este responsabilă pentru transpunerea acestor primitive în sistemul de operare gazdă facilităţi. Când apare o nouă versiune a sistemului de operare, este responsabilitatea vânzătorului să actualizeze mașina virtuală java, astfel încât să funcționeze corect pe noul sistem de operare.
Care sunt avantajele mașinii virtuale Java?
După cum am menționat anterior, mașina virtuală java oferă programatorului de aplicații o vedere virtuală a sistemului de operare și a hardware-ului. Această vizualizare virtuală are forma diferitelor interfețe și metode și servește la izolarea programatorului de aplicații de diferențele din sistemul de operare gazdă și hardware-ul de bază. Astfel, programatorul aplicației poate accesa facilități cum ar fi un Window Toolkit, Networking, grafică 3D, mai multe procesoare etc. fără a fi nevoie să apelezi la apeluri la nivel scăzut, care ajung să facă programul neportabil.
Un program java este scris și este compilat folosind compilatorul java. Codul obiectului rezultat (numit cod de byte) poate fi transportat la un sistem de operare diferit de gazdă care rulează pe diferite hardware și ar trebui să funcționeze fără probleme.
Compilator JIT
Mașina virtuală Java folosește a Compilator JIT pentru a optimiza codul de byte special pentru procesorul țintă. JIT înseamnă La timp și se referă la optimizările de rulare pe care JVM le aplică codului de octeți pentru ca acesta să funcționeze mai bine pe procesorul curent.
Un alt avantaj al utilizării Mașinii virtuale Java este că poate aplica optimizări diferite pentru cazuri de utilizare diferite, toate având același cod de octet. De exemplu, Oracle JVM oferă două opțiuni pentru rularea codului de byte: un mod server și un mod client. Modul serverul se optimizează pentru programele serverului care rulează îndelungat, în timp ce modul JVM client optimizează pentru timpii de răspuns rapid, deoarece este probabil utilizat în modul interactiv.
Pentru a rezuma, o aplicație nativă este construită pentru un anumit hardware și sistem de operare. O aplicație java, pe de altă parte, urmează a Construiți o dată alergați oriunde filosofia, având un JVM executați instrucțiunile codului de byte compilate. În timp ce aplicațiile native au fost considerate în mod tradițional ca fiind mai performante decât aplicațiile java, este posibil să nu fie întotdeauna adevărat datorită utilizării unui compilator JIT de către JVM.
Ați dezvoltat o aplicație nativă și a trebuit să treceți la java din cauza portabilității? Sau invers din cauza problemelor de performanță? Spuneți-ne în comentariile de mai jos.
Credit imagine: Profit_Image prin Shutterstock.com