Mainos

Keskusteletko parhaillaan Java-käytöstä seuraavassa sovelluksessa vai natiivien työkalusarjojen ja kehysten käyttämisessä? Haluatko tietää, mitä etuja Java tarjoaa sovelluksen alkuperäiseen ohjelmointiin verrattuna? Lue lisätietoja!

Mikä on alkuperäinen sovellus?

Alkuperäinen sovellus on ohjelma, joka on kirjoitettu erityisesti käyttöjärjestelmälle (OS) ja mahdollisesti kyseistä käyttöjärjestelmää käyttävälle laitteistolle. Se on kirjoitettu pääosin kielellä, kuten C / C ++. C / C ++ -lähdekoodi käännetään objektimuotoon kääntäjällä, joka kootaan sitten suoritettavaksi linkittämällä tarvittavat kirjastot. Tällä tavalla rakennettu ohjelma toimii tietyssä laitteistossa ja käyttöjärjestelmässä, jolle se on rakennettu, mutta se ei välttämättä toimi oikein muissa järjestelmissä.

Alkuperäisen suoritettavan valmistelu

Mikseivät alkuperäiset sovellukset ole kannettavat?

Kielen, kuten C / C ++, kääntäjä kääntää lähdekood lauseet konekielelle kohdennetulle CPU: lle. Kun yrität käyttää tätä koodia toisella CPU: lla, ohjelma ei ehkä toimi oikein (tai ei toimi ollenkaan), koska tämä CPU ei ehkä tue käännetyn koodin konekielisiä ohjeita.

Lisäksi uusi käyttöjärjestelmä voi olla erilainen kuin alkuperäinen, ja se ei ehkä edes tunnista ohjelmatiedostoa suoritettavana. Tämä johtuu erilaisista tiedostomuodoista, joita käytetään suoritettaviin tiedostoihin eri käyttöjärjestelmissä (kuten Windows, Linux, MacOS jne.).

Siirrettävyys on natiivien sovellusten suhteen niin suuri ongelma, että pelkästään kääntäjän päivittäminen seuraavaan versioon voi johtaa muutosten rikkomiseen. Koodisi täytyy ehkä korjata, jotta se toimisi uudemman kääntäjän kanssa. Sellaisena lähdekoodin roiskuminen niin kutsuttujen ifdef lauseet laitteisto-, käyttöjärjestelmä- tai kääntäjäkohtaisten kiertotapojen eristämiseksi ovat yleisiä.

Seuraava on pieni koodinpätkä lähettäjältä BZLib-pakkauskirjasto joka kuvaa ifdefs eristää alustan erityispiirteet:

#ifdef _WIN32. # sisältää # ifdef pieni / * Windows.h määrittelee pieneksi char * / # undef pieni. # loppu Jos. # ifdef BZ_EXPORT. # määrittele BZ_API (func) WINAPI func. # määrittele BZ_EXTERN extern. # else / * tuo Windows dll dynaamisesti * / # define BZ_API (func) (WINAPI * func) # määrittele BZ_EXTERN. # loppu Jos. #else. # määrittele BZ_API (func) func. # määrittele BZ_EXTERN extern. #loppu Jos.

Lähdekoodin siirrettävyys käyttöjärjestelmissä

Tätä tilannetta voidaan lievittää jossain määrin kääntämällä C / C ++ -lähdekoodi uuteen CPU: hon. Uuden suorittimen käyttöjärjestelmä voi kuitenkin olla erilainen. Ja lähdekoodi ei välttämättä koota ilman muutoksia, olivatpa ne suuria tai pieniä. Jopa pienet muutokset käyttöjärjestelmän versioissa voivat vaatia joitain lähdekoodimuutoksia.

Ja kun tarkastellaan erilaisia ​​käyttöjärjestelmiä, kuten Windows ja Linux / UNIX, siirrettävyys on kokonaan uusi pallopeli. Lähdekoodin siirrettävyys on mahdotonta, ellet käytä työkalupakkia tai kehystä, joka eristää sinut kokonaan käyttöjärjestelmästä. Tämä johtuu siitä, että käyttöjärjestelmän käyttöliittymä on täysin erilainen näiden järjestelmien välillä. Jos käytät koodisi syrjäisimmissä kulmissa kaikkia käyttöjärjestelmän alukkeita suoraan, koodiasi ei voi siirtää näiden monien eri käyttöjärjestelmien välillä.

Kuinka Java on erilainen?

