জাভা ভার্চুয়াল মেশিন

জাভা ভার্চুয়াল মেশিন (JVM) সান মাইক্রোসিস্টেম-এর একটি সফটওয়্যার যা বাইটকোড রান করতে সক্ষম। এটি জাভা বাইটকোডের (অন্তর্বর্তী ভাষা) একটি প্রোগ্রামকে মেশিন ভাষায় পরিবর্তিত ও তা রান করে। এটি জাভা সফটওয়্যার প্লাটফর্মের কোড একজিকিউশনের সহায়ক একটি উপাদান। সান মাইক্রোসিস্টেমস বলেছে যে, JVM সক্রিয় ডিভাইস রয়েছে ৫.৫ বিলিয়নেরও উপর।

পরিচিতি 

জাভা ভার্চুয়াল মেশিন বা JVM-কে বলা হয় একটি "ভার্চুয়াল" কম্পিউটার যা "বাস্তব" কম্পিউটারের সাথে অবস্থান করে একটি সফ্টওয়্যারের প্রক্রিয়া হিসাবে। এটি জাভা প্রোগ্রামকে দেয় প্ল্যাটফর্ম স্বাধীনতা এবং সব প্লাটফরম তথা সব অপারেটিং সিস্টেমে চলার স্বতঃস্ফূর্ততা।

জাভা কোড .জাভা ফাইলে লেখা হয়। এই কোডে জাভা ল্যাংগুয়েজ এর এক বা একাধিক বৈশিষ্ট্য যেমন ক্লাস,মেথড, ভ্যারিয়েবল,অবজেক্ট প্রভৃতি থাকে। জাভা কম্পাইলার এই কোড কম্পাইল করে .ক্লাস ফাইল তৈরি করে। এই .ক্লাস ফাইল বাইটকোড ধারণ করে। জাভা বাইটকোড জাভা ভার্চুয়াল মেশিনের এর একটি ইনপুট। JVM এই কোড পড়ে তারপর ইন্টারপ্রেট করে এবং সবশেষে প্রোগ্রাম রান করে।

উপাদানসমূহ 
কোড একজিকিউশন করার জন্য জাভা ভার্চুয়াল মেশিন (JVM) বিভিন্ন উপাদান ব্যবহার করে। JVM স্ট্যাক, গারবেজ কালেক্টিং হিপ, রেজিস্টার এবং মেথড এরিয়ার মত বিভিন্ন উপাদান ভাগ করা হয়েছে. JVM এর ডায়াগ্রাম দেখানো হল:

স্ট্যাক 
জাভা ভার্চুয়াল মেশিনে স্ট্যাক বিভিন্ন মেথডের আর্গুমেন্ট সংরক্ষণ রাখার পাশাপাশি যেকোন মেথডের লোকাল ভ্যারিয়েবলগুলোকে সংরক্ষণ করে। এছাড়াও স্ট্যাক প্রত্যেকটি মেথডের কাজ করার ধারা তত্ত্বাবধান করে। এটিকে বলা হয় স্ট্যাক ফ্রেম। তিনটা রেজিস্টার আছে যারা স্ট্যাক-এর পরিবর্তন সাধনে সাহায্য করে। এসব হল: ভার্স, ফ্রেম, অপটোপ। এসব রেজিস্টারসমূহ চলতি স্ট্যাক-এর বিভিন্ন অংশকে নির্দেশ করে।

লোকাল ভ্যারিয়েবল 
যে সকল লোকাল ভ্যারিয়েবলসমূহ চলতি মেথডে ব্যবহৃত হচ্ছে, সবগুলো নিয়ে লোকাল ভ্যারিয়েবল এর বিভাগ গঠিত। এটি ভার্স রেজিস্টার দ্বারা নির্দেশ করা হয়।

একজিকিউশন এনভায়রমেন্ট 
স্ট্যাক-এর নিজস্ব অপারেশনসমূহকে সঠিকভাবে নিয়ন্ত্রণ করার জন্য একজিকিউশন এনভায়রমেন্ট বিভাগ ব্যবহৃত হয়। এটি ফ্রেম রেজিস্টার দ্বারা নির্দেশ করা হয়।

