JVM (জাভা ভার্চুয়াল মেশিন) আর্কিটেকচার

জেভিএম

JVM (জাভা ভার্চুয়াল মেশিন) একটি বিমূর্ত মেশিন। এটি একটি স্পেসিফিকেশন যা রানটাইম পরিবেশ প্রদান করে যেখানে জাভা বাইটকোড কার্যকর করা যেতে পারে।

JVM অনেক হার্ডওয়্যার এবং সফ্টওয়্যার প্ল্যাটফর্মের জন্য উপলব্ধ (যেমন JVM হল প্ল্যাটফর্ম নির্ভর)।

JVM কি?

  1. একটি স্পেসিফিকেশন যেখানে জাভা ভার্চুয়াল মেশিনের কাজ নির্দিষ্ট করা আছে। কিন্তু বাস্তবায়ন প্রদানকারী অ্যালগরিদম বেছে নিতে স্বাধীন। এর বাস্তবায়ন ওরাকল এবং অন্যান্য কোম্পানি দ্বারা প্রদান করা হয়েছে.
  2. একটি বাস্তবায়ন এটির বাস্তবায়ন JRE (জাভা রানটাইম এনভায়রনমেন্ট) নামে পরিচিত।
  3. রানটাইম ইনস্ট্যান্স যখনই আপনি জাভা ক্লাস চালানোর জন্য কমান্ড প্রম্পটে java কমান্ড লিখবেন, JVM-এর একটি উদাহরণ তৈরি করা হবে।

এর মানে কি

JVM নিম্নলিখিত অপারেশন সঞ্চালন করে:

  • লোড ডিস
  • ইডি ব্লু করে
  • এক্সিক্যুট করে
  • রাণ টাইম পরিবেশ প্রদান করে JVM এর জন্য সংজ্ঞা প্রদান করে:

JVM এর জন্য সংজ্ঞা প্রদান করে:

  • স্মৃতি এলাকা
  • ক্লাস ফাইল ফরম্যাট
  • রেজিস্টার সেট
  • আবর্জনা-সংগৃহীত স্তূপ
  • মারাত্মক ত্রুটি রিপোর্টিং ইত্যাদি

জেভিএম আর্কিটেকচার

আসুন জেনে নিই JVM এর অভ্যন্তরীণ স্থাপত্য। এতে ক্লাসলোডার, মেমরি এরিয়া, এক্সিকিউশন ইঞ্জিন ইত্যাদি রয়েছে।

1) ক্লাসলোডার
ক্লাসলোডার হল JVM এর একটি সাবসিস্টেম যা ক্লাস ফাইল লোড করতে ব্যবহৃত হয়। যখনই আমরা জাভা প্রোগ্রাম চালাই, এটি প্রথমে ক্লাসলোডার দ্বারা লোড হয়। জাভাতে তিনটি বিল্ট-ইন ক্লাসলোডার রয়েছে।

  1. বুটস্ট্র্যাপ ক্লাসলোডার: এটি প্রথম ক্লাসলোডার যা এক্সটেনশন ক্লাসলোডারের সুপার ক্লাস। এটি rt.jar ফাইল লোড করে যাতে জাভা স্ট্যান্ডার্ড সংস্করণের সমস্ত ক্লাস ফাইল যেমন java.lang প্যাকেজ ক্লাস, java.net প্যাকেজ ক্লাস, java.util প্যাকেজ ক্লাস, java.io প্যাকেজ ক্লাস, java.sql প্যাকেজ ক্লাস ইত্যাদি রয়েছে।
  2. এক্সটেনশন ক্লাসলোডার: এটি বুটস্ট্র্যাপের চাইল্ড ক্লাসলোডার এবং সিস্টেম ক্লাসলোডারের প্যারেন্ট ক্লাসলোডার। এটি $JAVA_HOME/jre/lib/ext ডিরেক্টরির ভিতরে অবস্থিত জার ফাইলগুলিকে লোড করে।
  3. সিস্টেম/অ্যাপ্লিকেশন ক্লাসলোডার: এটি এক্সটেনশন ক্লাসলোডারের চাইল্ড ক্লাসলোডার। এটি ক্লাসপাথ থেকে ক্লাসফাইলগুলি লোড করে। ডিফল্টরূপে, classpath বর্তমান ডিরেক্টরিতে সেট করা হয়। আপনি “-cp” বা “-classpath” সুইচ ব্যবহার করে ক্লাসপথ পরিবর্তন করতে পারেন। এটি অ্যাপ্লিকেশন ক্লাসলোডার নামেও পরিচিত।
  1. // ক্লাসলোডার নাম প্রিন্ট করার জন্য একটি উদাহরণ দেখা যাক
  2. পাবলিক ক্লাস ClassLoaderExample
  3. {
  4.      পাবলিক স্ট্যাটিক ভ্যায়েড মেইন (স্ট্রিং[] আর্গস)
  5.      {
  6.          // চলুন বর্তমান ক্লাসের ক্লাসলোডার নাম প্রিন্ট করি।
  7.          //Application/System classloader এই ক্লাস লোড করবে
  8.          ক্লাস c=ClassLoaderExample.class;
  9.          System.out.println(c.getClassLoader());
  10.          //যদি আমরা স্ট্রিং-এর ক্লাসলোডার নামটি প্রিন্ট করি তবে এটি নাল প্রিন্ট করবে কারণ এটি একটি
  11.          //ইন-বিল্ট ক্লাস যা rt.jar এ পাওয়া যায়, তাই এটি বুটস্ট্র্যাপ ক্লাসলোডার দ্বারা লোড করা হয়
  12.          System.out.println(String.class.getClassLoader());
  13.      }
  14. }
