Sunday, September 10, 2017

Java Byte Code, Interpreter and JIT

සාමන්යෙන් program එකක් intermediate ආකාරයට compile කරලා ඒක virtual machine එකකින් interpret (අර්ථ වින්‍යාස කරොත් / පහදලා දුන්නොත්) ඒක කෙලින්ම executable code එකට compile කරලා run කරනවට වඩා. මන්දගාමී වෙනවා. 
කෙසේ වෙතත් Java සමග මේ දෙකේ වෙනස සාමාන්‍ය අවශ්‍යතා සඳහා එතරම් වැදගත් වෙන්නේ නැහැ. මොකද byte code හොඳට optimize කරලයි තියෙන්නේ. එනිසා අපි හිතනවට වඩා වේගයෙන් byte code execute වෙනවා.
Java නිර්මාණය කරලා තියෙන්නේ Interpreted language එකක් විදිහට, ඉතින් Java ළඟ මොකුත් නැහැ, වේගය වැඩි කිරීම සඳහා byte code, native code බවට පත්කිරීමේ on the fly compilation එක නතර කරන්න, 
මේ හේතුව නිසා HotSpot තාක්ෂණය හඳුන්වලා දුන්නා Java හි ප්‍රථම එළිදක්මෙන් පසු ඉක්මනින්ම. ඉතින් මේ HotSpot තාක්ෂණය මගින් byte code සඳහා Just in time (JIT) compiler එක සපයනවා. JIT compiler එකත් JVM එකේම කොටසක් ඉතින් මේකෙන් කරන්නේ තෝරාගත් byte code අවශ්‍යතාවයන්ට අනුව කොටස්, කොටස් වශයෙන් real time binary බවට පත් කරණ එක(ඒ කියන්නේ program එක run කරණ අවස්ථාවේ), අපි සැලකිලිමත් ව තේරුම් ගත යුතු දෙයක් තමයි Java, program එකක් සම්පූර්ණයෙන්ම compile කිරීම ප්‍රයෝගික නැහැ කියන එක. මොකද Java මගින් විවිද run time පරීක්ෂාවන් සිදු කරනවා, ඉතින් ඒවා කරන්න පුළුවන්නේ run time එකේදී විතරයි,
ඒ වෙනුවෙන් තමා JIT compiler එක අවශ්‍යතාවයන්ට අනුව, සම්පූර්ණ program එක නෙවෙයි අවශ්‍ය කොටස් ධාවන අවස්තාවේදී compile  කරන්නේ, ඉතුරු byte code සාමාන්‍ය ආකාරයට interpret  කරනවා. ඕක තමා JIT එකෙන් ලැබෙන ප්‍රයෝජනය. 
කෙසේ වෙතත්  JIT එක මගින් performance සදහා වැදගත් මෙහෙයක් ඉටුවෙනවා. 
byte code සඳහා dynamic compilation (JIT) භාවිත උනත් portability එක සහ safety features (JIT කරපු)ඒවටත් අදාළ වෙනවා. මොකද execution කාර්ය කරන්නේ JVM එක නිසා.
* Interpreter මගින් කරන්නේ line by line machine code එකට පරිවර්තනය කරණ එක 
* JIT මගින් කරන්නේ කොටස් වශයෙන් machine code එකට පරිවර්තනය කරණ එක 
ඉතින් JIT වේගවත් ධාවන අවස්ථාවේදී එකින් එක Translate කරන්නේ නැතුව අවශ්‍ය කොටසම compile කරණ නිසා.

No comments:

Post a Comment