JVM කියන්නෙ මොකක්ද?








JVM එක ගැන කෙටියෙන් කියනවනම් JVM කියන්නෙ Java Virtual Machine. මේකෙන් කරන්නෙ Byte Code Execute කරන එක. එහෙම නැත්තම් මේකෙන් කරන්නෙ Byte Code එක අපි Install කරලා තියෙන Operating System එකට තේරුම් ගන්න පුලුවන් විදියට Convert කරන එක. මං කලින් කිව්වනෙ Windows, Mac, Linux වලට වෙන වෙනම අදාල JRE හෝ JDK එක ගන්න ඕන කියලා. ඉතිං අපේ Program එක මොන විදියේ එකක් උනත් අපේ Operating System එකට තේරුම් ගන්න පුලුවන් විදියට Convert කරනවා. අපි  වෙනස් වෙනස්  ජාවා Program 3ක් Run කරනවා කියලා හිතන්නකෝ. එතකොට අපේ Machine එකේ JVM 3ක් Create වෙනවා. නමුත් මේක වැඩ කරන විදිය ගොඩක් අය දන්නෙ නෑ.


Virtual Machine වර්ග 2ක් තියෙනවා. ඒවා SVM (System Based Virtual machine), AVM (Application Based Virtual Machine). SVM වලට Hardwareත් ඇතුලත් වෙනවා. උදා:- Hypervisor, Xen.  AVM වලට Hardware ඇතුලත් වෙන්නෙ නෑ. මේකට Software එකක් ඕන වෙනවා තවත් Software එකක් Run කරන Environment එකක් විදියට. උදා:- JVM (Java Virtual Machine), CLR (Common Language Runtime) , PVM (Parrot Virtual machine).

JVM එකේ ප්‍රධාන කාර්‍යයන් 3ක් තියෙනවා. ඒවා තමයි.
01. Loading (Class Loader)
02. Storing (Memory Area)
03. Execution (Execution Engine)

මෙතනින් Loading ගැන කතා කරනකොට Loading එකෙත් Step 3ක් තියෙනවා. ඒවා,
01. Loading
02. Linking
03. Initializing

Loading


මේකෙදි Loading ගත්තොත් Class Loader තමයි මේ දේ කරන්නෙ. Class Loader වර්ග කිහිපයක් තියෙනවා. Boostrap Class Loader, Custom Define Class loader වගේ වෙනවා. Class Loader ගැන වැඩිදුර තොරතුරු මෙතනින්  බලන්න. මේකෙදි Class Loader ගෙ Main Responsibility එක තමයි. අපේ Class File ටික අරගෙන Memory Area එකට Load කරන එක. ඉතින් මෙහෙම Load කරද්දි මෙයා බලනවා මෙන්න මේ දේවල් හරියට තියෙනවද කියලා.

01. Fully Qualified Class Name (Package Name එකත් එක්ක Class Name එක )
02. Variable Information
03. Immediate Parent Information
04. මේක Class එකක්ද Interface එකක්ද නැත්නම් Enum එකක්ද යන වග.

ඉතිං මෙහෙම හැම Class එකක්ම Load කරද්දි JVM එකෙන් හදනවා class Class එකේ Object එකක්. මේ Object එකට අපේ class වල තොරතුරු ටික Store කරගන්නවා.


Linking


Linking ගැන කතා කලොත් Linking තවත් කොටස් 3කට බෙදන්න පුලුවන්. ඒවා,

01. Verification
02. Preparation
03. Resolution


Verification

තව Program එකක් තියෙනවා. Byte Code Verifier කියලා. Class File Load කරද්දි මේ Program එකෙන් බලනවා අපේ Program එක,

01. Compile කලේ නිවැරදි Compiler කෙනෙක්ද
02. නිවැරදි Structure එකකට තියෙනවද
03. නිවැරදි Format එකකට තියෙනවද

කියලා. ඉතින් මේ මොකක් හරි එකක ප්‍රශ්නයක් තිබ්බොත් Run Time Error එකක් එනවා Verifier Exception කියලා.

Preferation

අපි Run කරන Program එකේ Instance හෝ Static Variable තියෙනවනම් මේකෙදි කරන්නෙ ඒ Variable වලට Default Value එක Assign කරන එක. අපි Assign කරලා තියෙන Value එක නෙවෙයි.


Resolution

මේකෙදි, අපි Program එකේදි use කරලා තියෙනවනෙ Domain Specific Words, ඒ කියන්නෙ Class Name එකක් විදියට අපි Use කරලා තියෙනවා කියලා හිතමුකො Car කියලා." class Car{} ". මේකෙදි Car කියන එක අපේ Machine එක දන්නෙ නෑනේ. JVM එක මේකට Direct Link එක Assign කරනවා.


Initializing

Preferation එකේදි Assign කරනවනෙ Default Value එක. ඉතිං මේකේදි Assign කරනවා අපි Assign කරලා තියෙන Value එක.




Reference :-https://www.youtube.com/playlist?list=PLD-mYtebG3X-rF1hU16AC3Rf9E-mAAkXJ

Comments