Java Code ေတြကို ဘယ္လို Compile လုပ္လဲ
ဒီပို႔စ္ကိုဖတ္တဲ့ အခါ ပံုကိုေသခ်ာတြဲၿပီး ၾကည့္ေစ ခ်င္ပါတယ္၊ ဒါမွနားလည္မွဴ တကယ္ရွိပီး ပို႔စ္ရဲ့ ဆိုလိုရင္းကို သေဘာေပါက္မွာ မို႔ပါ၊
Developer ေတြ တည္ေဆာက္သမွ် Java Code ေတြကို .java ဖိုင္ ေတြအေနနဲ႔ သိမ္းပါတယ္၊ ပံုမွာျပထားတဲ့ အနီေရာင္ ပံုေတြထဲက Start.java ဖိုင္ကေတာ့ main() method ရွိတဲ့ဖိုင္ပါ (main function လို႔လဲ ယူစႏိုင္သလို အမ်ားစုလဲ function လို႔ပဲ ေခၚပါတယ္၊ တကယ္ေတာ့ Java မွာ Method ေတြနဲ႔ အလုပ္လုပ္ပါတယ္၊ C++ ဘာသာ ရပ္မွာေတာ့ main function လို႔ ေခၚပီး Program စတင္တဲ့ Initialize function ျဖစ္ပါတယ္၊
အထက္က main method ထဲမွာ ေနာက္ထပ္ method ႏွစ္ခုကိုုေခၚထားပါတယ္၊ f1() နဲ႔ f2() တို႔ပါ၊ ေအာက္က ဖိုင္ႏွစ္ခုျဖစ္ ကေတာ့ f1() method ပါတဲ့ fun1.java ဖိုင္နဲ႔ ေအာက္ဆံုးတစ္ခုက f2() method ပါတဲ့ fun2.java ဖုိင္တို႔ပါ၊
ပံုမွာပါတဲ့ Start.java ဖိုင္ကိုစ Run ပီဆိုတာနဲ႔ javac (Java Compiler) က Start.java , fun1.java နဲ႔ fun2.java တို႔ကို compile (စီကုံုးေပးတယ္၊ တည္ေဆာက္ေပးတယ္)၊ Java Compiler က တည္ေဆာက္ လိုက္ရင္ .java ဖိုင္ေတြကေန .class ဖိုင္ေတြအျဖစ္ေျပာင္းသြားပါတယ္၊ .class ဖိုင္ျဖစ္သြားတဲ့ အခါ Start.java , fun1.java နဲ႔ fun2.java တို႔အားလံုး Start.class, fun1.class နဲ႔ fun2.class ဖိုင္အျဖစ္ေျပာင္းတယ္၊ .class ဖိုင္အျဖစ္ေျပာင္းသြားတဲ့ အဆင့္ေရာက္ရင္ Developer ေရးထားတဲ့ Java ကုတ္ေတြ မဟုတ္ေတာ့ပဲနဲ႔ Byte Code ေတြပါတဲ့ ဖိုင္ေတြျဖစ္သြားမွာပါ၊
Byte Code ေတြပါ၀င္တဲ့ .class ဖိုင္ေတြကို Class Loader component က RAM ထဲကို ၀န္တင္ ပါတယ္၊ Class Loader Component က JVM (Java Virtual Machine) ထဲ မွာရွိတာပါ၊ JVM က RAM ထဲမွာရွိေနတယ္၊ JVM ထဲမွာ Class Loader တစ္ခုထည္းတာပါ၀င္တာမဟုတ္ပဲနဲ႔ Byte Code Verifier, Execution Engine နဲ႔ JIT Compiler တို႔လဲ ရွိေနပါတယ္၊
JVM ထဲမွာရွိေနတဲ့ Class Loader က Byte Code ေတြပါ၀င္တဲ့ Class ဖိုင္ေတြကို ၀န္တင္မယ္၊ Byte Code Verifier က Class Loader ၀န္တင္ေပးတဲ့ Class ဖိုင္ေတြကို Operant Stack Under flow ျဖစ္လား Operation Stack Overflow ျဖစ္လား Access Restriction Violation ျဖစ္လားကို စစ္ေဆး ပါတယ္၊ ဒါက Java ကို လံုျခံဳေရးစိတ္ခ်ရတဲ့ ဘာသာရပ္တစ္ခုျဖစ္ေစတဲ့ အေၾကာင္းအရင္းပါ၊ ဒီလို Byte Code Verifier ကလိုအပ္တဲ့ စစ္ေဆးမွဴေတြျပဳလုပ္ပီးသြားရင္ေတာ့ Execution Engine က JIT (Just in time code Generator) ကိုသံုးပီး .class ဖိုင္က ရလာတဲ့ Byte Code ေတြကို စက္ေတြနားလည္တဲ့ Machine Code ေတြအျဖစ္ေျပာင္းေပးပါတယ္၊ Machine Code ေတြျဖစ္သြားရင္ေတာ့ Operation System က ယူပီး Run ပါေတာ့တယ္၊ ဒါကေတာ့ JVM Architecture ပါပဲ၊
ဘာ့ေၾကာင့္ Java ကို mid-level language လို႔ေခၚသလဲ
programming ဘာသာရပ္ျဖစ္တဲ့ Java ကို ဘာလို႔ mid-level လို႔သတ္မွတ္တာလဲ၊ အဓိက အေၾကာင္း အရင္းက Java မွာ JVM လို႔ေခၚတဲ့ ၾကားခံ Compiler ပါ၀င္ေနလို႔ပါ၊ အျခား ဘာသာရပ္ေတြျဖစ္တဲ့ C program နဲ႔ C++ ဖိုင္ေတြကို Compile လုပ္လိုက္ရင္ Machine Code ေတြပါ၀င္တဲ့ .obj ဖိုင္ေတြ ခ်က္ျခင္း ရပါတယ္၊ ဒီဖိုင္ေတြကို Linker ေတြက ခ်ိတ္ဆက္ပီး .exe ဖိုင္ကို အေျဖထုတ္ေပးတယ္၊ Java ဘာသာက JVM လို႔ ၾကားခံ Machine Code Generate လုပ္မယ့္ Components ကို RAM ထဲမွာ တင္ထား စရာမလိုဘူး၊ Java ကေတာ့ လိုတယ္၊ ဒီလိုပဲ C# ကလဲ .Net ကို ၾကားခံ Machine Code Generator လိုတယ္၊ ဒီ့ အတြက္ေၾကာင့္ Java နဲ႔ C# ကို mid-level programming လို႔ေခၚတာပါ၊
ေန႔စဥ္ပို႔စ္ေတြ တင္ေပးသြားပါမယ္၊ မနက္ျဖန္ phone imei နဲ႔ ပက္သက္တဲ့ imei နံပါတ္ရွာတဲ့ Application တည္ေဆာက္ေပးပါမယ္ လိုအပ္တာေတြ အားလံုးလဲ ရွင္းျပပါမယ္၊ ေမးထားတဲ့ ေမးခြန္း ေတြကိုလဲ ျပန္မေျဖေတာ့ဘူး၊ ပို႔စ္အေနနဲ႔ ပဲေရးေပးလိုက္ပါမယ္၊ ေမွ်ာ္လင့္ထားတဲ့ အခ်ိန္ အေၾကာင္း မျပန္ျဖစ္ရင္ ေက်းဇူးျပဳၿပီးသည္းခံေပးပါ၊ တစ္ခ်ိဳ႕ေမးခြန္းေတြက ပို႔စ္ေတြမွာ ပါပီးသား ေျဖဖို႔မလိုလို႔ မေျဖပါဘူး၊ တစ္ခ်ိဳ႕ Phone Service နဲ႔ ပက္သက္ရင္ေတာ့ ကၽြန္ေတာ္တို႔ ေျဖေပးမေျဖေပး မေသခ်ာ ပါဘူး၊ ကၽြန္ေတာ္တို႔မွာ Phone ၀န္ေဆာင္မွဴ ကၽြမ္းက်င္တဲ့ မိတ္ေဆြေတြရွိပါတယ္၊ မိတ္ဆက္ေပးပါမယ္၊ သင္တန္းနဲ႔ ပက္သက္ရင္ေတာ့ ၁၁ ရက္ေန႔မွာ သင္ၾကားေပးမယ့္ သင္ခန္းစာ အားလံုး ေကာ သင္တန္း အမ်ိဳး အစားအားလံုးပါ ေၾကျငာေပးပါမယ္၊
ဒီပိုုစ့္ကိုု pdf ဖိုုင္ အျဖစ္ ေဒါင္းလုုဒ္လုုပ္လိုု ပါက ေအာက္ပါ လင့္တြင္း ေဒါင္းလုုပ္ရယူႏုုိင္ပါသည္
Developer ေတြ တည္ေဆာက္သမွ် Java Code ေတြကို .java ဖိုင္ ေတြအေနနဲ႔ သိမ္းပါတယ္၊ ပံုမွာျပထားတဲ့ အနီေရာင္ ပံုေတြထဲက Start.java ဖိုင္ကေတာ့ main() method ရွိတဲ့ဖိုင္ပါ (main function လို႔လဲ ယူစႏိုင္သလို အမ်ားစုလဲ function လို႔ပဲ ေခၚပါတယ္၊ တကယ္ေတာ့ Java မွာ Method ေတြနဲ႔ အလုပ္လုပ္ပါတယ္၊ C++ ဘာသာ ရပ္မွာေတာ့ main function လို႔ ေခၚပီး Program စတင္တဲ့ Initialize function ျဖစ္ပါတယ္၊
အထက္က main method ထဲမွာ ေနာက္ထပ္ method ႏွစ္ခုကိုုေခၚထားပါတယ္၊ f1() နဲ႔ f2() တို႔ပါ၊ ေအာက္က ဖိုင္ႏွစ္ခုျဖစ္ ကေတာ့ f1() method ပါတဲ့ fun1.java ဖိုင္နဲ႔ ေအာက္ဆံုးတစ္ခုက f2() method ပါတဲ့ fun2.java ဖုိင္တို႔ပါ၊
ပံုမွာပါတဲ့ Start.java ဖိုင္ကိုစ Run ပီဆိုတာနဲ႔ javac (Java Compiler) က Start.java , fun1.java နဲ႔ fun2.java တို႔ကို compile (စီကုံုးေပးတယ္၊ တည္ေဆာက္ေပးတယ္)၊ Java Compiler က တည္ေဆာက္ လိုက္ရင္ .java ဖိုင္ေတြကေန .class ဖိုင္ေတြအျဖစ္ေျပာင္းသြားပါတယ္၊ .class ဖိုင္ျဖစ္သြားတဲ့ အခါ Start.java , fun1.java နဲ႔ fun2.java တို႔အားလံုး Start.class, fun1.class နဲ႔ fun2.class ဖိုင္အျဖစ္ေျပာင္းတယ္၊ .class ဖိုင္အျဖစ္ေျပာင္းသြားတဲ့ အဆင့္ေရာက္ရင္ Developer ေရးထားတဲ့ Java ကုတ္ေတြ မဟုတ္ေတာ့ပဲနဲ႔ Byte Code ေတြပါတဲ့ ဖိုင္ေတြျဖစ္သြားမွာပါ၊
Byte Code ေတြပါ၀င္တဲ့ .class ဖိုင္ေတြကို Class Loader component က RAM ထဲကို ၀န္တင္ ပါတယ္၊ Class Loader Component က JVM (Java Virtual Machine) ထဲ မွာရွိတာပါ၊ JVM က RAM ထဲမွာရွိေနတယ္၊ JVM ထဲမွာ Class Loader တစ္ခုထည္းတာပါ၀င္တာမဟုတ္ပဲနဲ႔ Byte Code Verifier, Execution Engine နဲ႔ JIT Compiler တို႔လဲ ရွိေနပါတယ္၊
JVM ထဲမွာရွိေနတဲ့ Class Loader က Byte Code ေတြပါ၀င္တဲ့ Class ဖိုင္ေတြကို ၀န္တင္မယ္၊ Byte Code Verifier က Class Loader ၀န္တင္ေပးတဲ့ Class ဖိုင္ေတြကို Operant Stack Under flow ျဖစ္လား Operation Stack Overflow ျဖစ္လား Access Restriction Violation ျဖစ္လားကို စစ္ေဆး ပါတယ္၊ ဒါက Java ကို လံုျခံဳေရးစိတ္ခ်ရတဲ့ ဘာသာရပ္တစ္ခုျဖစ္ေစတဲ့ အေၾကာင္းအရင္းပါ၊ ဒီလို Byte Code Verifier ကလိုအပ္တဲ့ စစ္ေဆးမွဴေတြျပဳလုပ္ပီးသြားရင္ေတာ့ Execution Engine က JIT (Just in time code Generator) ကိုသံုးပီး .class ဖိုင္က ရလာတဲ့ Byte Code ေတြကို စက္ေတြနားလည္တဲ့ Machine Code ေတြအျဖစ္ေျပာင္းေပးပါတယ္၊ Machine Code ေတြျဖစ္သြားရင္ေတာ့ Operation System က ယူပီး Run ပါေတာ့တယ္၊ ဒါကေတာ့ JVM Architecture ပါပဲ၊
ဘာ့ေၾကာင့္ Java ကို mid-level language လို႔ေခၚသလဲ
programming ဘာသာရပ္ျဖစ္တဲ့ Java ကို ဘာလို႔ mid-level လို႔သတ္မွတ္တာလဲ၊ အဓိက အေၾကာင္း အရင္းက Java မွာ JVM လို႔ေခၚတဲ့ ၾကားခံ Compiler ပါ၀င္ေနလို႔ပါ၊ အျခား ဘာသာရပ္ေတြျဖစ္တဲ့ C program နဲ႔ C++ ဖိုင္ေတြကို Compile လုပ္လိုက္ရင္ Machine Code ေတြပါ၀င္တဲ့ .obj ဖိုင္ေတြ ခ်က္ျခင္း ရပါတယ္၊ ဒီဖိုင္ေတြကို Linker ေတြက ခ်ိတ္ဆက္ပီး .exe ဖိုင္ကို အေျဖထုတ္ေပးတယ္၊ Java ဘာသာက JVM လို႔ ၾကားခံ Machine Code Generate လုပ္မယ့္ Components ကို RAM ထဲမွာ တင္ထား စရာမလိုဘူး၊ Java ကေတာ့ လိုတယ္၊ ဒီလိုပဲ C# ကလဲ .Net ကို ၾကားခံ Machine Code Generator လိုတယ္၊ ဒီ့ အတြက္ေၾကာင့္ Java နဲ႔ C# ကို mid-level programming လို႔ေခၚတာပါ၊
ေန႔စဥ္ပို႔စ္ေတြ တင္ေပးသြားပါမယ္၊ မနက္ျဖန္ phone imei နဲ႔ ပက္သက္တဲ့ imei နံပါတ္ရွာတဲ့ Application တည္ေဆာက္ေပးပါမယ္ လိုအပ္တာေတြ အားလံုးလဲ ရွင္းျပပါမယ္၊ ေမးထားတဲ့ ေမးခြန္း ေတြကိုလဲ ျပန္မေျဖေတာ့ဘူး၊ ပို႔စ္အေနနဲ႔ ပဲေရးေပးလိုက္ပါမယ္၊ ေမွ်ာ္လင့္ထားတဲ့ အခ်ိန္ အေၾကာင္း မျပန္ျဖစ္ရင္ ေက်းဇူးျပဳၿပီးသည္းခံေပးပါ၊ တစ္ခ်ိဳ႕ေမးခြန္းေတြက ပို႔စ္ေတြမွာ ပါပီးသား ေျဖဖို႔မလိုလို႔ မေျဖပါဘူး၊ တစ္ခ်ိဳ႕ Phone Service နဲ႔ ပက္သက္ရင္ေတာ့ ကၽြန္ေတာ္တို႔ ေျဖေပးမေျဖေပး မေသခ်ာ ပါဘူး၊ ကၽြန္ေတာ္တို႔မွာ Phone ၀န္ေဆာင္မွဴ ကၽြမ္းက်င္တဲ့ မိတ္ေဆြေတြရွိပါတယ္၊ မိတ္ဆက္ေပးပါမယ္၊ သင္တန္းနဲ႔ ပက္သက္ရင္ေတာ့ ၁၁ ရက္ေန႔မွာ သင္ၾကားေပးမယ့္ သင္ခန္းစာ အားလံုး ေကာ သင္တန္း အမ်ိဳး အစားအားလံုးပါ ေၾကျငာေပးပါမယ္၊
ဒီပိုုစ့္ကိုု pdf ဖိုုင္ အျဖစ္ ေဒါင္းလုုဒ္လုုပ္လိုု ပါက ေအာက္ပါ လင့္တြင္း ေဒါင္းလုုပ္ရယူႏုုိင္ပါသည္
brightermyanmar@gmail.com
--------------------------------------
ကိုမ်ဳိး(lwanmapyay.blogspot.com) လြမ္းမေျပ သုတရပ္၀န္း | Facebook
ကိုမ်ဳိး(lwanmapyay.blogspot.com) လြမ္းမေျပ သုတရပ္၀န္း | Facebook