Java Tutorial 0/145 lessons ~6 min read Lesson 3

    Java Architecture

    java architecture jdk jre jvm bytecode javac write once run anywhere execution engine class loader platform independent

    Course progress0%
    Focus
    24 guided sections
    Practice signal
    Examples included
    Career prep
    Interview Q&A included

    Introduction

    One of the biggest reasons Java has remained one of the most popular programming languages for decades is its powerful architecture.

    Unlike many programming languages that compile directly into machine code, Java follows a unique execution model that allows the same application to run on multiple operating systems without changing the source code.

    This is the famous Java principle:

    Write Once, Run Anywhere (WORA)

    But how does Java achieve this?

    What happens after you write a Java program?

    How does your source code become a running application?

    Why can the same Java program run on Windows, Linux, and macOS?

    The answer lies in Java Architecture.

    Understanding Java Architecture is one of the most important topics for every Java developer because it forms the foundation of:

    • Core Java
    • Spring Boot
    • Microservices
    • JVM Performance Tuning
    • Memory Management
    • Garbage Collection
    • Enterprise Application Development

    It is also one of the most frequently asked interview topics for Java developers.

    In this lesson, you'll learn the overall architecture of Java, understand the roles of the JDK, JRE, and JVM, and follow the complete journey of a Java program from source code to execution.

    Why Learn Java Architecture?

    Imagine you are driving a car.

    You know how to steer, accelerate, and brake.

    But if the engine suddenly stops working, you need at least a basic understanding of how the engine works to diagnose the problem.

    Programming is similar.

    Writing Java code is important.

    Understanding how Java executes that code makes you a better developer.

    Knowledge of Java Architecture helps you:

    • Debug problems more effectively.
    • Understand performance issues.
    • Learn Spring Boot and enterprise frameworks more easily.
    • Optimize memory usage.
    • Prepare for technical interviews.
    • Build scalable and reliable applications.

    Professional Java developers understand not only how to write Java code, but also how the JVM executes it.

    High-Level Java Architecture

    The complete execution flow of a Java application looks like this:

    Java Source Code (.java)
    Java Compiler (javac)
    Bytecode (.class)
    Java Virtual Machine (JVM)
    ┌─────────────┼─────────────┐
    │ │ │
    ▼ ▼ ▼
    Class Loader Memory Areas Execution Engine
    Machine Code
    Operating System
    Hardware

    This architecture is what makes Java platform independent.

    Instead of compiling directly into operating system-specific machine code, Java compiles into bytecode, which is understood by the JVM.

    Understanding the Java Ecosystem

    Before we dive deeper, let's understand the three major components:

    • JDK
    • JRE
    • JVM

    Many beginners confuse these terms.

    Let's understand them one by one.

    Java Development Kit (JDK)

    The Java Development Kit (JDK) is the complete toolkit used by developers to create Java applications.

    Think of the JDK as a professional toolbox.

    A carpenter needs tools such as a hammer, saw, and measuring tape.

    Similarly, a Java developer needs:

    • Compiler
    • Runtime
    • Debugging tools
    • Documentation tools
    • Packaging tools

    The JDK provides all of these.

    What's Inside the JDK?

    The JDK contains:

    JDK
    ├── Compiler (javac)
    ├── Java Runtime Environment (JRE)
    ├── Debugger
    ├── Documentation Tools
    ├── JAR Tool
    ├── JShell
    └── Development Utilities

    The JDK is required whenever you want to:

    • Write Java code.
    • Compile programs.
    • Build applications.
    • Debug software.
    • Package applications.

    Without the JDK, you cannot develop Java software.

    The Java Compiler (`javac`)

    When you write Java code, it is stored in a file such as:

    Hello.java

    Humans can read this file.

    Computers cannot execute it directly.

    The Java compiler converts it into bytecode.

    Example:

    Hello.java
    javac
    Hello.class

    The .class file contains bytecode, not machine code.

    Java Runtime Environment (JRE)

    The Java Runtime Environment (JRE) provides everything required to run Java applications.

    Unlike the JDK, the JRE does not include development tools such as the compiler.

    Think of it this way:

    The JDK is used to build applications.

    The JRE is used to run applications.

    Components of the JRE

    JRE
    ├── JVM
    ├── Core Libraries
    ├── Runtime Classes
    └── Supporting Files

    If you only want to run a Java application, the runtime environment is sufficient.

    However, developers almost always install the JDK because it already includes the JRE.

    Java Virtual Machine (JVM)

    The Java Virtual Machine (JVM) is the heart of Java.

    It is responsible for executing Java bytecode.

    The JVM acts as a bridge between Java bytecode and the operating system.

    Instead of your program communicating directly with Windows, Linux, or macOS, it communicates with the JVM.

    The JVM then translates the bytecode into machine instructions appropriate for the underlying platform.

    Why the JVM is Important

    Different operating systems understand different machine instructions.

    Windows uses one binary format.

    Linux uses another.

    macOS has its own execution environment.

    Instead of generating separate executables for every operating system, Java generates one portable bytecode format.

    Each operating system provides its own JVM implementation.

    The JVM handles all platform-specific details, allowing the same bytecode to run everywhere.

    JDK vs JRE vs JVM

    This is one of the most common interview questions.

    FeatureJDKJREJVM
    Used for Development
    Runs Java Programs
    Includes Compiler
    Includes JVMItself
    Includes LibrariesUses Them

    A simple way to remember:

    • JDK = Develop
    • JRE = Run
    • JVM = Execute

    Complete Java Execution Flow

    Let's see what happens when you write a Java program.

    Suppose you create:

    java
    public class Main {
    public static void main(String[] args) {
    System.out.println("Hello Java");
    }
    }

    Step 1 — You save the file as:

    Main.java

    Step 2 — Compile it:

    bash
    javac Main.java

    The compiler produces:

    Main.class

    Step 3 — Run the program:

    bash
    java Main

    The JVM starts.

    Step 4 — The JVM loads:

    Main.class

    Step 5 — The JVM verifies the bytecode for safety.

    Step 6 — The Execution Engine interprets or compiles the bytecode into machine code.

    Step 7 — The operating system executes the machine instructions.

    Step 8 — Output appears on the console.

    Hello Java

    This entire process happens in milliseconds.

    Visualizing the Journey

    Developer
    Writes Java Code
    Compiler (javac)
    Bytecode (.class)
    JVM
    Machine Code
    Operating System
    Computer Executes Program

    This architecture enables Java's platform independence.

    Why Bytecode Instead of Machine Code?

    Suppose Java compiled directly into Windows machine code.

    That executable would only run on Windows.

    You would need to recompile the application for:

    • Linux
    • macOS
    • Unix

    Instead, Java compiles into bytecode.

    Each platform provides its own JVM.

    The JVM converts the bytecode into platform-specific instructions.

    This saves developers from maintaining multiple versions of the same application.

    Real-World Example

    Imagine a company develops an online banking application.

    Developers use Windows laptops.

    The testing team uses macOS.

    Production servers run Linux.

    The workflow looks like this:

    Developer
    Compile Once
    Bytecode
    Windows JVM
    Linux JVM
    macOS JVM

    The same compiled application runs on all three systems without recompilation.

    This portability significantly reduces development and deployment effort.

    Advantages of Java Architecture

    Java's architecture offers several benefits:

    • Platform independence.
    • Improved security through bytecode verification.
    • Better maintainability.
    • Automatic memory management.
    • Excellent portability.
    • High scalability for enterprise systems.
    • Rich ecosystem of development tools.
    • Strong backward compatibility.

    These advantages have made Java a preferred language for enterprise software development.

    Best Practices

    Install an LTS Version

    Use a Long-Term Support (LTS) version such as Java 21 for production development.

    Understand the Full Execution Flow

    Don't stop at learning syntax. Understanding how Java code becomes a running application helps you debug and optimize software more effectively.

    Learn the Difference Between JDK, JRE, and JVM

    These concepts appear frequently in interviews and are fundamental to Java development.

    Practice with the Command Line

    Even if you use an IDE, practice compiling and running programs using:

    bash
    javac
    java

    This helps you understand what the IDE does behind the scenes.

    Common Mistakes

    Confusing JDK and JVM

    The JVM executes programs.

    The JDK is the complete development toolkit.

    Thinking Bytecode Is Machine Code

    Bytecode is an intermediate representation that must be executed by the JVM.

    Assuming Java Is Interpreted Only

    Modern JVMs use both interpretation and Just-In-Time (JIT) compilation for better performance.

    Ignoring Java Architecture

    Many developers learn Java syntax without understanding how the runtime works.

    A strong understanding of Java Architecture makes learning advanced topics much easier.

    Hands-on Exercise

    Complete the following activities:

    1. Draw the complete Java Architecture diagram from memory.
    2. Explain the role of the JDK, JRE, and JVM in your own words.
    3. Compile a simple Java program using javac.
    4. Run the generated .class file using the java command.
    5. Describe each step from source code to program execution.
    6. Explain why Java applications can run on different operating systems.

    Summary

    Java Architecture is the foundation of every Java application.

    When you write Java code, the JDK compiles it into platform-independent bytecode. The JVM then loads, verifies, and executes that bytecode on the target operating system.

    This architecture enables Java's famous "Write Once, Run Anywhere" capability and provides portability, security, and reliability.

    Understanding these components is essential for becoming a professional Java developer and succeeding in technical interviews.

    Key Takeaways

    • Java programs are compiled into bytecode, not machine code.
    • The JDK provides development tools, including the compiler.
    • The JRE supplies the runtime environment needed to execute Java applications.
    • The JVM loads, verifies, and executes Java bytecode.
    • Platform independence is achieved through the JVM.
    • The Java execution flow is: Source Code → Compiler → Bytecode → JVM → Machine Code → Operating System.

    Professional Interview Questions

    1Explain the difference between JDK, JRE, and JVM.

    Professional Answer

    The JDK (Java Development Kit) is used to develop Java applications and includes the compiler, JRE, and development tools. The JRE (Java Runtime Environment) provides the libraries and JVM needed to run Java applications. The JVM (Java Virtual Machine) is the execution engine that loads, verifies, and executes Java bytecode.

    Follow-up Questions

    • Does the JDK include the JRE?
    • What is bytecode?
    • Can a Java program run without a JVM?

    Interview Tip: Remember this simple mapping: JDK = Develop, JRE = Run, JVM = Execute.

    2Why is Java platform independent?

    Professional Answer

    Java source code is compiled into platform-independent bytecode. Each operating system provides its own JVM implementation, which translates the bytecode into native machine instructions. Because only the JVM changes—not the bytecode—the same Java application can run on multiple platforms without recompilation.

    Follow-up Questions

    • What role does the JVM play in platform independence?
    • Why isn't machine code portable?

    Interview Tip: Always mention bytecode and the JVM together when answering this question.

    3What happens when you execute `java Main`?

    Professional Answer

    The JVM starts, loads the Main.class file, verifies the bytecode, initializes the required classes, and then executes the main() method. The execution engine interprets or JIT-compiles the bytecode into native machine code, which the operating system executes.

    Follow-up Questions

    • What is bytecode verification?
    • What is the JIT Compiler?
    • Which JVM component loads classes?

    Interview Tip: Present the execution flow in the correct order rather than listing unrelated JVM components.

    Next Lesson

    Next Lesson (Part 2): JVM Deep Dive, where you'll explore the Class Loader Subsystem, Bootstrap Class Loader, Platform Class Loader, Application Class Loader, and the complete JVM Memory Areas including Heap, Stack, Method Area, Program Counter (PC) Register, and Native Method Stack with detailed architecture diagrams and real-world examples.

    Ready to mark this lesson complete?Track your journey across the entire course.