Reklaam
Kas arutate praegu, kas kasutada järgmise rakenduse jaoks java või kasutada loomulikke tööriistakomplekte ja raamistikke? Kas soovite teada, milliseid eeliseid pakub java rakenduse loomuliku programmeerimise ees? Loe edasi, et teada saada!
Mis on kohalik rakendus?
Natiivrakendus on spetsiaalselt opsüsteemile (OS) ja võib-olla konkreetsele riistvarale, mis seda OS-i töötab. Enamasti on see kirjutatud keeles, näiteks C / C ++. C / C ++ lähtekood kompileeritakse kompilaatori abil objekti vormile, mis seejärel koondatakse vajalike teekide linkimisega käivitatavaks. Sel viisil loodud programm töötab konkreetsel riistvaral ja OS-il, mille jaoks see on loodud, kuid see ei pruugi teistes süsteemides korralikult töötada.
Miks pole looduslikud rakendused kaasaskantavad?
Sellise keele nagu C / C ++ kompilaator tõlgib lähtekoodi väljavõtted sihitud CPU jaoks masinakeelde. Kui proovite seda koodi käitada mõnel teisel protsessoril, ei pruugi programm õigesti töötada (või üldse töötada), kuna see protsessor ei pruugi toetada kompileeritud koodi masinakeele juhiseid.
Lisaks võib uus opsüsteem erineda algsest ja ei pruugi isegi programmi faili käivitatavaks tunnistada. Selle põhjuseks on erinevad failivormingud, mida kasutatakse erinevates opsüsteemides (nt Windows, Linux, MacOS jne) käivitatavate failide jaoks.
Kaasaskantavus on looduslike rakenduste puhul nii suur probleem, et pelgalt kompilaatori järgmisele versioonile värskendamine võib muudatusi rikkuda. Võimalik, et uuema kompilaatoriga töötamiseks tuleb teie kood fikseerida. Sellisena võib lähtekoodi splatreerimine nn ifdef tavalised on avaldused riistvara-, OS- või kompilaatoripõhiste lahenduste isoleerimiseks.
Järgnev on väike koodijupp saidilt BZLib tihenduskogu mis illustreerib ifdefs platvormi iseärasuste isoleerimiseks:
#ifdef _WIN32. # sisaldama # ifdef small / * windows.h määratlevad väikest char * / # Undef väike. # endif. # ifdef BZ_EXPORT. # define BZ_API (func) WINAPI func. # define BZ_EXTERN extern. # else / * impordi aknad dünaamiliselt * / # define BZ_API (func) (WINAPI * func) # define BZ_EXTERN. # endif. #else. # define BZ_API (func) func. # define BZ_EXTERN extern. #endif.
Lähtekoodi teisaldatavus opsüsteemides
Seda olukorda saab mingil määral leevendada, kui C / C ++ lähtekood kompileeritakse uuesti uude protsessorisse. Uue protsessori opsüsteem võib siiski olla erinev. Ja lähtekood ei pruugi muutusteta kompileerida, olgu need siis suured või väikesed. Isegi väikesed muudatused opsüsteemi versioonides võivad nõuda mõningaid lähtekoodi muudatusi.
Ja kui arvestada erinevate operatsioonisüsteemidega nagu Windows ja Linux / UNIX, on kaasaskantavus täiesti uus pallimäng. Kui te ei kasuta tööriistakomplekti või raamistikku, mis eraldab teid täielikult opsüsteemist, on lähtekoodi teisaldamine võimatu. Selle põhjuseks on asjaolu, et opsüsteemi liides on nende süsteemide vahel täiesti erinev. Kui kasutate oma koodi kaugemates nurkades otse mis tahes opsüsteemi primitiivseid elemente, siis pole teie kood teistes opsüsteemides teisaldatav.
Kuidas Java erineb?
Just selle stsenaariumi korral pakub java uue paradigma, tarkvara ehitamise uue viisi. Javas programmeerides sihite a Virtuaalne masin. Selline masin eksisteerib mõistena java keel pakub liideseid selle masina jaoks programmeerimiseks. Näiteks võite küsida saadaoleva mälumahu, protsessorite arvu, virtuaalmasina võrguliideste jms kohta.
Kuidas Java rakendusi ehitatakse?
Java keel pakub java kompilaatorit, mis tõlgib lähtekoodi objekti koodiks. Seejärel täidab objektikoodi java virtuaalmasin, mis on kompilaatorist eraldi programm. Operatsioonisüsteem vaatab java virtuaalmasinat kui lihtsalt veel ühte selles OS-is töötavat programmi.
Teisaldatavuse koormus on nihkunud rakenduseprogrammeerijalt java virtuaalmasina müüjale. Rakendusprogrammeerija kirjutab tarkvara java keele primitiivide ja java abil Virtuaalne masin vastutab nende primitiivide host-opsüsteemi tõlkimise eest rajatised. Kui ilmub operatsioonisüsteemi uus versioon, on java virtuaalmasina värskendamine müüja kohustus, nii et see töötab uues OS-is korrektselt.
Millised on Java virtuaalmasina eelised?
Nagu varem mainitud, pakub java virtuaalmasin rakenduse programmeerijale virtuaalset vaadet opsüsteemist ja riistvarast. See virtuaalne vaade on mitmesuguste liideste ja meetodite vormis ning selle eesmärk on isoleerida rakendusprogrammeerija host OS-i ja selle aluseks oleva riistvara erinevustest. Seega pääseb rakenduse programmeerija juurde sellistele vahenditele nagu Windowsi tööriistakomplekt, Võrgundus, 3D-graafika, mitu protsessorit jne. ilma et peaksite kasutama madala taseme kõnesid, mis muudavad programmi mittekinnitatavaks.
Kirjutatakse javaprogramm ja see kompileeritakse Java-kompilaatori abil. Saadud objekti kood (nn baitkood) saab transportida erinevasse riistvarasse töötavasse hostinuppu ja see peaks probleemideta töötama.
JIT koostaja
Java virtuaalmasin kasutab a JIT koostaja baidikoodi optimeerimiseks spetsiaalselt sihtprotsessori jaoks. JIT tähistab Täpselt õigeks ajaks ja viitab käitusaja optimeerimisele, mida JVM rakendab baitkoodile, et saada see praegusel protsessoril paremini tööle.
Java virtuaalmasina kasutamise teine eelis on see, et see võib erinevatele kasutusjuhtudele rakendada erinevaid optimeerimisi, kõik sama baitkoodiga. Näiteks pakub Oracle JVM baitkoodi käitamiseks kahte võimalust: serverirežiim ja klientirežiim. Serverirežiim optimeerib pikaajaliste serveriprogrammide jaoks, samas kui kliendi JVM-režiim optimeerib kiire reageerimise aja, kuna seda kasutatakse tõenäoliselt interaktiivses režiimis.
Kokkuvõtteks võib öelda, et konkreetse riistvara ja opsüsteemi jaoks on loodud pärisrakendus. Javarakendus seevastu järgneb a Ehitage üks kord käima ükskõik kuhu filosoofia, lastes JVM-il käivitada kompileeritud baidikoodi juhised. Ehkki tavapäraseid rakendusi on traditsiooniliselt peetud javarakendustest tulemuslikumaks, ei pruugi see alati tõsi olla, kuna JVM kasutab JIT-i kompilaatorit.
Kas olete välja töötanud omamaise rakenduse ja pidite teisaldatavuse tõttu javale üle minema? Või vastupidi tulemuslikkuse probleemide tõttu? Andke meile allpool kommentaarides teada.
Pildikrediit: kasum_kujutis saidi Shutterstock.com kaudu