Sunday, September 27, 2015

5 JVM

Лекц – 5 JVM
Java virtual machine (товчоор JVM) буюу Жава виртуал машин нь Java Virtual Machine Specification-ы хэрэгжүүлэлт бөгөөд хөрвүүлэгдсэн жава бинар код буюу байткодыг компьютерын процессорт (техник платформ) танигдахаар дамжуулагч юм. Ингэснээр Жава дээр бичигдсэн програм нь өөр платформ дээр бичигдсэн ч дахин бичих, дахин хөрвүүлэлт шаардахгүйгээр бусад платформ дээр ажилладаг. Жава виртуал машин нь платформуудын тодорхой заавруудын урт болон бусад нөхцлийг мэддэг. Java Virtual Machine Specification нь бодит машин юм уу процессор гэхээсээ илүү абстракт ойлголт бөгөөд зааварчилгаа регистрүүдийн бүрдэл, стак, аргуудыг агуулдаг. Java програм нь бит биш байт кодуудад хөрвөн ажилладаг бөгөөд энэхүү байт кодуудыг зөвхөн Java Virtual Machine (JVM) хэмээх систем ажиллуулдаг юм. Харин JVM нь платформ болгонд зориулагдан тусдаа хийгдсэн байдаг тул таны бичсэн програм, код аль ч үйлдлийн систем, платформ дээр ажиллах болж байгаа нь түүний хамгийн өвөрмөц онцлог юм. Java-гийн байт кодууд нь JVM агуулах ямар ч платформ дээр биелэгддэг тул Java хэлийг авсаархан (portable) хэлэнд тооцдог. Java виртуаль машин (Virtual Machine) нь байт кодыг машины хэлрүү хөрвүүлдэг. Тэгэхлээр Java Virtual Machine нь байт кодын интерпретатор (interpreter) юм. Java Virtual Machine-ын үзүүлэлт нь (abstract computer)-т зориулагдсан. Class нь аль ч Java програмаас файлыг цуглуулдаг ба Java хөрвүүлэгч нь Java API-ийг гүйцэтгэдэг. Class-ийг ачаалсаны дараа шалгагч class нь file-ийн ажиллагаатай үгүйг Java байткодоор шалгадаг ба системд илүү ч үгүй дутуу ч үгүй оруулдаг. Үүгээр дамжуулан byte-code-ийн pointer, arithmetic үзүүлэлтийг баталгаажуулна. Энэ arithmetic үзүүлэлт нь хууль бусаар санах ойд нэвтрэхийг олгодог. Хэрэв class нь хяналтыг давбал энэ Java хөрвүүлэгч дээр ажиллана. Бас Java нь Garbage Collection үзүүлэлтээр санах ойг автоматаар зохицуулна. Обьектоос санах ойг засах үйл ажиллагаа нь дахин хэрэглэгдэхгүй бөгөөд системрүү буцах боломжгүй. Олон хайгуул нь garbage collection алгоритм дээр төвлөрөх бөгөөд энэ нь Java програмын үзүүлэлтийг програмын хэл дээр нэмэгдүүлнэ. Java Virtual Machine нь программ хангамжийг үйлдлийн системд гүйцэтгэнэ. Үүнд Windows, Linux, Mac OSX, зарим вэб хөтөчид хамаарна. Java Virtual Machine нь техник хангамжийг гүйцэтгэхдээ онцгой тусдаа бэлтгэсэн Chip дээр Java програмыг суулгана. Хэрэв Java Virtual Machine нь программ хангамж дээр суурилагдсан бол Java хөрвүүлэгч нь byte-code-ийн үйлдлийг нэг нэгээр нь хийнэ. Хурдан програм хангамжийн техникийг just-in-time зохиогчоор хэрэглэх юм. Ийнхүү анх удаагаа Java хэлний хэрэглээний арга барил нээгдсэн. Byte-code нь үүний хэлбэрийг энгийн техникийн хэл болгон системд нэвтрүүлсэн.
Java VM гэж юу болох тухай дурдсан. Энэ нь Java платформын үндсэн суурь бөгөөд төрөл бүрийн тоноглолд тулгуурласан платформруу шилжүүлж болдог.
Java API
нь хэрэглэгчийн график интерфейс (GUI) элементүүд мэтийн ашиглахад бэлэн програмын компонентын цуглуулга юм. Java API нь багц хэмээн нэрлэгдэх анги болон интерфейсүүдийн сангуудад хуваагддаг.
Java API
доторх зарим багцуудын үйл ажиллагааны талаар дараагын Java технологи юу хийж чадах вэ? гэсэн хэсэгт тайлбарлана.
Java
платформ дээр гүйж буй програмыг дараах зураг дээр дүрслэн харууллаа.
Энд харуулснаар Java API, Java VM хоёр нь Java програмыг тоноглолоос нь тусгаарлаж байна.
Програмыг эмхэтгэсний дараа үүсэх кодыг төрөлх код гэдэг. Эмхэтгэсэн код нь ямар нэг тодорхой тоноглол платформ дээр ажиллана. Платформ хамаардаггүй орчин гэдэг үүднээсээ Java платформ нь төрөлх кодоос арай удаан байдаг тал бий. Гэвч ухаалаг эмхэтгүүр, сайн тохиргоо хийгдсэн интерпрец дотор Just-In-Time?ByteCode? ын эмхэтгүүрүүд нь програмын хүчин чадлыг төрөлх кодоос дутахгүй сайжруулах чадвартай байдаг.

