Varför Java Virtual Machine hjälper din kod att köra bättre
Diskuterar du för närvarande huruvida du ska använda Java för din nästa applikation eller använda inbyggda verktyg och ramar? Vill du veta vilka fördelar Java ger över inbyggd programmering för en applikation? Läs vidare för att ta reda på det!
Vad är en infödd ansökan?
En inbyggd applikation är ett program som är skrivet specifikt för ett operativsystem (OS), och möjligen för den specifika hårdvaran som kör det operativsystemet. Det är mestadels skrivet på ett språk som C / C ++. C / C ++-källkoden sammanställs till en objektform med hjälp av en kompilator, som sedan monteras i en körbar genom att länka de obligatoriska biblioteken. Ett program som byggs på detta sätt kommer att köras på den specifika hårdvaran och operativsystemet den är byggd för, men kanske inte fungerar korrekt på andra system.
Varför är inte infödda program bärbara?
En kompilator för ett språk som C / C ++ översätter källkodsdeklarationer till maskinens språk för den riktade CPU. När du försöker köra den här koden på en annan CPU, kanske programmet inte fungerar korrekt (eller fungerar alls) eftersom maskinens språkinstruktioner i den sammanställda koden kanske inte stöds av denna CPU.
Dessutom kan det nya operativsystemet skilja sig från det ursprungliga och kanske inte ens känna igen programfilen som en körbar. Detta beror på olika filformat som används för körbara filer över olika operativsystem (som Windows, Linux, MacOS, etc.).
Portabilitet är så stort problem med inhemska applikationer som bara kan uppgradera kompilatorn till nästa version kan införa brottförändringar. Koden kan behöva lösas för att fungera med den nyare kompilatorn. Som sådan sprider källkoden med det som är känt som ifdef uttalanden för att isolera hårdvara-, OS- eller kompilatorspecifika lösningar är vanliga.
Följande är ett litet kodfragment från BZLib-komprimeringsbiblioteket som illustrerar användningen av ifdefs för att isolera plattformens särdrag:
#ifdef _WIN32 # include # ifdef small / * windows.h definiera små till char * / # undef small # endif # ifdef BZ_EXPORT # definiera BZ_API (func) WINAPI func # definiera BZ_EXTERN extern # else / * importera Windows dll dynamiskt * / # definiera BZ_API (func) (WINAPI * func) # definiera BZ_EXTERN # endif #else # definiera BZ_API (func) func # definiera BZ_EXTERN extern #endif
Källkodsportabilitet över operativsystem
Denna situation kan lindras i viss utsträckning genom att omregistrera C / C ++ källkoden till den nya processorn. Operativsystemet för den nya CPU kan dock vara annorlunda. Och källkoden kan inte kompilera utan ändringar, vare sig större eller mindre. Även små förändringar i operativsystemversionerna kan kräva vissa källkodsändringar.
Och när du betraktar olika operativsystem som Windows och Linux / UNIX, är portabilitet helt nytt bollspel. Om du inte använder en verktygslåda eller en ram som helt isolerar dig från operativsystemet är källkodsportabilitet omöjligt. Detta beror på att operativsystemets gränssnitt är helt annorlunda mellan dessa system. Om du använder de primära styrsystemens primära hörn direkt i kanten av din kod, kommer din kod inte att vara bärbar över dessa olika operativsystem.
Hur är Java annorlunda?
Det är i detta scenario som Java levererar ett nytt paradigm, ett nytt sätt att bygga programvara. När du programmerar i Java, riktar du dig mot a virtuell maskin. En sådan maskin finns som ett koncept, och java-språket tillhandahåller gränssnitt för programmering mot denna maskin. Du kan till exempel fråga efter tillgänglig mängd minne, antalet CPU: er, nätverksgränssnitten mm av den virtuella maskinen.
Hur byggs Java-program?
Java-språket tillhandahåller en java-kompilator som översätter källkod till objektkod. Objekoden körs sedan av java virtuell maskin, vilket är ett separat program från kompilatorn. Operativsystemet visar i sin tur den virtuella java-datorn som bara ett annat program som körs på det operativsystemet.
Bärbarhetsbelastningen har nu flyttats från applikationsprogrammeraren till java virtuella maskinleverantören. Applikationsprogrammeraren skriver programvaran med primitiverna på java-språket, och java-virtuella maskinen ansvarar för att översätta dessa primitiva till värdoperativsystemets anläggningar. När en ny version av operativsystemet kommer ut, är det säljarens ansvar att uppdatera java virtuell maskin så det fungerar korrekt på det nya operativsystemet.
Vad är fördelarna med Java Virtual Machine?
Som tidigare nämnts ger java-virtuell maskin en virtuell vy över operativsystemet och hårdvaran till applikationsprogrammeraren. Denna virtuella vy är i form av olika gränssnitt och metoder och tjänar till att isolera applikationsprogrammeraren från skillnaderna i värd-operativsystemet och den underliggande hårdvaran. Sålunda kan applikationsprogrammeraren få tillgång till anläggningar som en Windowing Toolkit, Networking, 3D-grafik, flera CPUer etc. utan att behöva tillgripa lågsamtal som slutar göra programmet obärbart.
Ett java-program är skrivet och kompileras med java-kompilatorn. Den resulterande objektkoden (kallad byte kod) kan transporteras till ett annat värd operativsystem som körs på olika hårdvaror och bör köras utan problem.
JIT Compiler
Java virtuell maskin använder en JIT kompilator för att optimera bytekoden specifikt för mål-CPU. JIT står för Precis i tid och refererar till de runtime optimeringar som JVM gäller för byte-koden för att få det att fungera bättre på den aktuella CPU.
En annan fördel med att använda Java Virtual Machine är att den kan tillämpa olika optimeringar för olika användningsfall, alla med samma byte kod. Till exempel erbjuder Oracle JVM två alternativ för att köra bytekoden: ett serverläge och ett klientläge. Servern läget optimerar för långvariga serverns program, medan klientens JVM-läge optimerar för snabba svarstider eftersom det sannolikt används i interaktivt läge.
För att sammanfatta är en inbyggd applikation byggd för ett specifikt hårdvaru- och operativsystem. En Java-applikation å andra sidan följer a Bygg en gång kör någonstans filosofi, genom att ha en JVM köra kompilerade byte kod instruktioner. Medan inhemska program traditionellt har betraktats som mer prestanda än Java-applikationer kan det inte alltid vara sant på grund av att JVM använder en JIT-kompilator.
Har du utvecklat en inbyggd applikation och var tvungen att byta till Java på grund av bärbarhet? Eller vice versa på grund av prestationsfrågor? Låt oss veta i kommentarerna nedan.
Bildkrediter: Profit_Image via Shutterstock.com
Utforska mer om: Java.