জাভা কিভাবে কাজ করে?
জাভা কোডকে কম্পাইল করলে সেটি একটি অন্তর্বর্তীকালীন ল্যাংগুয়েজ এ রূপান্তরিত হয়। সেটিকে বাইট কোড বলা হয়। এটি ঠিক হিউম্যান রিডএবল না আবার মেশিন রিডএবলও না। এই বাইটকোড শুধুমাত্র জাভা ভার্চুয়াল মেশিন(JVM) বুঝতে পারে। JVM বাইট কোডকে ইন্টারপ্রেট করে মেশিন ল্যাংগুয়েজ এ রূপান্তরিত করে। এর জন্যে JVM জাস্ট ইন টাইম(JIT) কম্পাইলার ব্যবহার করে।
জাভা Architecture এর বিভিন্ন কম্পোন্যান্টসমূহ:
1. JAVA DEVELOPMENT KIT(JDK): জাভা ডেভলপমেন্ট কীট(JDK) হচ্ছে এমন একটি সফটওয়্যার ডেভলপমেন্ট ইনভায়রমেন্ট যার সাহায্যে জাভা এবং অ্যাপলেট অ্যাপলিকেশন ডেভলপ করা হয়। যেখানে অন্তর্ভূক্ত থাকে জাভা রান টাইম ইনভায়রমেন্ট(JRE), একটি ইন্টারপ্রেটার বা লোডার (যেটি হচ্ছে জাভা ভার্চুয়াল মেশিন[JVM]), জাভা কম্পাইলার(javac), একটি জাভা আর্কাইভার(jar), একটি ডকুমেন্টেশন জেনারেটর(Java doc), জাভা ডেভলেপমেন্ট জন্য প্রয়োজনীয় অন্যান্য টুলস।
অ্যাপলেট অ্যাপলিকেশন: অ্যাপলেট হচ্ছে একটি জাভা প্রোগ্রাম যা ওয়েব ব্রাউজারে রান করা হয়ে থাকে। একটি অ্যাপলেট একটি সম্পূর্ণ ফাংশনাল জাভা অ্যাপ্লিকেশন হতে পারে কারণ জাভা API(Application programming interface) সম্পূর্ণভাবে এটি নিয়ন্ত্রণ করে থাকে।
2. জাভা রান টাইম ইনভায়রমেন্ট(JRE): জাভা রান-টাইম এনভায়রনমেন্ট (জেআরই) জাভা ডেভলপমেন্ট কিটের (JDK) অংশ। এটি একটি ফ্রি সফ্টওয়্যার যার মধ্যে রয়েছে Java Class Library, specific tools এবং JVM। এটি জাভা সোর্স কোডকে জাভা বাইট কোডে রুপান্তর করে। আপনি যদি কোনও প্ল্যাটফর্মে এই বাইটোকডটি চালাতে চান তবে আপনার জেআরই দরকার। জেআরই ক্লাসগুলি লোড করে, মেমরিতে অ্যাক্সেস যাচাই করে এবং সিস্টেম রিসোর্সগুলো পুনরুদ্ধার করে। জেআরই অপারেটিং সিস্টেমের শীর্ষের একটি লেয়ার হিসেবে কাজ করে। এটি মূলত একটি জাভা প্রোগ্রামকে রান করার জন্য অন্ততপক্ষে যে সব কম্পোন্যান্টগুলো লাগে তার একটি প্যাকেজ।
2.1: জেআরই এর মধ্যে যা রয়েছে:
2.2: জেআরই কীভাবে জেভিএমের সাথে কাজ করে?
যখন আমরা কোন প্রোগ্রাম লিখি তখন.java এক্সটেনশন যুক্ত ফাইলে এটিকে সংরক্ষণ করে থাকি। প্রোগ্রামটি কম্পাইল করার পর সোর্স কোডগুলো বাইট কোডে পরিণত হয়, যা কিনা প্লাটফর্ম ইন্ডিফেন্ডেন্ট এবং এর সাথে নতুন একটি.class এক্সটেনশন যুক্ত ফাইল তৈরি হয় যেখানে বাইট কোডগুলো থাকে। বাইট কোডটি প্লাটফর্ম ইন্ডিফেন্ডেন্ট। জেআরই আছে এরকম যেকোন ডিভাইসে একে রান করা যাবে। এখানে জেআরই এর কাজ শুরু হয়। যেকোন জাভা প্রোগ্রাম রান করার জন্য অবশ্যই জেআরই প্রয়োজন। তারপর বাইটকোডটি রান হতে নিচের flow অবলম্বন করে:
Class Loader: এ ধাপে প্রোগ্রাম চালানোর জন্য ক্লাস লোডার যে ক্লাসগুলো প্রয়োজন হয় সে ক্লাসগুলো লোড করে। এরপর ক্লাস লোডার স্বয়ক্রিয়ভাবে জাভা ভার্চুয়াল মেশিনে ক্লাসগুলো লোড করে।
When the JVM is started, three class loaders are used:
Byte code verifier: বাইট কোড verifier কে দ্বাররক্ষী হিসাবে বিবেচনা করা যেতে পারে। এখানে বাইটকোড যাচাই করার কারণ হচ্ছে যাতে interpreter এ কোনও ধরনের বিঘ্ন সৃষ্টি না হয়। এটি তখনই ইন্টারপ্রেট করতে পারে যখন Byte code verifier এর সবগুলো ধাপ সফল ভাবে অতিক্রান্ত করতে পারে।
Interpreter: যখন কোডগুলো ভ্যারিফাই হয়ে যায় তখন এই বাইট কোডগুলোকে ইন্টাপ্রেটার এক্সিকিউট করে এবং মেশিন কোডে রুপান্তরিত করে।
এইভাবে, প্রোগ্রামটি জেআরইতে চলে।
3.জাভা ভার্চুয়াল মেশিন[JVM]: জেভিএম (জাভা ভার্চুয়াল মেশিন) একটি অ্যাবস্ট্রাক মেশিন। এটি একটি সবিস্তার বিবরণী যা রানটাইম এনভাযরমেন্ট সরবরাহ করে এবং এখানে জাভা বাইটকোড এক্সিকিউট করা যায়। জেভিএম অনেকগুলো অপারেটিং সিস্টেমের জন্য আলাদা আলাদাভাবে তৈরি করা হয়েছে। যেমন: উইন্ডোজ, ম্যাক ওএস, লিনাক্স, সোলারিস ইত্যাদি। আমাদের লেখা জাভা প্রোগ্রাম যেকোন অপারেটিং সিস্টেমে রান করা যাবে। এর কারণ জাভা কোড কোন মেশিনকে উদ্দেশ্য করে না লিখে জেভিএমকে উদ্দেশ্য করে লেখা হয়। যেহেতু প্রত্যেক অপারেটিং সিস্টেমের জন্য ভিন্ন ভিন্ন জেভিএম আছে তাই জাভা কোড সব অপারেটিং সিস্টেমে রান করা যায়। তাই এজন্য জাভাকে WORA(Write once, run anywhere) ল্যাংগুয়েজও বলা হয়।
জেভিএম নিম্নলিখিত ক্রিয়াকলাপ সম্পাদন করে:
জেভিএম যা সংজ্ঞায়িত করে:
জেভিএম আর্কিটেকচার: এবার জেভিএম এর অভ্যন্তরীন আর্কিটেকচার সম্পর্কে জানা যাক। এটিতে ক্লাসলোডার, মেমরি এরিয়া, এক্সিকিউশন ইঞ্জিন ইত্যাদি
রয়েছে।
1.Classloader: ক্লাসলোডার জেভিএমের একটি সাবসিস্টেম যা ক্লাস ফাইল লোড করতে ব্যবহৃত হয়। যখনই আমরা জাভা প্রোগ্রামটি চালাই, এটি ক্লাসলোডার দ্বারা প্রথমে লোড করা হয়। জাভাতে তিনটি অন্তর্নির্মিত ক্লাসলোডার রয়েছে।
এগুলি জাভা দ্বারা সরবরাহ করা অভ্যন্তরীণ ক্লাসলোডার। আপনি যদি নিজের(ইউজার ডিফাইন) ক্লাসলোডার তৈরি করতে চান তবে আপনাকে ক্লাসলোডার ক্লাসকে এক্সটেন্ড করতে হবে।
2.Class(Method) Area: Class(Method) Area প্রতি ক্লাসের স্ট্রাকচার স্টোর করে রাখে। যেমন: runtime constant pool, field and method data, মেথডের জন্য কোড।
3.Heap: এটি রানটাইম ডেটা এরিয়া, যেখানে অবজেক্টগুলি allocated করা হয়।
4.Stack: জাভা স্ট্যাক ফ্রেম স্টোর করে। এটি লোকাল ভেরিয়েবল ধারণ করে থাকে। প্রতিটি থ্রেডের একটি প্রাইভেট জেভিএম স্ট্যাক থাকে, যা থ্রেড হিসাবে একই সময়ে তৈরি করা হয়। প্রত্যেকবার একটি মেথড কল করা হলে একটি নতুন ফ্রেম তৈরি করা হয়। কোনও ফ্রেম নষ্ট হয়ে যায় যখন এর মেথডের invocation সম্পূর্ণ হয়।
5.Program and Counter Register: পিসি (প্রোগ্রামের কাউন্টার) রেজিস্টারটিতে বর্তমানে executed হওয়া জাভা ভার্চুয়াল মেশিনের instruction address থাকে।
6. Native method stack: এতে অ্যাপ্লিকেশনটিতে ব্যবহৃত সমস্ত নেটিভ method রয়েছে।
7. Execution Engine: এতে রয়েছে
8. Java Native Interface: জাভা নেটিভ ইন্টারফেস (জেএনআই) এমন ইন্টারফেইস যা সি, সি +, এসেম্বলি ইত্যাদিতে লেখা অ্যাপলিকেশনগুলার সাথে কমিউনিকেট করতে সাহায্য করে। কনসোলে আউটপুট প্রেরণ করতে বা ওএস লাইব্রেরির সাথে ইন্টারেক্ট করতেও জাভা জেএনআই ইন্টারফেস ব্যবহার করা হয়।
4. জাভা কম্পাইলার(javac): javac হ'ল ওরাকল কর্পোরেশন থেকে জাভা ডেভেলপমেন্ট কিট (জেডিকে) এর অন্তর্ভুক্ত জাভা কম্পাইলার। যা প্রথমে জাভা ভাষায় লিখিত প্রোগ্রামকে বাইট কোডে রুপান্তর করে। তারপর বাইটকোডের স্পেসিপিকেশন মেনে মেশিন কোড তৈরি করে। জাভাতে দুই ধরনের কম্পাইলার রয়েছে:
5.জাভা আর্কাইভার(jar): JAR (Java Archive) হ'ল একটি প্যাকেজ ফাইল ফর্ম্যাট যা সাধারণত অনেক জাভা ক্লাস ফাইল, সম্পর্কিত মেটাডেটা এবং রিসোর্সসমূহকে(text, images, ইত্যাদিকে) ডিস্ট্রিবিউশনের জন্য একটি ফাইলে একত্রিত করতে ব্যবহৃত হয়।
6. ডকুমেন্টেশন জেনারেটর(Java doc): জাভাডক টুল হল জাভা প্রোগ্রামিং ল্যাংগুয়েজের একটি ডকোমেন্টেশন জেনারেটর টুল। যা এইচটিএমএল ফর্ম্যাটে স্ট্যান্ডার্ড ডকুমেন্টেশন তৈরি করে। এটি এপিআই(API) ডকুমেন্টেশন জেনারেট করে।
জাভাডক ব্যবাহারের আগে অবশ্যই জাভাডক টিউমেন্টে class, method এবং constructor ইত্যাদির বিবরণ দিতে হবে। একটি ভাল এবং বোধগম্য ডকোমেন্ট API তৈরি করার জন্য প্রত্যেক জাভা ফাইলের টিউমেন্টে -এ class, method and constructor এর উপযুক্ত বিবরণ দিতে হবে।
JavaDoc Tags
1. TAG: @author. PARAMETER: author_name. DESCRIPTION: Describes an author
2.TAG: @param. PARAMETER: description DESCRIPTION: provide information about the method parameter or the input it takes.
3.TAG: @see. PARAMETER: reference. DESCRIPTION: generate a link to other elements of the document
4.TAG: @version. PARAMETER: version-name. DESCRIPTION: provide a version of the class, interface or enum.
5.TAG: @return. PARAMETER: description. DESCRIPTION: provide the return value
আমি মোহাম্মদ আক্তারুজ্জামান। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 4 বছর 7 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 4 টি টিউন ও 0 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 1 ফলোয়ার আছে এবং আমি টেকটিউনসে 1 টিউনারকে ফলো করি।
I have completed my diploma engineering degree in 2021. As a computer diploma engineer, I have various knowledge about computer-related work. I have been working successfully in various freelancing marketplaces since 2016 as a GRAPHIC DESIGNER. In 2017, I completed a course on FRONT END WEB DEVELOPMENT from a reputed...