Java ilə yeni tanış olmağa başlayanlar tez-tez
maşın kodu və
bayt kodu anlayışları ilə bağlı çaşqınlıq yaşayırlar . Onlar nədirlər? Fərqlər nələrdir? Qısa bir qeyddə, bu məsələni birdəfəlik bağlamaq üçün onların xüsusiyyətlərini mümkün qədər sadə və aydın şəkildə təsvir etməyə çalışacağıq.
Maşın kodu
Prosessor mahiyyət etibarilə çox mürəkkəb və təkmil kalkulyatordur. Onun üzərində və arasında müxtəlif riyazi və bayt əməliyyatlarının yerinə yetirildiyi bir çox yaddaş yerləri (registrlər adlanır) var. Maşın kodu əməliyyatların ardıcıllığının və cəlb olunan verilənlər toplusunun dəqiq təsviridir. Əslində, bu, kompüterinizin prosessorunun başa düşdüyü yeganə dildir.
Anadangəlmə uyğunsuzluq
Üstəlik, bütün prosessorlar eyni dildə “danışmır”.
Təkcə CISC və
RISC arxitekturaları arasında deyil , həm də bu “düşərgələr” daxilində də fərqlər var .
CISC (Complex Instruction Set Computing) aşağıdakı xüsusiyyətlər dəsti ilə xarakterizə olunan prosessor dizayn konsepsiyasıdır:
- uzunluğu fərqli olan çoxlu əmrlər;
- bir çox ünvanlama rejimi;
- kompleks təlimat kodlaşdırması.
RISC (Reduced Instruction Set Computing) - azaldılmış təlimat dəstinə malik prosessor. Əmrlər eyni formatda, qısa, sadə kodlaşdırma ilə. |
Yeni nəsil prosessorlar köhnə nəsil modellərə sadəcə olaraq məlum olmayan əlavə təlimat dəstləri təqdim edir. Bu səbəbdən bir arxitektura (yaxud bir nəsil prosessor) üçün tərtib edilmiş proqramlar digər avadanlıqlarda işləyə bilməz. Bütün bunlar bizi proqramların başqa kompüterlərdə işləməsini təmin etmək üçün onları yenidən tərtib etməyə məcbur edir. Bununla belə, yalnız prosessorlara görə deyil, həm də proqramların və əməliyyat sisteminin qarşılıqlı təsirindəki fərqlərə görə yenidən tərtib etməlisiniz. Məhz bunlara görə Linux altında “Windows” proqramını, Windows altında isə “Linux” proqramını işlətmək mümkün deyil.
Bayt kodu
Baytkod bir çox cəhətdən maşın koduna bənzəyir, yalnız o, real prosessordan deyil, virtualdan olan bir sıra təlimatlardan istifadə edir. Bundan əlavə, o , proqramın işlədiyi real prosessor üçün əmrlərin icrasını optimallaşdıran
JIT kompilyatorunun istifadəsinə yönəlmiş bölmələri əhatə edə bilər .
JIT kompilyasiyası (Just-in-time compilation, on-the-fly compilation) və ya dinamik kompilyasiya (dinamik tərcümə) bayt kodunu maşın koduna və ya bilavasitə başqa formata tərtib edərkən bayt kodunu istifadə edən proqram sistemlərinin performansını artırmaq üçün texnologiyadır. proqram işləyir. “Rəsmi olaraq” Java-da 9-cu versiyaya qədər yalnız JIT kompilyatoru var idi. Java 9-da başqa bir kompilyator meydana çıxdı və o, vaxtından əvvəl tərtib edir (AoT). Bu xüsusiyyət virtual maşında işləməzdən əvvəl Java siniflərinin yerli koda yığılmasına imkan verir. Bu funksiya həm kiçik, həm də böyük tətbiqlər üçün işə başlama vaxtlarını yaxşılaşdırmaq üçün nəzərdə tutulub və bu, pik performansa məhdud təsir göstərir. |
CISC prosessorları üçün bəzi təlimatlar prosessor tərəfindən dəstəklənən daha mürəkkəb strukturlarda birləşdirilə bilər və
RISC üçün , əksinə, daha sadə təlimat ardıcıllığına bölünə bilər.
Həmçinin virtual OS
Bununla belə, bayt kodu yalnız prosessor təlimatlarını ehtiva etmir. O, həmçinin virtual əməliyyat sistemi ilə qarşılıqlı əlaqə üçün məntiqi ehtiva edir ki, bu da proqramın davranışını kompüterdə istifadə olunan əməliyyat sistemindən müstəqil edir.
Bu JVM- də aydın görünür , burada sistem zəngləri ilə iş və
GUI çox vaxt proqramın işlədiyi ƏS-dən müstəqildir. Ümumiyyətlə,
JVM yalnız virtual sistem/avadanlıq yaradan
Virtual Box kimi həllərdən fərqli olaraq proqram prosesinin işə salınmasını təqlid edir .
JVM belə yeganədir?
Qətiyyən yox. Eyni
DotNet CLI də virtual maşındır və ən çox
x86 uyğun prosessorları olan Windows ilə işləyən kompüterlərdə istifadə olunur . Bununla belə, onun digər sistemlər üçün tətbiqi mövcuddur: onun üçün proqramlar
ARM (RISC) uyğun prosessorlarında işləyən
Windows RT- də işləməlidir və ya siz onları üçüncü tərəf olan (və buna görə də)
Mono mühitində
Linux/OSX- də işlədə bilərsiniz. tam uyğun deyil) bu platformalar üçün
DotNet tətbiqi . Beləliklə, bu platforma,
JVM kimi , müxtəlif prosessorlarda və müxtəlif əməliyyat sistemlərində işləyir. Daha çox oxşar həllər var (həm köhnə, həm də yeni):
LLVM ,
Flash SWF və s. Bəzi proqramlaşdırma dillərinin öz virtual maşınları var. Məsələn,
CPython PY mənbələrini
PYC fayllarına -
PVM- də işləmək üçün hazırlanmış tərtib edilmiş bayt koduna tərtib edir . Və ya daha qədim bir nümunə var -
Lisp FASL (Fast Load) fayllarına yığıla bilər . Əslində, onlar mənbə kodundan generator tərəfindən qurulmuş
bir AST ağacını ehtiva edirlər. Bu fayllar müxtəlif platformalarda
Lisp tərcüməçisi tərəfindən oxuna və icra edilə bilər və ya hazırda istifadə olunan aparat arxitekturası üçün maşın kodu yaratmaq üçün istifadə edilə bilər.
GO TO FULL VERSION