Programming and Java Fundamentals
How a Computer Executes a Program
You are viewing a free preview lesson.
Lesson Overview
আমরা যখন Java-তে code লিখি, তখন computer সরাসরি সেই code বুঝতে পারে না।
Computer-এর processor মূলত খুব low-level instruction execute করে। তাই Java source code-কে কয়েকটি ধাপের মধ্য দিয়ে এমন format-এ convert করতে হয়, যা computer execute করতে পারে।
এই lesson-এ আমরা জানব:
- Computer-এর গুরুত্বপূর্ণ hardware component
- CPU কীভাবে instruction execute করে
- Memory এবং storage-এর পার্থক্য
- Machine language কী
- High-level programming language কেন প্রয়োজন
- Compiler এবং interpreter কী
- Java কীভাবে compilation এবং runtime execution ব্যবহার করে
Learning Objectives
এই lesson শেষ করার পর আপনি পারবেন:
- CPU, memory এবং storage-এর ভূমিকা ব্যাখ্যা করতে
- Computer কীভাবে instruction execute করে, তা সাধারণভাবে বুঝতে
- Machine language এবং high-level language-এর পার্থক্য বলতে
- Compiler এবং interpreter-এর কাজ ব্যাখ্যা করতে
- Java source code থেকে running program তৈরি হওয়ার ধাপগুলো বুঝতে
- Java bytecode-এর প্রয়োজনীয়তা ব্যাখ্যা করতে
Computer কীভাবে কাজ করে?
একটি computer-এর ভেতরে অনেক hardware এবং software component একসঙ্গে কাজ করে।
Programming শেখার শুরুতে computer-এর প্রতিটি electronic detail জানা প্রয়োজন নেই।
তবে কয়েকটি গুরুত্বপূর্ণ component সম্পর্কে ধারণা থাকা দরকার:
- CPU
- Memory
- Storage
- Input device
- Output device
- Operating system
একটি program run করার সময় সাধারণভাবে ঘটে:
- Program storage থেকে memory-তে load হয়
- CPU program-এর instruction পড়ে
- CPU instruction execute করে
- Program প্রয়োজন অনুযায়ী data process করে
- Result memory, storage বা output device-এ পাঠানো হয়
CPU কী?
CPU-এর পূর্ণরূপ হলো:
Central Processing Unit
CPU-কে প্রায়ই computer-এর brain বলা হয়।
CPU-এর প্রধান দায়িত্ব হলো instruction execute করা।
CPU বিভিন্ন ধরনের operation করতে পারে।
যেমন:
- দুটি number যোগ করা
- একটি value অন্য value-এর সঙ্গে compare করা
- Data এক location থেকে অন্য location-এ নেওয়া
- Condition অনুযায়ী decision নেওয়া
- একই instruction বারবার execute করা
- Memory থেকে data পড়া
- Memory-তে data লেখা
ধরা যাক, আমাদের Java code হলো:
int firstNumber = 10;
int secondNumber = 20;
int total = firstNumber + secondNumber;
এই code execute করার সময় computer-কে কয়েকটি operation করতে হয়:
10value memory-তে রাখা20value memory-তে রাখা- Value দুটি CPU-তে নেওয়া
- Value দুটি যোগ করা
- Result memory-তে রাখা
Programmer শুধু একটি সহজ expression লেখেন:
firstNumber + secondNumber
কিন্তু computer-এর ভেতরে এর জন্য একাধিক low-level operation হতে পারে।
CPU Core কী?
Modern CPU-তে একাধিক core থাকতে পারে।
প্রতিটি core independentভাবে instruction execute করতে পারে।
উদাহরণ:
- Single-core CPU
- Dual-core CPU
- Quad-core CPU
- 8-core CPU
- 16-core CPU
একাধিক core থাকলে computer একসঙ্গে একাধিক কাজ process করতে পারে।
যেমন:
- Browser চালানো
- Music play করা
- Code compile করা
- File download করা
তবে একটি program automatically সব CPU core ব্যবহার করবে—এমন নয়।
Program-কে parallel বা concurrent কাজ করার জন্য সঠিকভাবে design করতে হয়।
এই বিষয়গুলো advanced Java এবং concurrency শেখার সময় বিস্তারিত আলোচনা করা হবে।
Memory কী?
Program চলার সময় data temporarily store করার জন্য computer memory ব্যবহার করে।
সাধারণত এখানে Random Access Memory বা RAM বোঝানো হয়।
Program run হলে:
- Program-এর instruction memory-তে load হয়
- Variable-এর value memory-তে রাখা হয়
- Object memory-তে তৈরি হয়
- Intermediate calculation memory-তে রাখা হয়
উদাহরণ:
int age = 30;
এই statement execute হওয়ার পর 30 value program চলাকালীন memory-তে রাখা হয়।
আরেকটি উদাহরণ:
String name = "Sakib";
এখানে "Sakib" text-related data memory-তে রাখা হবে।
Memory কেন Temporary?
RAM temporary বা volatile memory।
এর অর্থ:
- Program বন্ধ হলে সেই program-এর temporary data সাধারণত memory থেকে release হয়
- Computer বন্ধ হলে RAM-এর data হারিয়ে যায়
- Memory long-term data storage-এর জন্য ব্যবহার করা হয় না
উদাহরণ:
একটি calculator program-এ user দুটি number দিলেন:
10
20
Program total calculate করল:
30
Program বন্ধ হয়ে গেলে এই temporary valueগুলো সাধারণত আর memory-তে থাকবে না।
যদি result ভবিষ্যতের জন্য রাখতে হয়, তাহলে সেটিকে file বা database-এ save করতে হবে।
Storage কী?
Storage long-term data সংরক্ষণ করে।
Storage device-এর উদাহরণ:
- Solid State Drive বা SSD
- Hard Disk Drive বা HDD
- USB drive
- Memory card
- External drive
- Cloud storage
Storage-এ থাকতে পারে:
- Operating system
- Installed application
- Java source file
- Compiled file
- Image
- Video
- Document
- Database file
উদাহরণ:
আপনি যখন Main.java নামে একটি file save করেন, সেটি storage-এ সংরক্ষিত থাকে।
Program run করার সময় প্রয়োজনীয় file storage থেকে memory-তে load হয়।
Memory এবং Storage-এর পার্থক্য
| বিষয় | Memory | Storage |
|---|---|---|
| সাধারণ উদাহরণ | RAM | SSD বা HDD |
| উদ্দেশ্য | চলমান program-এর temporary data রাখা | Long-term data রাখা |
| গতি | সাধারণত দ্রুত | Memory-এর তুলনায় ধীর |
| Computer বন্ধ হলে | Data হারিয়ে যায় | Data থেকে যায় |
| ব্যবহার | Variable, object, running instruction | File, application, database |
সহজভাবে:
Storage-এ program রাখা হয়, আর memory-তে program চালানো হয়।
Input Device কী?
Input device ব্যবহার করে user বা অন্য source computer-কে data দেয়।
উদাহরণ:
- Keyboard
- Mouse
- Microphone
- Camera
- Touchscreen
- Barcode scanner
- Sensor
Programming-এর ক্ষেত্রে input আসতে পারে:
- Keyboard থেকে
- File থেকে
- Database থেকে
- Network request থেকে
- অন্য application থেকে
- API থেকে
Java-তে keyboard input নেওয়ার জন্য আমরা পরে Scanner ব্যবহার করব।
Output Device কী?
Output device computer-এর result user-এর কাছে প্রকাশ করে।
উদাহরণ:
- Monitor
- Speaker
- Printer
- Projector
Programming-এর output শুধু screen-এ দেখানো result নয়।
Output হতে পারে:
- Console message
- File
- Database record
- API response
- Notification
- Audio
- Printed document
উদাহরণ:
System.out.println("Java is running");
এখানে output console-এ দেখানো হবে।
Operating System কী?
Operating system বা OS হলো computer-এর গুরুত্বপূর্ণ system software।
উদাহরণ:
- Windows
- macOS
- Linux
- Android
- iOS
Operating system বিভিন্ন কাজ manage করে:
- CPU usage
- Memory allocation
- File system
- Running process
- Input এবং output device
- Security
- Network connection
Java program সরাসরি সব hardware-এর সঙ্গে নিজে থেকে কাজ করে না।
Operating system এবং JVM program ও hardware-এর মধ্যে গুরুত্বপূর্ণ ভূমিকা পালন করে।
Process কী?
যখন কোনো program run করা হয়, operating system সাধারণত তার জন্য একটি process তৈরি করে।
Process হলো running program-এর একটি instance।
উদাহরণ:
আপনি যদি IntelliJ IDEA দুইবার open করেন, তাহলে operating system একাধিক process তৈরি করতে পারে।
একটি process-এর মধ্যে থাকে:
- Program instruction
- Allocated memory
- Runtime state
- Open file
- Resource information
Java application run করলে একটি Java process তৈরি হয়।
Operating system process-টিকে CPU time এবং memory দেয়।
Instruction কী?
Instruction হলো computer-কে দেওয়া একটি নির্দিষ্ট operation।
Low-level instruction-এর কাজ হতে পারে:
- একটি value load করা
- দুটি value যোগ করা
- একটি value compare করা
- একটি location-এ jump করা
- Data memory-তে store করা
High-level Java code:
int result = 10 + 20;
Conceptually computer-কে করতে হতে পারে:
10load করা20load করা- Value দুটি যোগ করা
- Result store করা
আমরা Java ব্যবহার করি যাতে এই low-level operationগুলো সরাসরি লিখতে না হয়।
Binary কী?
Computer electronic signal-এর মাধ্যমে কাজ করে।
এই signal সাধারণভাবে দুটি state দিয়ে প্রকাশ করা যায়:
- On
- Off
Programming এবং computer science-এ এগুলো প্রায়ই লেখা হয়:
10
এই number system-কে binary বলা হয়।
Decimal number system-এ আমরা ব্যবহার করি:
0 থেকে 9
Binary number system-এ ব্যবহার করা হয়:
0 এবং 1
উদাহরণ:
Decimal 0 = Binary 0
Decimal 1 = Binary 1
Decimal 2 = Binary 10
Decimal 3 = Binary 11
Decimal 4 = Binary 100
এই course-এর শুরুতে binary calculation ভালোভাবে জানা বাধ্যতামূলক নয়।
তবে মনে রাখতে হবে:
Computer-এর lowest level-এ information binary form-এ represent করা হয়।
Machine Language কী?
Machine language হলো এমন low-level instruction, যা processor সরাসরি execute করতে পারে।
Machine instruction binary pattern দিয়ে represent করা হতে পারে।
উদাহরণস্বরূপ:
10110000 01100001
এই binary sequence মানুষের জন্য সহজে পড়া বা বোঝা কঠিন।
Machine language processor architecture-এর ওপর নির্ভর করে।
এক ধরনের processor-এর instruction অন্য ধরনের processor-এর জন্য আলাদা হতে পারে।
উদাহরণ:
- x86 architecture
- x86-64 architecture
- ARM architecture
এই কারণে সরাসরি machine language ব্যবহার করে বড় application লেখা অত্যন্ত কঠিন।
Assembly Language কী?
Assembly language machine language-এর তুলনায় কিছুটা readable low-level language।
Assembly code-এ short instruction name ব্যবহার করা হয়।
Conceptual example:
MOV A, 10
MOV B, 20
ADD A, B
Assembly language machine language-এর তুলনায় readable হলেও এটি এখনও hardware-specific এবং low-level।
বড় business application সাধারণত সরাসরি assembly language-এ লেখা হয় না।
High-Level Programming Language কী?
High-level programming language মানুষের জন্য তুলনামূলকভাবে readable এবং understandable।
উদাহরণ:
int total = firstPrice + secondPrice;
এখানে programmer সহজেই বুঝতে পারেন:
- দুটি price আছে
- Price দুটি যোগ করা হচ্ছে
- Result
totalvariable-এ রাখা হচ্ছে
High-level language programmer-কে low-level hardware detail থেকে abstraction দেয়।
Java, Python, Go এবং JavaScript high-level programming language-এর উদাহরণ।
High-Level Language কেন ব্যবহার করা হয়?
High-level language ব্যবহার করার কয়েকটি কারণ হলো:
Readability
Code মানুষের জন্য পড়া সহজ।
int age = 25;
Maintainability
Code পরিবর্তন এবং improve করা সহজ।
Productivity
কম সময়ে বেশি feature তৈরি করা যায়।
Portability
কিছু language একই code একাধিক platform-এ চালানোর সুযোগ দেয়।
Abstraction
Memory address এবং processor instruction-এর মতো low-level detail সরাসরি handle করতে হয় না।
Reusability
Class, method এবং library reuse করা যায়।
Source Code থেকে Execution
High-level source code সরাসরি CPU execute করতে পারে না।
Source code-কে translate করতে হয়।
এই translation বিভিন্নভাবে হতে পারে:
- Compilation
- Interpretation
- Compilation এবং runtime execution-এর combination
Compiler কী?
Compiler হলো এমন একটি program, যা source code-কে অন্য format-এ translate করে।
একটি compiler পুরো source code analyze করতে পারে এবং detect করতে পারে:
- Syntax error
- Unknown variable
- Missing symbol
- Incompatible data type
- Invalid statement
ধরা যাক, Java code:
int age = "twenty";
এখানে int variable-এর মধ্যে text রাখা হচ্ছে।
Java compiler এই problem detect করবে।
Compiler-এর output language অনুযায়ী ভিন্ন হতে পারে।
Output হতে পারে:
- Machine code
- Object code
- Intermediate code
- Bytecode
Compilation কী?
Source code-কে compiler ব্যবহার করে অন্য executable বা intermediate format-এ convert করার process-কে compilation বলা হয়।
Conceptual flow:
Source Code
↓
Compiler
↓
Translated Code
Java-এর ক্ষেত্রে:
Java Source Code
↓
Java Compiler
↓
Java Bytecode
Interpreted Execution কী?
Interpreter source code বা intermediate instruction পড়ে এবং runtime-এ execute করে।
Simplified conceptual flow:
Source Code
↓
Interpreter
↓
Execution
Traditionally interpreted language-এর ক্ষেত্রে execution-এর সময় instruction translate বা evaluate করা হয়।
তবে modern programming language implementation অনেক বেশি complex হতে পারে।
অনেক language:
- Compilation
- Interpretation
- Bytecode
- Just-In-Time compilation
একসঙ্গে ব্যবহার করতে পারে।
Compiled এবং Interpreted Language
Programming language-কে শুধু compiled বা interpreted বলা সবসময় পুরোপুরি accurate নয়।
কারণ language এবং implementation আলাদা বিষয়।
একই language-এর বিভিন্ন runtime ভিন্ন technique ব্যবহার করতে পারে।
তবে beginner level-এ simplifiedভাবে বলা যায়:
Compiled Approach
Program run করার আগে source code compile করা হয়।
Interpreted Approach
Program run হওয়ার সময় interpreter instruction process করে।
Java এই দুই ধারণার combination ব্যবহার করে।
Java কীভাবে Program Execute করে?
Java program সাধারণভাবে কয়েকটি stage-এর মধ্য দিয়ে execute হয়।
Java Source Code
↓
Java Compiler
↓
Java Bytecode
↓
Java Virtual Machine
↓
Machine Instruction
↓
Running Program
এখন প্রতিটি stage আলাদাভাবে দেখা যাক।
Step 1: Java Source Code লেখা
Java source code .java extension-এর file-এ লেখা হয়।
উদাহরণ:
Main.java
File content:
public class Main {
public static void main(String[] args) {
System.out.println("Hello Java");
}
}
এটি human-readable Java source code।
Step 2: Java Compiler Code Compile করে
Java compiler-এর নাম সাধারণত:
javac
Command line থেকে compile করার example:
javac Main.java
Compilation successful হলে compiler একটি .class file তৈরি করবে।
Main.class
এই file-এর মধ্যে Java bytecode থাকে।
Step 3: Bytecode তৈরি হয়
Java compiler সরাসরি একটি specific operating system-এর executable machine code তৈরি করে না।
Compiler Java bytecode তৈরি করে।
Main.java
↓
javac
↓
Main.class
Bytecode হলো intermediate instruction format।
এটি:
- Java source code নয়
- Direct machine code-ও নয়
- JVM-এর জন্য তৈরি instruction
Step 4: JVM Bytecode Load করে
JVM-এর পূর্ণরূপ:
Java Virtual Machine
JVM .class file load করে।
তারপর JVM:
- Bytecode verify করে
- Required class load করে
- Memory manage করে
- Instruction execute করে
- প্রয়োজন হলে bytecode machine code-এ convert করে
Java program run করার example command:
java Main
এখানে .class extension লেখা হয় না।
Step 5: Program Execute হয়
JVM bytecode process করে এবং underlying operating system ও processor-এর জন্য executable instruction তৈরি বা execute করে।
শেষে output পাওয়া যায়:
Hello Java
Complete Java Execution Flow
Main.java
↓
Java compiler: javac
↓
Main.class
↓
JVM
↓
Operating system and CPU
↓
Program output
Bytecode কী?
Bytecode হলো Java compiler-এর তৈরি intermediate instruction।
Bytecode JVM execute করতে পারে।
এর প্রধান সুবিধা হলো একই compiled Java bytecode বিভিন্ন platform-এর JVM-এ চলতে পারে।
ধরা যাক, আপনি Windows computer-এ Java code compile করলেন।
তৈরি হলো:
Main.class
Compatible JVM থাকলে একই .class file চলতে পারে:
- Windows
- Linux
- macOS
প্রতিটি platform-এর JVM implementation আলাদা, কিন্তু bytecode একই থাকতে পারে।
Platform Independence কী?
Java-এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হলো platform independence।
এটি প্রায়ই এই বাক্য দিয়ে প্রকাশ করা হয়:
Write once, run anywhere.
এর অর্থ হলো:
- Java code একবার compile করা যায়
- Generated bytecode compatible JVM থাকা বিভিন্ন platform-এ run করতে পারে
তবে বাস্তবে কিছু limitation থাকতে পারে।
যেমন:
- Operating system-specific file path
- Native library
- Environment configuration
- Platform-specific dependency
তবুও Java bytecode এবং JVM model Java application-কে portable করতে বড় ভূমিকা রাখে।
Platform-Specific JVM
Bytecode platform-independent হলেও JVM implementation platform-specific।
উদাহরণ:
- Windows-এর জন্য JVM
- Linux-এর জন্য JVM
- macOS-এর জন্য JVM
Windows JVM Windows operating system এবং processor-এর সঙ্গে কাজ করার জন্য তৈরি।
Linux JVM Linux-এর জন্য তৈরি।
এভাবে JVM bytecode এবং underlying platform-এর মধ্যে bridge হিসেবে কাজ করে।
JVM কী?
JVM শুধু bytecode execute করে না।
JVM আরও অনেক গুরুত্বপূর্ণ কাজ করে।
যেমন:
- Class loading
- Bytecode verification
- Memory allocation
- Garbage collection
- Runtime error handling
- Thread management
- Security checks
- Machine-specific execution
JVM Java platform-এর সবচেয়ে গুরুত্বপূর্ণ অংশগুলোর একটি।
JVM-এর internal architecture advanced topic।
এই course-এ আমরা প্রয়োজন অনুযায়ী ধাপে ধাপে JVM সম্পর্কে আরও জানব।
Class Loader কী?
JVM-এর class loader Java class load করে।
Program-এর সব class একসঙ্গে শুরুতেই load হওয়া বাধ্যতামূলক নয়।
প্রয়োজন অনুযায়ী class load হতে পারে।
উদাহরণ:
public class Main {
public static void main(String[] args) {
System.out.println("Application started");
}
}
JVM-কে প্রথমে Main class খুঁজে load করতে হবে।
তারপর main method খুঁজে execution শুরু করতে হবে।
Bytecode Verification কী?
JVM bytecode execute করার আগে verify করতে পারে।
Verification-এর উদ্দেশ্য হলো bytecode valid এবং safe কি না, তা check করা।
JVM check করতে পারে:
- Bytecode structure valid কি না
- Illegal memory access হচ্ছে কি না
- Stack operation valid কি না
- Type rule follow করা হচ্ছে কি না
এই verification Java runtime security-এর একটি অংশ।
JIT Compiler কী?
JIT-এর পূর্ণরূপ:
Just-In-Time Compiler
JVM runtime-এ frequently executed bytecode-এর কিছু অংশ machine code-এ compile করতে পারে।
এর ফলে program performance improve হতে পারে।
Simplified flow:
Bytecode
↓
JVM observes execution
↓
Frequently used code identified
↓
JIT compiles it
↓
Native machine code
সব bytecode একইভাবে JIT compile হবে—এমন নয়।
JVM runtime information ব্যবহার করে optimization decision নিতে পারে।
Interpreter এবং JIT একসঙ্গে
Modern JVM সাধারণত execution-এর জন্য interpreter এবং JIT compilation দুটিই ব্যবহার করতে পারে।
Simplifiedভাবে:
- JVM bytecode load করে
- কিছু instruction interpret করে
- Frequently executed code identify করে
- JIT compiler সেটিকে machine code-এ compile করে
- Optimized code execute করে
এই কারণে Java শুধু traditionally compiled বা interpreted language নয়।
Java-এর execution model hybrid।
Java কি Slow?
Java সম্পর্কে একটি পুরোনো ধারণা হলো:
Java সবসময় slow।
এই ধারণা পুরোপুরি সঠিক নয়।
Modern JVM ব্যবহার করে:
- JIT compilation
- Runtime profiling
- Method inlining
- Garbage collection optimization
- Adaptive optimization
অনেক large-scale application, backend service এবং financial system Java ব্যবহার করে।
Performance depend করে:
- Code quality
- Algorithm
- Data structure
- JVM configuration
- Memory usage
- Database
- Network
- Application architecture
Language একা performance নির্ধারণ করে না।
Source File এবং Class File
Java-এর দুটি গুরুত্বপূর্ণ file type হলো:
Source File
Main.java
এখানে developer-এর লেখা Java source code থাকে।
Compiled Class File
Main.class
এখানে Java bytecode থাকে।
Source file human-readable।
Class file JVM-এর জন্য তৈরি।
Java Command Line Example
ধরা যাক, Main.java file-এর content:
public class Main {
public static void main(String[] args) {
System.out.println("Java program executed");
}
}
Compile command:
javac Main.java
Successful compilation-এর পর:
Main.class
Run command:
java Main
Output:
Java program executed
Compilation Error Example
নিচের code-এ syntax error আছে:
public class Main {
public static void main(String[] args) {
System.out.println("Hello")
}
}
Compile করলে error পাওয়া যাবে।
কারণ:
System.out.println("Hello")
Statement-এর শেষে semicolon নেই।
Correct version:
System.out.println("Hello");
Compiler error detect করার কারণে invalid program run হওয়ার আগেই problem জানা যায়।
Runtime Error Example
নিচের code compile হতে পারে:
public class Main {
public static void main(String[] args) {
int result = 10 / 0;
System.out.println(result);
}
}
কিন্তু program run করার সময় error হবে।
কারণ integer division by zero runtime-এ valid নয়।
এটি দেখায়:
- Compilation successful মানেই program error-free নয়
- কিছু error শুধু runtime-এ দেখা যায়
Compilation এবং Execution-এর পার্থক্য
Compilation
Compilation-এর সময় source code check এবং translate করা হয়।
Main.java → Main.class
Execution
Execution-এর সময় compiled bytecode JVM-এর মাধ্যমে run হয়।
Main.class → Running program
সহজভাবে:
Compilation code প্রস্তুত করে, execution code চালায়।
Code লেখার পর কী ঘটে?
আপনি IntelliJ IDEA-তে Run button চাপলে IDE background-এ সাধারণত কয়েকটি কাজ করে:
- Source code save করে
- Java compiler চালায়
- Compilation error check করে
.classfile তৈরি করে- JVM start করে
- Required classpath configure করে
- Main class load করে
mainmethod execute করে- Console-এ output দেখায়
IDE অনেক step automatically করে।
Command line ব্যবহার করলে একই step-এর কিছু অংশ manually দেখা যায়।
IDE এবং Java Runtime
IDE নিজে Java language execute করে না।
IDE developer-কে সাহায্য করে:
- Code লিখতে
- Error highlight করতে
- Project manage করতে
- Compiler run করতে
- JVM start করতে
- Debug করতে
Actual compilation Java compiler করে এবং execution JVM করে।
Java Program কোথা থেকে শুরু হয়?
একটি basic Java application সাধারণত main method থেকে execution শুরু করে।
public static void main(String[] args) {
System.out.println("Application started");
}
JVM main class load করার পর এই method খুঁজে।
main method না থাকলে basic standalone Java application কোথা থেকে শুরু হবে, তা JVM বুঝতে পারবে না।
main method-এর প্রতিটি অংশ আমরা পরবর্তী lessonগুলোতে বিস্তারিত শিখব।
একটি Simplified Execution Example
Code:
public class Calculator {
public static void main(String[] args) {
int firstNumber = 10;
int secondNumber = 20;
int total = firstNumber + secondNumber;
System.out.println(total);
}
}
Simplified execution:
Calculator.javafile তৈরি হয়- Java compiler source code check করে
- Compiler
Calculator.classতৈরি করে - JVM
Calculatorclass load করে - JVM
mainmethod খুঁজে firstNumbervariable তৈরি হয়secondNumbervariable তৈরি হয়- Value দুটি যোগ করা হয়
- Result
totalvariable-এ রাখা হয় - Result console-এ print হয়
Output:
30
Hardware, Operating System এবং JVM-এর সম্পর্ক
Java application execution-এর বিভিন্ন layer আছে।
Java Application
↓
JVM
↓
Operating System
↓
Hardware
Java Application
Developer-এর business logic এবং program instruction।
JVM
Bytecode execute করে এবং runtime service দেয়।
Operating System
Process, memory, file এবং hardware resource manage করে।
Hardware
CPU, RAM, storage এবং physical device।
এই layered architecture developer-কে সরাসরি hardware detail handle করা থেকে মুক্তি দেয়।
কেন এই বিষয়গুলো জানা গুরুত্বপূর্ণ?
Beginner হিসেবে আপনার মনে হতে পারে:
আমি তো শুধু Java code লিখব। CPU বা JVM জানার প্রয়োজন কী?
এই conceptগুলো জানা গুরুত্বপূর্ণ কারণ এগুলো আপনাকে বুঝতে সাহায্য করবে:
- Compilation error কোথায় হয়
- Runtime error কোথায় হয়
.javaএবং.classfile-এর পার্থক্য- Java code কেন সরাসরি CPU execute করে না
- JVM কেন প্রয়োজন
- Java কেন বিভিন্ন operating system-এ চলতে পারে
- Memory-related সমস্যা কীভাবে তৈরি হতে পারে
- IDE Run button-এর পেছনে কী ঘটে
Strong foundation ভবিষ্যতে advanced topic বুঝতে সাহায্য করে।
গুরুত্বপূর্ণ Terms
CPU
Computer-এর instruction execute করা processing unit।
Memory
Running program-এর temporary data রাখার জায়গা।
RAM
Random Access Memory, যা program চলার সময় temporary data store করে।
Storage
Long-term data এবং file সংরক্ষণের জায়গা।
Operating System
CPU, memory, process, file এবং hardware resource manage করা system software।
Process
Running program-এর একটি instance।
Binary
0 এবং 1 ব্যবহার করা number system।
Machine Language
Processor সরাসরি execute করতে পারে এমন low-level instruction।
High-Level Language
মানুষের জন্য তুলনামূলকভাবে readable programming language।
Compiler
Source code-কে অন্য format-এ translate করা program।
Compilation
Source code translate করার process।
Interpreter
Runtime-এ instruction পড়ে execute করা software component।
Bytecode
Java compiler-এর তৈরি JVM-compatible intermediate instruction।
JVM
Java Virtual Machine, যা Java bytecode execute করে।
JIT Compiler
Runtime-এ frequently executed bytecode machine code-এ compile করা component।
Source File
Developer-এর লেখা .java file।
Class File
Java bytecode থাকা compiled .class file।
Practice Exercise 1: Component শনাক্ত করুন
নিচের কাজগুলো CPU, memory নাকি storage-এর সঙ্গে সবচেয়ে বেশি সম্পর্কিত, তা লিখুন।
- একটি running variable-এর value রাখা
- একটি
.javafile কয়েক মাস সংরক্ষণ করা - দুটি number যোগ করা
- একটি program-এর temporary object রাখা
- একটি downloaded video সংরক্ষণ করা
- একটি comparison instruction execute করা
Practice Exercise 2: Execution Order সাজান
নিচের stepগুলো সঠিক order-এ সাজান:
- JVM bytecode execute করে
- Java source code লেখা হয়
- Program output তৈরি করে
- Java compiler bytecode তৈরি করে
- Operating system Java process চালায়
Practice Exercise 3: File Type শনাক্ত করুন
নিচের fileগুলোর মধ্যে কোনটি source file এবং কোনটি compiled file, তা লিখুন:
Student.java
Student.class
Main.java
Main.class
Calculator.java
Calculator.class
Practice Exercise 4: Compilation নাকি Runtime?
প্রতিটি situation compilation stage-এ নাকি runtime stage-এ ঘটতে পারে, তা নির্ধারণ করুন।
Situation 1
Statement-এর শেষে semicolon নেই।
Situation 2
Program integer value-কে zero দিয়ে divide করছে।
Situation 3
Text value একটি int variable-এ assign করা হয়েছে।
Situation 4
Program যে file open করতে চায়, fileটি পাওয়া যাচ্ছে না।
Situation 5
Unknown variable name ব্যবহার করা হয়েছে।
Practice Exercise 5: Diagram তৈরি করুন
নিচের termগুলো ব্যবহার করে Java execution flow লিখুন:
- Source code
- Java compiler
- Bytecode
- JVM
- CPU
- Output
Arrow ব্যবহার করে flow তৈরি করুন।
Example:
Step 1
↓
Step 2
↓
Step 3
Practice Exercise 6: নিজের ভাষায় ব্যাখ্যা করুন
নিচের প্রশ্নগুলোর উত্তর নিজের ভাষায় লিখুন:
- Computer কেন সরাসরি Java source code execute করতে পারে না?
- Java bytecode কেন প্রয়োজন?
- JVM platform-specific কেন?
- Memory এবং storage কেন একই বিষয় নয়?
- Compiler কী ধরনের error detect করতে পারে?
Knowledge Check
Question 1
CPU-এর প্রধান দায়িত্ব কী?
Question 2
Memory এবং storage-এর মধ্যে প্রধান পার্থক্য কী?
Question 3
Machine language মানুষের জন্য কঠিন কেন?
Question 4
High-level programming language কেন ব্যবহার করা হয়?
Question 5
Compiler কী করে?
Question 6
Java compiler-এর সাধারণ command কী?
Question 7
Java source file-এর extension কী?
Question 8
Compiled Java file-এর extension কী?
Question 9
Bytecode কী?
Question 10
JVM কী করে?
Question 11
Java-কে শুধু compiled language বলা পুরোপুরি accurate নয় কেন?
Question 12
JIT compiler-এর উদ্দেশ্য কী?
Question 13
Compilation এবং execution-এর পার্থক্য কী?
Question 14
Java platform-independent হওয়ার অর্থ কী?
Question 15
Program run করলে operating system সাধারণত কী তৈরি করে?
Knowledge Check Answers
Answer 1
CPU instruction execute করে এবং calculation, comparison ও data movement-এর মতো operation সম্পন্ন করে।
Answer 2
Memory running program-এর temporary data রাখে, আর storage long-term file এবং data রাখে।
Answer 3
Machine language binary এবং processor-specific low-level instruction দিয়ে তৈরি, যা মানুষের জন্য পড়া ও maintain করা কঠিন।
Answer 4
High-level language code readable, maintainable এবং দ্রুত develop করার উপযোগী করে।
Answer 5
Compiler source code analyze করে এবং সেটিকে অন্য format-এ translate করে।
Answer 6
Java compiler-এর সাধারণ command হলো:
javac
Answer 7
Java source file-এর extension:
.java
Answer 8
Compiled Java file-এর extension:
.class
Answer 9
Bytecode হলো Java compiler-এর তৈরি intermediate instruction, যা JVM execute করতে পারে।
Answer 10
JVM bytecode load, verify এবং execute করে। এটি memory management এবং অন্যান্য runtime service-ও দেয়।
Answer 11
Java source code প্রথমে bytecode-এ compile হয় এবং JVM runtime-এ bytecode interpret বা JIT compile করতে পারে। তাই Java hybrid execution model ব্যবহার করে।
Answer 12
JIT compiler frequently executed bytecode machine code-এ compile করে performance improve করতে পারে।
Answer 13
Compilation source code translate করে। Execution translated code run করে।
Answer 14
Compatible JVM থাকলে একই Java bytecode বিভিন্ন operating system-এ চলতে পারে।
Answer 15
Operating system running program-এর জন্য একটি process তৈরি করে।
Lesson Summary
এই lesson-এ আমরা শিখেছি:
- CPU computer instruction execute করে
- Memory running program-এর temporary data রাখে
- Storage long-term file এবং data রাখে
- Operating system process এবং hardware resource manage করে
- Computer lowest level-এ binary এবং machine instruction ব্যবহার করে
- High-level language মানুষের জন্য code লেখা সহজ করে
- Compiler source code translate করে
- Java source code
.javafile-এ থাকে - Java compiler
.classbytecode file তৈরি করে - JVM Java bytecode execute করে
- Java compilation এবং runtime execution-এর combination ব্যবহার করে
- JIT compiler runtime performance improve করতে পারে
- একই Java bytecode compatible JVM ব্যবহার করে বিভিন্ন platform-এ চলতে পারে