JavaRush /Java Blog /Random-TK /Kapotyň aşagyndaky Java programmalaryny düzmek we ýerine ...
Павел Голов
Dereje
Москва

Kapotyň aşagyndaky Java programmalaryny düzmek we ýerine ýetirmek

Toparda çap edildi

Mazmuny:

  1. Giriş
  2. Baýtkod düzmek
  3. Programmany düzmegiň we ýerine ýetirmegiň mysaly
  4. Wirtual maşynda bir programma ýerine ýetirmek
  5. Wagtynda (JIT) düzmek
  6. Netije
Kapotyň aşagyndaky Java programmalaryny düzmek we ýerine ýetirmek - 1

1. Tanyşdyryş

Hemmäňize salam! Bu gün Java ýazuw programmasyny işledenimizden soň JVM-iň (Java Wirtual Machine) kapotynyň aşagynda nämeleriň bolup geçýändigi barada bilim paýlaşmak isleýärin. Häzirki wagtda täze döredijileriň bu möhüm taraplaryny sypdyrmagyna sebäp bolup biljek JVM-iň içerki görnüşleri, Java koduny düzmek we ýerine ýetirmek barada pikir etmezlige kömek edýän moda ösüş şertleri bar. Şol bir wagtyň özünde, söhbetdeşlik wagtynda bu mowzuk bilen baglanyşykly soraglar köplenç berilýär, şonuň üçin makala ýazmak kararyna geldim.

2. Baýt koduna düzmek

Kapotyň aşagyndaky Java programmalaryny düzmek we ýerine ýetirmek - 2
Nazaryýetden başlalyň. Islendik programma ýazanymyzda, giňeltme bilen bir faýl döredýäris .javawe oňa Java programmirleme dilinde kod goýýarys. Adamyň okalýan koduny öz içine alýan şeýle faýla deslapky kod faýly diýilýär . Çeşme kody faýly taýýar bolansoň, ony ýerine ýetirmeli! Emma etapda diňe adamlar üçin düşnükli maglumatlar bar. Java köp platformaly programmirleme dilidir. Bu, Java-da ýazylan programmalaryň, aýratyn Java iş ulgamy gurlan islendik platformada ýerine ýetirilip bilinjekdigini aňladýar. Bu sistema Java wirtual maşyn (JVM) diýilýär. Programmany deslapky koddan JVM-iň düşünip biljek koduna terjime etmek üçin ony düzmeli. JVM tarapyndan düşünilen koda bytekod diýilýär we wirtual maşynyň soňra ýerine ýetirjek görkezmeler toplumy bar. Çeşme koduny bytekodda jemlemek üçin javacJDK (Java Development Kit) -iň içine bir düzüji bar. Giriş hökmünde düzüji programmanyň deslapky kody bolan giňeltme bilen bir faýly kabul edýär we çykyş hökmünde programmanyň wirtual maşyn tarapyndan ýerine ýetirilmegi üçin zerur bolan kod koduny öz içine alýan giňeltme .javabilen bir faýl öndürýär . .classBir programma bytekodda jemlenenden soň, wirtual maşyn arkaly ýerine ýetirilip bilner.

3. Programmany düzmegiň we ýerine ýetirmegiň mysaly

Faýlda Calculator.java2 sany buýruk setiriniň argumentini alýan we goşmagyň netijesini çap edýän ýönekeý programma bar diýeliň:
class Calculator {
    public static void main(String[] args){
        int a = Integer.valueOf(args[0]);
        int b = Integer.valueOf(args[1]);

        System.out.println(a + b);
    }
}
javacBu programmany bytekodda jemlemek üçin buýruk setirinde düzüjini ulanarys :
javac Calculator.java
Calculator.classToplanylandan soň, buýruk setirindäki java buýrugyny ulanyp, kompýuterimize gurlan java maşynyny ulanyp ýerine ýetirip boljak çykyş hökmünde bytekodly bir faýl alýarys :
java Calculator 1 2
Faýlyň adyndan soň 2 buýruk setiriniň argumentleriniň görkezilendigini ýadyňyzdan çykarmaň - 1 we 2. sanlar. Programmany ýerine ýetireniňizden soň, 3 belgisi buýruk setirinde görkeziler. Aboveokardaky mysalda, özbaşdak ýaşaýan ýönekeý synpymyz bardy. . Theöne synp käbir paketde bolsa näme etmeli? Aşakdaky ýagdaýy öwreneliň: kataloglary dörediň src/ru/javarushwe synpymyzy şol ýere ýerleşdiriň. Indi şeýle görünýär (bukjanyň adyny faýlyň başynda goşduk):
package ru.javarush;

