জাভা প্রোগ্রাম রান করার সময় অপারেটিং সিস্টেম JVM-কে কিছু মেমরি অ্যালোকেট করে। JVM এই মেমরিকে দুটি অংশে ভাগ করে: স্ট্যাক মেমরি এবং হিপ মেমরি। স্ট্যাক মেথড এক্সিকিউশনের জন্য ব্যবহৃত হয় এবং হিপ অবজেক্ট সংরক্ষণের জন্য। স্ট্যাক পূর্ণ হলে JVM java.lang.StackOverflowError নিক্ষেপ করে এবং হিপ পূর্ণ হলে java.lang.OutOfMemoryError নিক্ষেপ করে।
StackOverflowError
- স্ট্যাক মেথড এক্সিকিউশনের জন্য ব্যবহৃত হয়। প্রতিটি মেথড কলের জন্য স্ট্যাক মেমরিতে একটি ব্লক তৈরি হয়।
- মেথড সংক্রান্ত ডেটা যেমন প্যারামিটার, লোকাল ভেরিয়েবল বা অবজেক্ট রেফারেন্স এই ব্লকে সংরক্ষিত থাকে।
- মেথড এক্সিকিউশন শেষ হলে এই ব্লক ডেটাসহ স্ট্যাক থেকে মুছে ফেলা হয়।
- যদি মেথডগুলো স্টকে থেকে না যায় (যেমন রিকার্সিভ কল без বেস কেস), তবে স্ট্যাক পূর্ণ হয়ে JVM
StackOverflowErrorনিক্ষেপ করে।
OutOfMemoryError
- জাভাতে তৈরি অবজেক্টগুলো হিপ মেমরিতে সংরক্ষিত হয়। অপ্রয়োজনীয় অবজেক্টগুলো মেমরি থেকে মুছে ফেলা উচিত।
- গার্বেজ কালেক্টর হিপ মেমরি থেকে অপ্রয়োজনীয় অবজেক্টগুলো সরিয়ে দেয়।
- যদি অবজেক্টগুলোর লাইভ রেফারেন্স থাকে, গার্বেজ কালেক্টর সেগুলো সরায় না। এটি শুধু 그들ো অবজেক্ট সরায় যাদের লাইভ রেফারেন্স নেই।
- হিপ মেমরিতে নতুন অবজেক্টের জন্য জায়গা না থাকলে JVM
OutOfMemoryErrorনিক্ষেপ করে।