Juuri tässä skenaariossa Java tarjoaa uuden paradigman, uuden tavan rakentaa ohjelmistoja. Kun ohjelmoit Java-ohjelmassa, kohdistat a virtuaalikone. Tällainen kone on olemassa käsitteenä ja java-kieli tarjoaa rajapintoja ohjelmointia varten tätä konetta vastaan. Voit esimerkiksi kysyä käytettävissä olevan muistin määrää, prosessorien lukumäärää, verkkorajapintoja jne.

Virtuaalikoneen suorituskoodi

Kuinka Java-sovellukset rakennetaan?

Java-kieli tarjoaa Java-kääntäjän, joka kääntää lähdekoodin objektikoodiksi. Objektikoodi suoritetaan sitten Java-virtuaalikone, joka on erillinen ohjelma kääntäjästä. Käyttöjärjestelmä puolestaan ​​näkee Java-virtuaalikoneen vain yhtenä kyseisessä käyttöjärjestelmässä käynnissä olevana ohjelmana.

Siirrettävyyden taakka on nyt siirtynyt sovellusohjelmoijalta Java-virtuaalikoneen myyjälle. Sovellusohjelmoija kirjoittaa ohjelmiston Java-kielen ja javan alkukirjaimien avulla virtuaalikone vastaa näiden primitiivien kääntämisestä isäntäkäyttöjärjestelmään tilat. Kun uusi käyttöjärjestelmäversio ilmestyy, myyjän vastuulla on päivittää Java-virtuaalikone niin, että se toimii oikein uudessa käyttöjärjestelmässä.

Java-ohjelmien rakentaminen

Mitkä ovat Java-virtuaalikoneen edut?

Kuten aiemmin mainittiin, Java-virtuaalikone tarjoaa virtuaalinäkymän käyttöjärjestelmästä ja laitteistosta sovellusohjelmoijalle. Tämä virtuaalinäkymä on erilaisten käyttöliittymien ja menetelmien muodossa, ja se on tarkoitettu eristämään sovellusohjelmoija isäntäjärjestelmän ja sen taustalla olevan laitteiston eroista. Siten sovellusohjelmoija voi käyttää palveluita, kuten Windowing Toolkit, Networking, 3D-grafiikka, useita CPUja jne. joutumatta turvautumaan matalan tason puheluihin, jotka lopulta tekevät ohjelmasta siirrettävän.

Java-ohjelma on kirjoitettu ja käännetty Java-kääntäjällä. Tuloksena oleva objektikoodi (kutsutaan tavukoodi) voidaan siirtää toiseen isäntäkäyttöjärjestelmään, joka toimii eri laitteilla, ja sen pitäisi toimia ilman ongelmia.

JIT-kääntäjä

Java-virtuaalikone käyttää a JIT-kääntäjä optimoida tavukoodi erityisesti kohde-CPU: lle. JIT tarkoittaa Juuri ajoissa ja viittaa ajonaikaiseen optimointiin, jota JVM soveltaa tavukoodiin saadakseen sen toimimaan paremmin nykyisellä CPU: lla.

Toinen Java-virtuaalikoneen käytön etu on, että se voi soveltaa erilaisia ​​optimointeja erilaisiin käyttötapauksiin, kaikilla samalla tavukoodilla. Esimerkiksi Oracle JVM tarjoaa kaksi vaihtoehtoa tavukoodin suorittamiseksi: palvelintila ja asiakastila. Palvelintila optimoi pitkät palvelinohjelmat, kun taas asiakasohjelman JVM-tila optimoi nopeat vastausajat, koska sitä todennäköisesti käytetään vuorovaikutteisessa tilassa.

Yhteenvetona voidaan todeta, että alkuperäinen sovellus on rakennettu tietylle laitteistolle ja käyttöjärjestelmälle. Java-sovellus puolestaan ​​seuraa a Rakenna kerran ajaa missä tahansa filosofia, pitämällä JVM suorittamaan kootut tavukoodiohjeet. Vaikka natiivisovelluksia on perinteisesti pidetty suorituskykyisempinä kuin Java-sovelluksia, se ei välttämättä aina pidä paikkaansa, koska JVM käyttää JIT-kääntäjää.

Oletko kehittänyt natiivin sovelluksen ja joutunut vaihtamaan javaan siirrettävyyden takia? Tai päinvastoin suorituskykyongelmien takia? Kerro meille alla olevissa kommenteissa.

Kuvaluotto: Profit_Image Shutterstock.com-sivuston kautta