Programming and Java Fundamentals

How a Computer Executes a Program

ReadingPreview

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 করার সময় সাধারণভাবে ঘটে:

  1. Program storage থেকে memory-তে load হয়
  2. CPU program-এর instruction পড়ে
  3. CPU instruction execute করে
  4. Program প্রয়োজন অনুযায়ী data process করে
  5. 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 করতে হয়:

  1. 10 value memory-তে রাখা
  2. 20 value memory-তে রাখা
  3. Value দুটি CPU-তে নেওয়া
  4. Value দুটি যোগ করা
  5. 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-এর পার্থক্য

বিষয়MemoryStorage
সাধারণ উদাহরণRAMSSD বা HDD
উদ্দেশ্যচলমান program-এর temporary data রাখাLong-term data রাখা
গতিসাধারণত দ্রুতMemory-এর তুলনায় ধীর
Computer বন্ধ হলেData হারিয়ে যায়Data থেকে যায়
ব্যবহারVariable, object, running instructionFile, 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
  • Email
  • 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-কে করতে হতে পারে:

  1. 10 load করা
  2. 20 load করা
  3. Value দুটি যোগ করা
  4. Result store করা

আমরা Java ব্যবহার করি যাতে এই low-level operationগুলো সরাসরি লিখতে না হয়।

Binary কী?

Computer electronic signal-এর মাধ্যমে কাজ করে।

এই signal সাধারণভাবে দুটি state দিয়ে প্রকাশ করা যায়:

  • On
  • Off

Programming এবং computer science-এ এগুলো প্রায়ই লেখা হয়:

  • 1
  • 0

এই 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 total variable-এ রাখা হচ্ছে

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ভাবে:

  1. JVM bytecode load করে
  2. কিছু instruction interpret করে
  3. Frequently executed code identify করে
  4. JIT compiler সেটিকে machine code-এ compile করে
  5. 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-এ সাধারণত কয়েকটি কাজ করে:

  1. Source code save করে
  2. Java compiler চালায়
  3. Compilation error check করে
  4. .class file তৈরি করে
  5. JVM start করে
  6. Required classpath configure করে
  7. Main class load করে
  8. main method execute করে
  9. 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:

  1. Calculator.java file তৈরি হয়
  2. Java compiler source code check করে
  3. Compiler Calculator.class তৈরি করে
  4. JVM Calculator class load করে
  5. JVM main method খুঁজে
  6. firstNumber variable তৈরি হয়
  7. secondNumber variable তৈরি হয়
  8. Value দুটি যোগ করা হয়
  9. Result total variable-এ রাখা হয়
  10. 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 এবং .class file-এর পার্থক্য
  • 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-এর সঙ্গে সবচেয়ে বেশি সম্পর্কিত, তা লিখুন।

  1. একটি running variable-এর value রাখা
  2. একটি .java file কয়েক মাস সংরক্ষণ করা
  3. দুটি number যোগ করা
  4. একটি program-এর temporary object রাখা
  5. একটি downloaded video সংরক্ষণ করা
  6. একটি 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: নিজের ভাষায় ব্যাখ্যা করুন

নিচের প্রশ্নগুলোর উত্তর নিজের ভাষায় লিখুন:

  1. Computer কেন সরাসরি Java source code execute করতে পারে না?
  2. Java bytecode কেন প্রয়োজন?
  3. JVM platform-specific কেন?
  4. Memory এবং storage কেন একই বিষয় নয়?
  5. 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 .java file-এ থাকে
  • Java compiler .class bytecode file তৈরি করে
  • JVM Java bytecode execute করে
  • Java compilation এবং runtime execution-এর combination ব্যবহার করে
  • JIT compiler runtime performance improve করতে পারে
  • একই Java bytecode compatible JVM ব্যবহার করে বিভিন্ন platform-এ চলতে পারে