অপার‍্যান্ড স্ট্যাক 
বাইটকোড ইন্সট্রাকশনের কাজের ক্ষেত্র হিসেবে অপার‍্যান্ড স্ট্যাক ব্যবহৃত হয়। এখানেই বাইটকোড ইন্সট্রাকশনের প্যারামিটারগুলো স্থাপন করা হয় এবং বাইটকোড ইন্সট্রাকশনের ফলাফল পাওয়া যায়। অপার‍্যান্ড স্ট্যাক-এর সর্বোচ্চ মান অপটোপ রেজিস্টার দ্বারা নির্দেশ করা হয়।

মেথড এরিয়া 
মেথড এরিয়ায় বাইটকোড অবস্থান করে। প্রোগ্রাম কাউন্টার এখানে কিছু বাইট নির্দেশ করে। কোন নির্দেশ মাত্রই একজিকিউট করল (ইন্টারপ্রেটার দিয়ে) তা সমন্ধে এটি অবগত থাকে। এটি একটি নির্দেশ একজিকিউশেনের পর পরবর্তী নির্দেশকে একজিকিউশনের জন্য প্রস্তুত করে।

গারবেজ কালেক্টিং হিপ 
গারবেজ কালেক্টিং হিপে জাভা প্রোগ্রামের সকল অবজেক্ট অবস্থান করে। যখনই একজন প্রোগ্রামার কোন অবজেক্ট তৈরি করে গারবেজ কালেক্টিং হিপ তার জন্য মেমরি বরাদ্দ করে।
সি++ এর মত জাভা প্রোগ্রামিং ল্যাংগুয়েজে মেমরি ফ্রী করার জন্য কোন অপারেটর নেই। জাভা গারবেজ কালেক্টিং পদ্ধতি দ্বারা এই কাজটি স্বয়ংক্রিয় ভাবে করে থাকে।

অন্যান্য সমর্থিত ভাষা
তৃতীয় পক্ষগুলি JVM লক্ষ্য করে এমন অনেক কম্পাইলার বা ইন্টারপ্রেটার তৈরি করেছে। এইগুলির মধ্যে কিছু বিদ্যমান ভাষাগুলির জন্য, অন্যরা জাভা ভাষার এক্সটেনশনগুলির জন্য অন্তর্ভুক্ত:

বিম শেল - জাভা জন্য একটি লাইটওয়েট স্ক্রিপ্টিং ভাষা 
ক্লোজার - জাভা প্ল্যাটফর্মের লিসপ প্রোগ্রামিং ভাষার একটি আধুনিক, গতিশীল এবং কার্যকরী উপভাষা
গোসু - একটি সাধারণ উদ্দেশ্য জাভা ভার্চুয়াল মেশিন ভিত্তিক প্রোগ্রামিং ভাষা আপ্যাচ লাইসেন্স 2.0 এর অধীনে প্রকাশিত
গ্রোভি - পাইথন, রুবি, পার্ল এবং স্মলটকের বৈশিষ্ট্যগুলির সাথে সম্পূর্ণরূপে জাভা ইন্টারঅপারেবলযোগ্য, জাভা-সিনট্যাক্স-সামঞ্জস্যপূর্ণ, স্ট্যাটিক এবং গতিশীল ভাষা
জেরুবি - একটি রুবি ইন্টারপ্রেটার
জেয়থন - একটি পাইথন ইন্টারপ্রেটার
কোটলিন - সম্পূর্ণ জাভা ইন্টারঅপারেবিলিটি সহ JVM এর জন্য একটি প্রোগ্রামিং ভাষা
রাহিনো - একটি জাভাস্ক্রিপ্ট ইন্টারপ্রেটার
স্কাল - একটি "জাভা জাভা" হিসাবে নকশাকৃত নন-জাভা সামঞ্জস্যপূর্ণ সিনট্যাক্স সহ একটি মাল্টি-প্যারাডিজ প্রোগ্রামিং ভাষা

তথ্যসূত্র 

 
 http://viralpatel.net/blogs/java-virtual-machine-an-inside-story

বহিঃসংযোগ 
 The Java Virtual Machine Specification
 
 Sun to build virtual machine for iPhone - ComputerWorld
 Java Virtual Machine Download Link
 JVM implementation in pure Java

জাভা প্ল্যাটফর্ম
সান মাইক্রোসিস্টেম
সফটওয়্যার
জাভা প্রোগ্রামিং