কম্পিউটার

জাভাতে রান-টাইম স্ট্যাক মেকানিজম


প্রতিবার জাভাতে একটি প্রক্রিয়া বা কোড বা থ্রেড চালানোর প্রয়োজন হলে, একটি রানটাইম স্ট্যাক তৈরি করা হয় যাতে থ্রেড চালানোর সময় সম্পাদিত ক্রিয়াকলাপগুলি সংরক্ষণ করা যায়৷

রান-টাইম স্ট্যাকের প্রতিটি এন্ট্রি স্ট্যাক ফ্রেম বা অ্যাক্টিভেশন রেকর্ড হিসাবে পরিচিত। একবার একটি ফাংশন প্রক্রিয়া দ্বারা কল করা হলে, রানটাইম স্ট্যাক থেকে এর সম্পর্কিত ডেটা মুছে ফেলা হয়।

একবার সমস্ত ফাংশন কল করা হলে, রানটাইম স্ট্যাক খালি থাকবে। এর মানে এটি মেমরি থেকে মুছে ফেলা প্রয়োজন৷

এই সময়ে, রানটাইম স্ট্যাকটি ধ্বংস হয়ে যায় এবং তারপর থ্রেডটিও বন্ধ হয়ে যায়।

থ্রেডটি শেষ হয়ে গেলে (স্বেচ্ছায়) বা জোর করে (অস্বাভাবিক সমাপ্তি) হয়ে গেলে থ্রেডের সমাপ্তি ঘটতে পারে।

রানটাইম স্ট্যাকের উপাদানগুলির ধ্বংসের ক্রমটি রানটাইম টাস্কে এন্ট্রি তৈরির বিপরীত ক্রম।

যখন থ্রেড স্বাভাবিকভাবে কাজ করে, এবং এক্সিকিউশন সম্পূর্ণ করে, তখন মূল ফাংশনটি বলা হয় এবং এর এন্ট্রি রানটাইম স্ট্যাকে সংরক্ষণ করা হবে। একইভাবে, অন্যান্য ফাংশন (যদি থাকে) কল করা হয় এবং তাদের এন্ট্রি সংরক্ষণ করা হয়। যখন ফাংশনগুলি এক্সিকিউশন সম্পন্ন করে, তখন রানটাইম স্ট্যাক থেকে এন্ট্রিগুলি সরানোর সময়। শেষ ফাংশনটি সম্পাদিত হয়েছিল প্রথমটি যার এন্ট্রি মুছে ফেলা হয়েছে৷

যখন থ্রেড অস্বাভাবিকভাবে বন্ধ হয়ে যায়, এর অর্থ হল কোডের সমস্ত লাইন সফলভাবে কার্যকর করা যায়নি। এর মানে একটি ব্যতিক্রম উত্থাপিত হয়েছে যেহেতু একটি ত্রুটির সম্মুখীন হয়েছে৷ নীচে একই -

এর একটি উদাহরণ

উদাহরণ

public class Demo{
   public static void main(String[] args){
      test();
   }
   public static void test(){
      test_2();
      System.out.println("This is a test method.");
   }
   public static void test_2(){
      System.out.println(45/0);
      System.out.println("This is a method that divides 10 by 0.");
   }
}

আউটপুট

Exception in thread "main" java.lang.ArithmeticException: / by zero
at Demo.test_2(Demo.java:14)
at Demo.test(Demo.java:9)
at Demo.main(Demo.java:5)

ডেমো নামের একটি ক্লাসে প্রধান ফাংশন রয়েছে যেখানে 'পরীক্ষা' ফাংশন বলা হয়। 'পরীক্ষা' ফাংশনটি সংজ্ঞায়িত করা হয় যেখানে 'test_2' ফাংশন বলা হয়। 'test_2' নামের একটি ফাংশন সংজ্ঞায়িত করা হয়েছে যেখানে একটি সংখ্যাকে 0 দ্বারা ভাগ করার চেষ্টা করা হয়েছে। এর ফলে কনসোলে একটি ব্যতিক্রম প্রিন্ট করা হয়েছে। তাই, ত্রুটি বার্তাটি প্রিন্ট করার জন্য নিয়ন্ত্রণ 'println' লাইনে পৌঁছায় না।


  1. জাভাতে থ্রেড অগ্রাধিকারের গুরুত্ব?

  2. কিভাবে আমরা জাভাতে একটি থ্রেড বন্ধ করতে পারি?

  3. জাভাতে ইউজার থ্রেড বনাম ডেমন থ্রেড?

  4. জাভাতে join() পদ্ধতির গুরুত্ব?