JVM (Java Virtual Machine) জাভা বাইটকোড (.class ফাইল) নেয় এবং সেটিকে লাইন বাই লাইন মেশিন বোঝায় কোডে রূপান্তর করে। JVM-এ একটি Class Loader মডিউল থাকে যা ক্লাস লোড, লিংক এবং ইনিশিয়ালাইজ করে।
JVM-এর ৫টি মেমোরি এলাকা (Runtime Data Areas)
| মেমোরি এলাকা | বর্ণনা |
|---|---|
| 1. Heap (হিপ) | রানটাইমে অবজেক্টগুলো (রেফারেন্স টাইপ) স্টোর করার জন্য। সব থ্রেড শেয়ার করে। গারবেজ কালেক্টর এখানে কাজ করে। |
| 2. Stack (স্ট্যাক) | প্রতিটি থ্রেডের জন্য একটি স্ট্যাক থাকে। লোকাল ভেরিয়েবল, প্যার্শিয়াল রেজাল্ট, মেথড কল ফ্রেম (Frame) এখানে স্টোর হয়। থ্রেড শেষ হলে ফ্রেম নষ্ট হয়। মেথড ইনভোকেশন ও রিটার্নে ভূমিকা রাখে। |
| 3. PC Registers (Program Counter Registers) | প্রতিটি থ্রেডের জন্য একটি PC রেজিস্টার থাকে। JVM বর্তমানে যে ইনস্ট্রাকশন এক্সিকিউট করছে তার অ্যাড্রেস এখানে থাকে। নেটিভ মেথডের জন্য undefined। |
| 4. Execution Engine (এক্সিকিউশন ইঞ্জিন) | বাইটকোড এক্সিকিউট করার জন্য। ভায়ারচুয়াল প্রসেসর, ইন্টারপ্রেটার (লাইন বাই লাইন), এবং JIT (Just-In-Time) কম্পাইলার (হট কোডকে নেটিভ মেশিন কোডে কম্পাইল করে) এখানে থাকে। |
| 5. Native Method Stacks (নেটিভ মেথড স্ট্যাক) | নেটিভ মেথড (C/C++ লেখা মেথড, JNI-এর মাধ্যমে) কল করার জন্য আলাদা স্ট্যাক। সাধারণ স্ট্যাকের মতো কাজ করে কিন্তু নেটিভ কোডের জন্য। |
দ্রষ্টব্য: Heap এবং Method Area (Class Metadata, Runtime Constant Pool - Java 8+ এ Metaspace) সব থ্রেড শেয়ার করে। Stack, PC Registers, Native Method Stacks থ্রেড-লোকাল (প্রতি থ্রেড আলাদা)।