Програмчлалын хэл гэж юу вэ?

Орчин үеийн зарим автомат төхөөрөмж урьдчилан бэлдэж өгсөн зааврын дагуу уг төхөөрөмж дээр биелэгдэх боломжтой олон тооны эгэл үйлдлүүдийг дараалан биелүүлэх замаар илүү нарийн төвөгтэй үйлдлийг гүйцэлдүүлдэг. Ерөнхийд нь, ийм заавар бэлдэж өгөх үйл ажиллагааг програмчлал, уг төхөөрөмжид ойлгогдохоор заавар бэлдэх аргыг програмчлалын хэл гэнэ. Жишээлбэл, зарим тооны машин дээр дараах мөрийг шууд бичиж өгч бодуулж болно: 5*(2+3)“. Энд бид тооны машинд 2 дээр 3-ыг нэмээд үр дүнг нь 5-аар үржүүл гэсэн заавар өгсөн хэрэг. Энэ жишээнд програмчлалын хэл маань тоонууд, арифметикийн үйлдлүүд ба хаалтуудыг ашиглаж зөв илэрхийлэл бичих дүрмүүдээс тогтоно гэсэн үг. Бидний бичсэн дээрх програмыг ажиллуулахын тулд = товчийг дарах шаардлагатай боловч хялбарчлах үүднээс энд үүнийг манай програмын хэсэг биш гэж үзэж байна.
Хамгийн анхны програмчлалын хэл Чарльз Баббажийн аналитик машинтай хамт үүссэн гэж үзэж болно. Аналитик машины үндэс нь механикийн араанууд байсан ба араануудыг том эсвэл жижиг араануудаар солих замаар програмчлах зарчимтай байжээ. 1942 онд бүтээгдсэн анхны электрон компьютер ENIAC үндсэндээ аналитик машины цахилгаан хувилбар нь байсан бөгөөд түүнийг програмчлах арга нь (програмчлалын хэл нь) одоогийн гэр ахуйн цахилгаан халаагуурын тохируулгыг санагдуулам олон тооны утаснуудын холболтыг өөрчлөх явдал байсан байна.
Жон фон Нейман 1945 онд Жон Маухли, Преспер Эккерт нартай хамтаар EDVAC компьютерийн дизайн дээр ажиллаж эхлэх үедээ компьютерийг програмчлахын тулд утаснуудыг сольж холбох нь бүдүүлэг хэрэг бөгөөд програм нь компьютерийн санах ойд хадгалагдаж, компьютер түүнийг уншиж зохих үйлдлүүдийг гүйцэтгэдэг байх боломжтой гэдгийг анх тоймлож үзүүлсэн. Түүнээс өмнө компьютерүүд оролтын ба гаралтын өгөгдөл болон тооцооны үед бий болсон завсрын үр дүнгүүдийг хадгалах санах ойтой байсан ба энэ санах ойд програмыг хадгалах, өөрөөр хэлбэл компьютер ямар ямар үйлдлийг гүйцэтгэх вэ гэсэн зааврыг оролтын өгөгдлийн нэг хэсэг мэтээр үзэх нь цоо шинэ санаа байжээ. Энэ арга нь юуны түрүүнд програмыг соронзон хальсан дээр хадгалах, дахин ачаалах боломжийг өгнө. Үүнтэй холбоотой өөр нэг боломж бол програм ажиллах явцад буй болсон завсрын үр дүнгээс хамаарч санах ойн хаана байрлаж буй зааврыг гүйцэтгэх вэ гэдгийг шийдэж болох боломж юм.