sun.misc.Launcher$AppClassLoader@4e0e2f2a
খালি
এগুলি জাভা দ্বারা প্রদত্ত অভ্যন্তরীণ ক্লাসলোডার।
 আপনি যদি নিজের ক্লাসলোডার তৈরি করতে চান তবে আপনাকে ClassLoader ক্লাস প্রসারিত করতে হবে।

2) শ্রেণী(পদ্ধতি) এলাকা

ক্লাস(পদ্ধতি) এলাকা প্রতি-শ্রেণির কাঠামো সংরক্ষণ করে যেমন রানটাইম ধ্রুবক পুল, ক্ষেত্র এবং পদ্ধতি ডেটা, পদ্ধতির কোড।

3) গাদা

এটি রানটাইম ডেটা এলাকা যেখানে বস্তু বরাদ্দ করা হয়।

4) স্ট্যাক

জাভা স্ট্যাক ফ্রেম সংরক্ষণ করে। এটি স্থানীয় ভেরিয়েবল এবং আংশিক ফলাফল ধারণ করে এবং পদ্ধতি আহ্বান এবং রিটার্নে একটি ভূমিকা পালন করে।

প্রতিটি থ্রেডের একটি ব্যক্তিগত JVM স্ট্যাক রয়েছে, থ্রেডের মতো একই সময়ে তৈরি করা হয়েছে।

প্রতিবার একটি পদ্ধতি চালু করার সময় একটি নতুন ফ্রেম তৈরি করা হয়। একটি ফ্রেম ধ্বংস হয়ে যায় যখন এটির পদ্ধতি আহ্বান সম্পূর্ণ হয়।

5) প্রোগ্রাম কাউন্টার রেজিস্টার

PC (প্রোগ্রাম কাউন্টার) রেজিস্টারে বর্তমানে কার্যকর করা জাভা ভার্চুয়াল মেশিন নির্দেশের ঠিকানা রয়েছে।

6) নেটিভ মেথড স্ট্যাক

এটিতে অ্যাপ্লিকেশনটিতে ব্যবহৃত সমস্ত দেশীয় পদ্ধতি রয়েছে।

7) এক্সিকিউশন ইঞ্জিন

  1. একটি ভার্চুয়াল প্রসেসর
  2. ইন্টারপ্রেটার: বাইটকোড স্ট্রীম পড়ুন তারপর নির্দেশাবলী চালান।
  3. জাস্ট-ইন-টাইম (জেআইটি) কম্পাইলার: এটি কর্মক্ষমতা উন্নত করতে ব্যবহার করা হয়। JIT বাইট কোডের অংশগুলিকে কম্পাইল করে যেগুলির একই সময়ে একই রকম কার্যকারিতা রয়েছে এবং তাই সংকলনের জন্য প্রয়োজনীয় সময়ের পরিমাণ হ্রাস করে৷ এখানে, “কম্পাইলার” শব্দটি একটি জাভা ভার্চুয়াল মেশিন (JVM) এর নির্দেশনা সেট থেকে একটি নির্দিষ্ট CPU-এর নির্দেশ সেটে অনুবাদককে বোঝায়।

8) জাভা নেটিভ ইন্টারফেস

জাভা নেটিভ ইন্টারফেস (JNI) হল একটি ফ্রেমওয়ার্ক যা C, C++, অ্যাসেম্বলি ইত্যাদির মতো অন্য ভাষায় লেখা অন্য অ্যাপ্লিকেশনের সাথে যোগাযোগ করার জন্য একটি ইন্টারফেস প্রদান করে। জাভা কনসোলে আউটপুট পাঠাতে বা OS লাইব্রেরির সাথে যোগাযোগ করতে JNI ফ্রেমওয়ার্ক ব্যবহার করে।



Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top