জাভা ভার্চুয়াল মেশিন (JVM) মেমোরি স্পেসকে মূলত দুটি অংশে ভাগ করে: স্ট্যাক এবং হিপ। স্ট্যাক স্পেস প্রধানত মেথড এক্সিকিউশনের ক্রম এবং লোকাল ভেরিয়েবল সংরক্ষণের জন্য ব্যবহৃত হয়।
স্ট্যাক এবং হিপ মেমোরির মূল পার্থক্য
| ক্রমিক নং | বিষয় | স্ট্যাক | হিপ মেমোরি |
|---|---|---|---|
| ১ | বেসিক | স্ট্যাক মেমোরি ছোট জীবনকালীন আইটেম সংরক্ষণ করে যেমন লোকাল ভেরিয়েবল, অবজেক্টের রেফারেন্স ভেরিয়েবল | হিপ মেমোরি অবজেক্ট এবং JRE ক্লাস সংরক্ষণের জন্য আলোকিত হয় |
| ২ | অর্ডারিং | স্ট্যাক সবসময় LIFO (লাস্ট ইন ফার্স্ট আউট) ক্রমে সংরক্ষিত থাকে | হিপ মেমোরি ডাইনামিক অ্যালোকেশন ব্যবহার করে, মেমোরি ব্লক অ্যালোকেট এবং ডিঅ্যালোকেট করার জন্য কোনো নির্দিষ্ট প্যাটার্ন নেই |
| ৩ | আকার | JVM প্যারামিটার -XSS ব্যবহার করে স্ট্যাক মেমোরির আকার বাড়ানো যায় | JVM অপশন -Xms এবং -Xmx ব্যবহার করে হিপ মেমোরির আকার বাড়ানো বা কমানো যায় |
| ৪ | দৃশ্যমানতা | ভেরিয়েবল শুধু মালিক থ্রেডের কাছে দৃশ্যমান | সব থ্রেডের কাছে দৃশ্যমান |
| ৫ | এক্সেপশন | JVM java.lang.StackOverflowError নিক্ষেপ করে | JVM java.lang.OutOfMemoryError নিক্ষেপ করে |
মেমোরি লাইফসাইকেল
হিপ মেমোরি: নিচের ঘটনাগুলির একটি না হওয়া পর্যন্ত জীবিত থাকে:
- প্রোগ্রাম টার্মিনেট হওয়া
- মেমোরি ফ্রি করা
স্ট্যাক মেমোরি: ফাংশন রিটার্ন না হওয়া পর্যন্ত জীবিত থাকে।
মূল ধারণা
- স্ট্যাক থ্রেড-স্থানীয় (thread-local) এবং দ্রুত অ্যাক্সেসযোগ্য
- হিপ শেয়ার্ড মেমোরি এবং গার্বেজ কালেক্টরের অধীন
- প্রিমিটিভ টাইপ এবং রেফারেন্স সাধারণত স্টকে থাকে, অবজেক্ট হিপে থাকে