Just-in-time xөрвүүлэгч

Чөлөөт нэвтэрхий толь — Википедиагаас
Jump to navigation Jump to search

Just in time - Sun Microsystem нь 1995 онд Java хэмээх алдартай объектэд тулгурласан програмын хэлийг танилцуулсан. Үүний хажуугаар хэлний шинж чанар мөн том API номын сан,java нь ихэвчлэн шинж чанараар нь Java virtual machine (JVM) машинд бэлтгэж өгдөг. Java объектуудын шинж чанар нь класс нөхцөлтэй, java програм нь 1 эсвэл олон классаас бүрддэг. Java класс нь тодорхой бус байткод архитектурыг хөрвүүлэгчид output.classs файл гэж илэрхийлэх бөгөөд энэ нь JVM машины гүйцэтгэлд ажиллана. JVM машины гүйцэтгэлд ажиллаж байна. JVM машин нь компьютерт хийсвэр.

Зураг 2.17-д класс ачаалагч мөн java гүйцэтгэгч нь тодорхоы бус байт код архитектурыг гүйцэтгэн бүрдэж байгааг диаграмаар  
харуулсан. Класс ачаалагч нь ачаалахдаа хөрвүүлэгдэх .класс файл гэх ба түүнчлэн java програм мөн Java API нь java 
гүйцэтгэгчээр гүйцэтгэгддэг. Класс ачаалагдсаны дараа, хянах хэрэгсэл .класс файл нь хэрэгжиж байгаа java байт код нь мөн
стекийн доорх урсгал эсвэл илүүдэл урсгал зэргийг шалгана. Байт код хангагч нь арифметик заагчыг ихэвчлэн 
биелүүлэхгүй, зөвшөөрөгдөөгүй санах ойн хандалтаар  хангахгүй. Хэрэв классын дамжуулалын биелэл, энэ нь java хөрвүүлэгчээр ажиллана.  

JVM нь ихэвчлэн автоматаар санах ойд хаягдал цуглуулганд ажиллаж удирдана. Санах ойн зарлалын ажил нь системд тийм ч удаан ашиглагдаж мөн буцахгүй. Виртуаль машины java програмын нэмэгдсэн гүйцэтгэл нь хаягдал цуглуулалтын алгоритмд чиглэсэн судалгааны ажил их байдаг. JVM нь програм хангамжийн топ удирдах систем болох Windows, Linux эсвэл Mac OSX эсвэл вэб ачаалагч зэргээр хангагддаг. Үнэндээ JVM нь техник хангамжийн чипийн тусгай загварын ажиллаж буй java програмаас хангагддаг. Хэрэв JVM нь програм хангамжаас хангагдах юм бол, java хөрвүүлэгч нь байт кодын үйлдлүүдээр цагт нэг удаа л хөрвүүлэгдэнэ. Програм хангамжийн хурдан ашиглагдах техник хангамж бол “just in time” хөрвүүлэгч юм. Мөн Java compiler буюу Жава хөрвүүлэгч нь Жава дээр бичигдсан кодыг бүтэн машины хэл болох битэд хөрвүүлдэггүй юм байна. Харин хагас боловсруулсан бүтээгдхүүн гэдэг шиг хагас хөрвүүлж Java Bytecode гаргаж авдаг ажээ. Энэ кодыг зөвхөн Java Virtual Machine ажиллуулж дөнгөдөг юм. Тэгэхээр JVM нь ихээхэн чухал үүрэгтэй юм байна. JVM - ийг тухайн үйлдлийн системд зориулан тусгайлан бичсэн байдаг. Тэгэхээр энэхүү VM маань эцсийн бүтээгдхүүн болох машин дээр ажиллах боломжтой бит кодыг үүсгэдэг байна. Бас VM нь тоног төхөөрөмжийн график хэсэг, санах ой, сүлжээ гэх мэт амин чухал зүйлсийг удирдана. Ихэнх тохиолдолд Java Bytecode нь саадгүй ажилладаг боловч зарим хэт онцгой машин дээр JIT хэмээх хөрвүүлэгч шаардлагатай болдог. Тэгэхээр таны бичсэн код тань JVM хэмээх системээр дамжиж байж хэрэгждэгийг ойлгож авсан байх. Тэгэхээр програмын ажиллагаа яалт ч үгүй удаан байхаас аргагүй болж байгаа юм. Яагаад гэвэл C/C++ дээр бичсэн код нь шууд машины бит кодонд хөрвүүлэгдсэн байдаг тул ажиллагааны хувьд маш хурдан байдаг бол Жавагийн эх код нь заавал ЖаваВиртуалМашинаар дамжина. Энэ үүднээс удаан ажилладаг гэсэн шүүмжлэлийг байнга сонсдог байсан бөгөөд энэ нь түүний гол сул тал байлаа. Гэхдээ сүүлийн үеийн JVM нь төрөл бүрийн технологи, аргуудыг хэрэглэсэнээр дутахгүй хурдан ажилладаг болоод байна. Гэхдээ орчин үеийн тоног төхөөрөмжүүд тооцоолох чадвар нэмэгдсэнээр энэхүү дутагдал онцын мэдэгдэхээ болиод байгаа юм. Энэ бол програм яг ажиллах үед нь Жава байт кодыг машины код руу хөрвүүлнэ гэсэн үг. Ингэснээр програм илүү хурдан ажиллах бололцоотой болдог. Гэвч энэ арга нь Overhead буюу хэт ачаалалд орох эрсдэлтэй. Иймээс сүүлийн үеийн VM-ууд динамик маягийн холимог аргыг хэрэглэдэг болоод байна. Энэхүү динамик арга нь програмын амин чухал хэсгүүдийг хэрхэн хөрвүүлэхээ сайтар тооцоолж чаддаг юм. Ингэснээр эцсийн дүндээ таны бичсэн код C/C++ дээр бичсэнээс дутахгүй хурдан ажиллаж чадах билээ. Хурдыг нэмэгдүүлэх өөр нэг арга бол статик хөрвүүлэгч ашиглах явдал юм. Энэ хөрвүүлэгч нь шулуухан машины эх код руу хөрвүүлчихдэг. Өөрөөр хэлбэл Жавагийн сонгодог байткод үүсгэхгүй гэсэн үг юм. Ийм статик хөрвүүлэгчийн жишээ гэвэл GCJ юм. Гэвч ингэх юм бол өвөрмөц онцлог огтхон ч үр дүнгүй болчихож байгаа юм. Ийм арга хэрэглэх нь заавал Жава дээр бичих огтхон ч шаардлагагүй болж байгаа бөгөөд C/C++ дээр бичиж байгаагаас огтхон ч ялгаагүй болж байна. Java функц нь анхны удаа дуудагдсан, функцын байт кодууд удирдлагын системийн үндсэн машины хэл рүү хөрвүүлсэн. Эдгээр үйлдлүүд нь кешлэгдсэн, энэ нь функцийн дараагийн дуудагдан гүйцэтгэгдэн хэрэглэгдсэн, үндсэн машины командууд мөн үйлдлүүдийн байт кодууд нь бүхэлдээ дахин хэрэг болохгүй. Техникт JVM нь хурдан ажилладаг нь техник хангамжид java байт кодыг гүйцэтгэх тусгай Java чип байдагтай холбоотой. Яг л үндсэн код шиг, иймээс програм хөрвүүлэгч эсвэл тухайн агшинд хөрвүүлэх зэргийг алгасах (тойрч гарах) хэрэгтэй юм.

Зурагg.jpeg
Эх сурвалж: www.wikipedia.org, Operating System Concepts 7th edition