JavaRush /Java блогы /Random-KK /Машина коды және байт коды: сіздің бағдарламаңыз қай тілд...

Машина коды және байт коды: сіздің бағдарламаңыз қай тілде сөйлейді?

Топта жарияланған
Java тілімен енді ғана танысып жатқандар машиналық code пен byte codeы ұғымдарына қатысты шатасуы мүмкін . Олар не? Қандай айырмашылықтар бар? Қысқаша жазбада біз бұл мәселені біржола жабу үшін олардың ерекшеліктерін мүмкіндігінше қарапайым және анық сипаттауға тырысамыз.
Машина codeы және byte codeы: сіздің бағдарламаңыз қай тілде сөйлейді?  - 1

Машина codeы

Процессор , шын мәнінде, өте күрделі және жетілдірілген калькулятор. Оның көптеген жад орындары (регистрлер деп аталады) бар және олардың арасында әртүрлі математикалық және byte операциялары орындалады. Машина codeы - бұл операциялардың реттілігі мен тартылған деректер жиынтығының дәл сипаттамасы. Шын мәнінде, бұл сіздің компьютеріңіздің процессоры түсінетін жалғыз тіл.

Туа біткен сәйкессіздік

Сонымен қатар, барлық процессорлар бір тілде «сөйлемейді». CISC және RISC архитектуралары арасында ғана емес , сонымен қатар осы «лагерьлерде» де айырмашылықтар бар .

CISC (Complex Instruction Set Computing) - келесі қасиеттер жиынтығымен сипатталатын процессорды жобалау тұжырымдамасы:

  • ұзындығы бойынша әртүрлі көптеген командалар;
  • көптеген addressтеу режимдері;
  • күрделі командаларды codeтау.
RISC (Reduced Instruction Set Computing) – қысқартылған командалар жинағы бар процессор. Пәрмендер бір пішімде, қысқа, қарапайым codeтаумен.
Процессорлардың жаңа буындары ескі ұрпақ үлгілеріне беймәлім нұсқаулардың қосымша жинақтарын енгізеді. Осыған байланысты бір архитектура (немесе процессорлардың бір буыны) үшін құрастырылған бағдарламалар басқа жабдықта жұмыс істей алмайды. Мұның бәрі бізді басқа компьютерлерде жұмыс істейтініне көз жеткізу үшін бағдарламаларды қайта құрастыруға мәжбүр етеді. Дегенмен, тек процессорларға ғана емес, сонымен қатар бағдарламалар мен операциялық жүйенің өзара әрекеттесуіндегі айырмашылықтарға байланысты қайта құрастыруға тура келеді. Олардың арқасында Linux жүйесінде «Windows» бағдарламасын, ал Windows жүйесінде «Linux» бағдарламасын іске қосу мүмкін емес.

Байтcode

Байтcode көп жағынан машиналық codeқа ұқсас, тек ол нақты процессордан емес, виртуалдыдан алынған нұсқаулар жинағын пайдаланады. Сонымен қатар, ол JIT компиляторын пайдалануға бағытталған бөлімдерді қамтуы мүмкін , ол бағдарлама жұмыс істеп тұрған нақты процессор үшін командалардың орындалуын оңтайландырады.
JIT компиляциясы (Just-in-time compilation, on-the-fly compilation) немесе динамикалық компиляция (динамикалық аударма) – бұл byte codeты машиналық codeқа немесе тікелей басқа форматқа құрастыру арқылы byte codeты пайдаланатын бағдарламалық жүйелердің өнімділігін арттыру технологиясы. бағдарлама жұмыс істеп тұр. Java-да «ресми түрде» 9 нұсқасына дейін тек JIT компиляторы болды. Java 9-да басқа компилятор пайда болды және ол мерзімінен бұрын құрастырады (AoT). Бұл мүмкіндік Java сыныптарын виртуалды машинада іске қоспас бұрын жергілікті codeқа құрастыруға мүмкіндік береді. Бұл мүмкіндік ең жоғары өнімділікке шектеулі әсер ететін шағын және үлкен қолданбалардың іске қосу уақытын жақсартуға арналған.
CISC процессорлары үшін кейбір нұсқауларды процессор қолдайтын күрделі құрылымдарға біріктіруге болады, ал RISC үшін , керісінше, қарапайым нұсқаулар тізбегіне бөлуге болады.

Сондай-ақ виртуалды ОЖ

Дегенмен, byte codeында процессор нұсқаулары ғана емес. Ол сонымен қатар виртуалды операциялық жүйемен әрекеттесу логикасын қамтиды, бұл қолданбаның әрекетін компьютерде қолданылатын операциялық жүйеден тәуелсіз етеді. Бұл JVM жүйесінде анық көрінеді , мұнда жүйелік қоңыраулармен жұмыс және графикалық интерфейс көбінесе бағдарлама жұмыс істейтін ОЖ-дан тәуелсіз болады. Жалпы алғанда, JVM виртуалды жүйені/аппараттық құралды ғана жасайтын Virtual Box сияқты шешімдерден айырмашылығы, бағдарлама процесін іске қосуды эмуляциялайды .

JVM жалғыз осындай ма?

Әрине жоқ. Сол DotNet CLI да виртуалды машина болып табылады, ол көбінесе x86 үйлесімді процессорлары бар Windows жүйесімен жұмыс істейтін компьютерлерде қолданылады . Дегенмен, оның басқа жүйелер үшін іске асырылуы бар: оған арналған қолданбалар ARM (RISC) үйлесімді процессорларында жұмыс істейтін Windows RT жүйесінде жұмыс істеуі керек немесе сіз оларды үшінші тарап болып табылатын Mono ортасында Linux/OSX жүйесінде іске қоса аласыз (сондықтан да). толық үйлесімді емес) осы платформалар үшін DotNet іске асыру. Осылайша, JVM сияқты бұл платформа әртүрлі процессорларда және әртүрлі операциялық жүйелерде жұмыс істейді. Көптеген ұқсас шешімдер бар (ескі де, жаңа да): LLVM , Flash SWF және т.б. Кейбір бағдарламалау тілдерінің өздерінің виртуалды машиналары бар. Мысалы, CPython PY көздерін PYC файлдарына құрастырады - PVM жүйесінде іске қосу үшін дайындалған құрастырылған byte code . Немесе әлдеқайда ескі мысал бар - Lisp FASL (Fast Load) файлдарына құрастырылуы мүмкін . Шындығында, оларда бастапқы codeтан генератор құрастырған AST ағашы бар. Бұл файлдарды Lisp интерпретаторы әртүрлі платформаларда оқуға және орындауға немесе қазіргі уақытта қолданылатын аппараттық архитектура үшін машина codeын жасау үшін пайдалануға болады .
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION