JavaRush /Java блогу /Random-KY /Машина коду жана байт коду: программаңыз кайсы тилде сүйл...

Машина коду жана байт коду: программаңыз кайсы тилде сүйлөйт?

Группада жарыяланган
Java менен жаңыдан тааныша баштагандар машина codeу жана byte codeу түшүнүктөрүн түшүнбөй калышат . Эмне алар? Кандай айырмачылыктар бар? Кыскача жазууда биз бул маселени биротоло жабуу үчүн алардын өзгөчөлүктөрүн мүмкүн болушунча жөнөкөй жана так сүрөттөөгө аракет кылабыз.
Машина codeу жана byte codeу: программаңыз кайсы тилде сүйлөйт?  - 1

Машина codeу

Процессор – бул өтө татаал жана өркүндөтүлгөн эсептегич. Анын көптөгөн эстутумдары бар (регистрлер деп аталат) жана алардын ортосунда ар кандай математикалык жана byte операциялары аткарылат. Машина codeу операциялардын ырааттуулугунун жана тартылган маалыматтардын жыйындысынын так сүрөттөлүшү. Чынында, бул сиздин компьютериңиздин процессору түшүнгөн жалгыз тил.

Тубаса туура келбестик

Анын үстүнө, бардык процессорлор бир тилде "сүйлөшөт". CISC жана RISC архитектураларынын ортосунда гана эмес , бул "лагердердин" ичинде да айырмачылыктар бар .

CISC (Complex Instruction Set Computing) - бул процессордун дизайн концепциясы, ал төмөнкү касиеттердин жыйындысы менен мүнөздөлөт:

  • көп командалар, узундугу боюнча ар кандай;
  • көптөгөн даректөө режимдери;
  • комплекстүү нускама codeдоо.
RISC (Reduced Instruction Set Computing) – кыскартылган нускамалар топтому бар процессор. Буйруктар бирдей форматта, кыска, жөнөкөй codeдоо менен.
Процессорлордун жаңы муундары эски муундагы моделдерге жөн эле белгисиз болгон кошумча нускамаларды киргизишет. Ушундан улам бир архитектура (же процессорлордун бир мууну) үчүн түзүлгөн программалар башка жабдыкта иштей алbyte. Мунун баары бизди башка компьютерлерде иштешин камсыз кылуу үчүн программаларды кайра компиляциялоого мажбурлайт. Бирок, кайра компиляциялоо процессорлордон гана эмес, программалардын жана операциялык системанын өз ара аракеттенишиндеги айырмачылыктардан улам да туура келет. Алардын айынан Linux астында “Windows” программасын, ал эми Windows астында “Linux” программасын иштетүү мүмкүн эмес.

Байтcode

Байтcode көп жагынан машина codeуна окшош, болгону ал чыныгы процессордон эмес, виртуалдык инструкциялардын топтомун колдонот. Мындан тышкары, ал программа иштеп жаткан чыныгы процессор үчүн буйруктардын аткарылышын оптималдаштырган JIT компиляторун колдонууга багытталган бөлүмдөрдү камтышы мүмкүн .
JIT компиляциясы (Just-in-time compilation, on-the-fly compilation) же динамикалык компиляция (динамикалык котормо) - бул byte codeду машина codeуна же түздөн-түз башка форматка компиляциялоо аркылуу byte codeду колдонгон программалык камсыздоо тутумдарынын натыйжалуулугун жогорулатуу технологиясы. программа иштеп жатат. "Расмий түрдө" Java-да 9-versionга чейин JIT компилятору гана болгон. Java 9да дагы бир компилятор пайда болду жана ал мөөнөтүнөн мурда түзүлөт (AoT). Бул функция Java класстарын виртуалдык машинада иштетүүдөн мурун жергorктүү codeго түзүүгө мүмкүндүк берет. Бул функция кичинекей жана чоң тиркемелерди ишке киргизүү убакыттарын жакшыртууга багытталган жана эң жогорку көрсөткүчкө чектелген таасири менен.
CISC процессорлору үчүн кээ бир инструкциялар процессор тарабынан колдоого алынган татаал структураларга айкалыштырылышы мүмкүн, ал эми RISC үчүн , тескерисинче, буйруктардын жөнөкөй ырааттуулугуна бөлүнүшү мүмкүн.

Ошондой эле виртуалдык ОС

Бирок, byte codeу процессордун көрсөтмөлөрүн гана камтыbyte. Ал ошондой эле виртуалдык операциялык система менен өз ара аракеттенүү логикасын камтыйт, бул тиркеменин жүрүм-турумун компьютерде колдонулган операциялык системадан көз карандысыз кылат. Бул системалык чалуулар менен иштөө жана GUI көбүнчө программа иштеп жаткан ОСтен көз карандысыз болгон JVMде ачык көрүнүп турат . Жалпысынан алганда, JVM виртуалдык системаны/жабдыкты гана түзгөн Virtual Box сыяктуу чечимдерден айырмаланып, программалык процессти ишке киргизет .

JVM ушундай жалгызбы?

Албетте, жок. Ошол эле DotNet CLI да виртуалдык машина болуп саналат, ал көбүнчө x86 шайкеш процессорлору бар Windows менен иштеген компьютерлерде колдонулат. Бирок, анын башка системалар үчүн ишке ашырылышы бар: ал үчүн тиркемелер ARM (RISC) туура келген процессорлордо иштеген Windows RTде иштеши керек, же сиз аларды Linux/OSXде Mono чөйрөсүндө иштете аласыз , ал үчүнчү тарап болуп саналат (ошондуктан). толук шайкеш келбейт) бул платформалар үчүн 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