জাভা/কটলিন যেহেতু জাভা ভার্চুয়াল মেশিনের (JVM) উপর রান করে। তাই প্রথমে JVM, JRE এবং JDK এগুলো সম্পর্কে ধারণা থাকা জরুরি।
JVM = Java Virtual Machine
JRE = Java Runtime Environment
JDK = Java Development Kit
JVM:
জাভা ভার্চুয়াল মেশিন হলো জাভার জন্য একটা কৃত্রিম যন্ত্র। ভার্চুয়াল মেশিন বা কৃত্রিম যন্ত্র বলার কারন হলো এটার বাস্তব অস্তিত্ব নেই, আমরা এটাকে ছুঁতে বা ধরতে পারি না, এটা শুধু একটা সফটওয়্যার। জাভা/কটলিন/গ্রুভি/স্কেলা ইত্যাদি আরো অনেক ল্যাঙ্গুয়েজ আছে যেগুলি জাভা বাইটকোডে কম্পাইল হয়। এই বাইট কোড JVM এর উপর চালানো হলে তা মেশিন কোডে রুপান্তরিত হয়। হার্ডওয়্যার এবং অপারেটিং সিস্টেম (উইন্ডোজ/ম্যাক/লিনাক্স) যাই থাকুক না কেন যদি এই JVM থাকে তবে তাতে এই কম্পাইল করা বাইট কোড রান করানো যাবে। এজন্য এই সকল ল্যাঙ্গুয়েজ দিয়ে লেখা প্রোগ্রাম প্লাটফর্ম ইন্ডিপেন্ডেন্ট হয়। এটা জাভার প্রধান কিছু কাজ করে যেমন: মেমোরি ম্যানেজমেন্ট, গার্বেজ কালেকশন, সিকিউরিটি ইত্যাদি। JVM হলো JRE এর একটা অংশ। তাই JVM ইনস্টল হবে JRE ইনস্টল করলে।
JRE:
জাভা রানটাইম এনভায়রনমেন্ট হলো জাভা ভার্চুয়াল মেশিনে বাইটকোড রান করার জন্য একটা মাধ্যম বা প্লাটফর্ম। JRE হলো JVM সহ Java Binaries এবং অন্যান্য class এর সমন্বিত ব্যবস্থা যার মাধ্যমে প্রোগ্রাম রান করতে পারে। জাভা/কটলিন এর প্রোগ্রাম রান করার জন্য সিস্টেমে JRE ইনস্টল করা থাকতে হবে।
JDK:
জাভা ডেভলপমেন্ট কীট হলো JRE এবং ডেভলপমেন্টের জন্য প্রয়োজনীয় টুলস যেমন কম্পাইলার, ডিবাগার ইত্যাদির সমন্বিত ব্যবস্থা। জাভা ভিত্তিক কোন প্রোগ্রাম তৈরি করতে বা ডেভলপমেন্ট করতে চাইলে JDK ইনস্টল করা থাকতে হয়। প্রোগ্রাম তৈরির পর সেটা রান করানোর জন্য শুধু JRE থাকলেই হবে। JDK ইনস্টল করা থাকলে আলাদা করে JRE ইনস্টল করার প্রয়োজন নেই কারন JDK তে JRE থাকেই আরো ডেভলপমেন্ট টুলসও থাকে।
JRE, JDK হলো প্লাটফর্ম ভিত্তিক। উইন্ডোজ, ম্যাক আর লিনাক্সের জন্য আলাদা আলাদা বাইনারি বা ইনস্টলেশন ফাইল রয়েছে। ইনস্টল করার পর তাতে যে প্রোগ্রাম রান করা হবে তা অপারেটিং সিস্টেম বা প্লাটফর্মের ভিন্নতার উপর নির্ভরশীল নয়। যেমন: উইন্ডোজে কম্পাইল করা জাভা/কটলিনের প্রোগ্রাম লিনাক্সে কিংবা ম্যাকে চালানো যাবে যদি তাতে JRE ইনস্টল করা থাকে।
JVM, JRE, JDK এদের মধ্যে পার্থক্য:
- JVM হলো জাভা ভিত্তিক প্রোগ্রামের মূল বিষয় কারন এটাই প্লাটফর্মের উপর নির্ভরশীলতা দূর করে প্রোগ্রাম রান করে।
- JDK এবং JRE দুটিতেই থাকে JVM, তাই প্রোগ্রাম রান করার জন্য JDK অথবা JRE যে কোন একটি থাকলেই হবে।
- JDK ডেভলপমেন্টের কাজে এবং JRE জাভা ভিত্তিক প্রোগ্রাম রান করার কাজে প্রয়োজন হয়।
JIT Compiler:
জাভা ভিত্তিক প্রোগ্রাম কম্পাইল হয়ে যে বাইট কোড হয় সেটা রান করে একটা ভার্চুয়াল মেশিনের উপর সরাসরি মেশিনে রান হয় না, এজন্য এক্সিকিউশন ধীরগতির হয়। এই গতি বাড়ানোর জন্য JIT কম্পাইলার JVM এর সাথে কাজ করে। এটা JRE এর একটা অংশ বা উপাদান। এটা বাইটকোডকে মেশিন কোডে কম্পাইল করে। মেশিন কোড সরাসরি মেশিন বুজতে পারে বলে গতি বাড়ে।
JIT ডায়নামিক ট্রান্সলেশন অথবা রানটাইম কম্পাইলেশন হিসেবে পরিচিত।
JIT কম্পাইলার বাইট কোড বিভিন্ন ভাগে ভাগ করে (file/function) এবং এগুলি ডায়নামিক ভাবে মেশিন কোডে কম্পাইল করে এতে প্রোগ্রাম দ্রুত রান হয়। এটা কম্পাইল করা কোড ক্যাশিং(Cach) করে পরবর্তিতে পুনরায় কম্পাইল করা ছাড়াই রান করাতে পারে।