class Calculator {
    public static void main(String[] args){
        int a = Integer.valueOf(args[0]);
        int b = Integer.valueOf(args[1]);

        System.out.println(a + b);
    }
}
Geliň, aşakdaky synp bilen şeýle synpy düzeliň:
javac -d bin src/ru/javarush/Calculator.java
-d binBu mysalda, düzülen faýllary kataloga binmeňzeş gurluşly bukja salýan goşmaça düzüji opsiýasyny ulandyk src, ýöne katalog binöňünden döredilmeli. Bu usul, deslapky kod faýllaryny bytekod faýllary bilen bulaşdyrmazlyk üçin ulanylýar. Toplanan programmany işletmezden ozal düşünjäni düşündirmeli classpath. Classpathwirtual maşynyň paketleri we düzülen synplary gözlejek ýoludyr. Thisagny, şeýlelik bilen, faýl ulgamyndaky haýsy kataloglaryň Java paket iýerarhiýasynyň köküni wirtual maşyna aýdýarys. Classpathbaýdak ulanyp programma başlanda kesgitlenip bilner -classpath. Buýrugy ulanyp programmany başlaýarys:
java -classpath ./bin ru.javarush.Calculator 1 2
Bu mysalda synpyň doly adyny, şol sanda ýaşaýan bukjasynyň adyny hem talap etdik. Iň soňky faýl agajy şeýle:
├── src
│     └── ru
│          └── javarush
│                  └── Calculator.java
└── bin
      └── ru
           └── javarush
                   └── Calculator.class

4. Programmany wirtual maşyn bilen ýerine ýetirmek

Şeýlelikde, ýazylan programmany başladyk. Aöne düzülen programma wirtual maşyn tarapyndan işe girizilende näme bolýar? Ilki bilen, düzmek we kod düşündirmek düşünjeleriniň nämäni aňladýandygyny bileliň. Ilygyndy , ýokary derejeli çeşme dilinde ýazylan programmanyň maşyn koduna meňzeş pes derejeli dilde ekwiwalent programma terjimesidir. Düşündiriş , çeşme programmasyny ýa-da haýyşyny gaýtadan işlemek we derrew ýerine ýetirmek (programmanyň ýerine ýetirilmän terjime edilmeginden tapawutlylykda) operatiw-beýany (buýruk-setir, setir-setir) derňewdir. Java dilinde düzüjiniň ( javac) we terjimeçisi bar, bu bytekody maşyn kody setirine öwürýän we derrew ýerine ýetirýän wirtual maşyn. Şeýlelik bilen, düzülen programmany işledenimizde, wirtual maşyn ony düşündirip başlaýar, ýagny bytekodyň maşyn koduna setirleýin öwrülmegi we ýerine ýetirilişi. Gynansagam, arassa kod koduny düşündirmek gaty uzyn bir proses bolup, java bäsdeşleri bilen deňeşdirilende haýal edýär. Munuň öňüni almak üçin wirtual maşyn tarapyndan bytekodyň düşündirilmegini çaltlaşdyrýan mehanizm girizildi. Bu mehanizm “Just-in-time complation” (JITC) diýilýär.

5. Wagtynda (JIT) düzmek

Simpleönekeý sözler bilen aýdylanda, “Just-In-Time” düzmegiň mehanizmi şeýledir: programmada koduň birnäçe gezek ýerine ýetirilýän bölekleri bar bolsa, geljekde ýerine ýetirilişini çaltlaşdyrmak üçin bir gezek maşyn koduna jemlenip bilner. Programmanyň şunuň ýaly bölegini maşyn kody düzensoň, programmanyň bu bölegine her gezek edilen jaň bilen wirtual maşyn düzülen maşyn koduny düşündirmek däl-de, derrew ýerine ýetirer, bu programmanyň ýerine ýetirilişini tebigy taýdan çaltlaşdyrar. Programmany çaltlaşdyrmak, ýadyň sarp edilişini köpeltmek (düzülen maşyn koduny bir ýerde saklamaly!) We programma ýerine ýetirilende düzmek üçin sarp edilen wagty köpeltmek arkaly gazanylýar. JIT düzmek gaty çylşyrymly mehanizm, şonuň üçin ýokardan geçeliň. Maşyn koduna bytekodyň JIT-iň 4 derejesi bar. Toplama derejesi näçe ýokary bolsa, şonça-da çylşyrymly, ýöne şol bir wagtyň özünde şeýle bölümiň ýerine ýetirilmegi has pes derejeli bölümden has çalt bolar. JIT - Düzediji, şol bölek näçe gezek ýerine ýetirilýändigine esaslanyp, her bir programma bölegi üçin haýsy düzüliş derejesini kesgitlemelidigini kesgitleýär. Kapotyň aşagynda JVM 2 JIT düzüjisini ulanýar - C1 we C2. C1 düzüjisine müşderi düzüjisi hem diýilýär we diňe 3-nji derejä çenli kod düzmäge ukyply. C2 düzüjisi 4-nji, iň çylşyrymly we iň çalt ýygnamak derejesine jogapkärdir.
Kapotyň aşagyndaky Java programmalaryny düzmek we ýerine ýetirmek - 3
Aboveokardakylardan, ýönekeý müşderi programmalary üçin C1 düzüjisini ulanmak has peýdaly diýip netije çykaryp bileris, sebäbi bu ýagdaýda programmanyň çalt başlamagy biziň üçin möhümdir. Serwer tarapy, uzak möhletli programmalar başlamak üçin has köp wagt alyp biler, ýöne geljekde işlemeli we öz funksiýasyny çalt ýerine ýetirmeli - bu ýerde C2 düzüjisi biziň üçin amatly. -clientJVM-iň x32 wersiýasynda Java programmasy işledilende, haýsy re modeimi we baýdaklary ulanmak isleýändigimizi el bilen kesgitläp bileris -server. Bu baýdak kesgitlenende, -clientJVM çylşyrymly baýt kodlaryny optimizasiýa etmez, bu programmanyň başlangyç wagtyny çaltlaşdyrar we sarp edilýän ýadyň mukdaryny azaldar. Baýdak görkezilende, -serverçylşyrymly kod kodlary optimizasiýalary sebäpli programma başlamak üçin has köp wagt gerek bolar we maşyn koduny saklamak üçin has köp ýady ulanar, emma programma geljekde has çalt işlär. JVM-iň x64 wersiýasynda baýdak -clienthasaba alynmaýar we amaly programma serweri konfigurasiýasy ulanylýar.

6. Netije

Bu, Java programmasyny düzmegiň we ýerine ýetirmegiň gysgaça synyny tamamlaýar. Esasy nokatlar:
  1. “Javac” düzüjisi, programmanyň deslapky koduny Java wirtual maşynynyň gurlan islendik platformasynda ýerine ýetirilip bilinýän kod koduna öwürýär;
  2. Compygyndydan soň, JVM emele gelen kod koduny düşündirýär;
  3. Java programmalaryny çaltlaşdyrmak üçin JVM, programmanyň iň ýygy ýerine ýetirilýän bölümlerini maşyn koduna öwürýän we ýatda saklaýan “Just-In-Time” düzmek mehanizmini ulanýar.
Bu makala, halaýan programmirleme dilimiziň işleýşine has çuňňur düşünmäge kömek etdi diýip umyt edýärin. Okanyňyz üçin sag boluň, tankytlar hoş geldiňiz!
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION