【Java 虚拟机原理】JDK 体系结构 | Java 源码运行原理 | Java 虚拟机内存

简介: 【Java 虚拟机原理】JDK 体系结构 | Java 源码运行原理 | Java 虚拟机内存

文章目录

一、JDK 体系结构

二、Java 源码运行原理

三、Java 虚拟机内存结构





一、JDK 体系结构


JDK 体系结构 : 下图所有的内容都是 JDK 体系中的组成元素 ;


Java Language : 最上层是 Java 语言 ;


Tools & Tool APIs : 指令工具集 , 手动编译 Java 源码时会用到 , 如 java 执行字节码程序 , javac 编译字节码程序 , javadoc 生成 Java 文档 ;


JRE : 橙色部分以下的都是 JRE 运行环境 ;


Java Virtual Machine : Java 运行最重要的基础是 Java 虚拟机 , 也就是下图最底层的 " Java Virtual Machine " , 这是 Java 代码一次编译 , 到处运行的基础 , Java 程序实际上是运行在虚拟机上的 ;


image.png






二、Java 源码运行原理


Java 源码运行原理 :


编写一个 HelloWorld.java ,


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


使用 Javac 命令编译上述源码 ,


javac HelloWorld.java


得到 HelloWorld.class 字节码文件 ,

image.png



使用 java 命令执行上述字节码文件 , 将字节码文件装载到 Java 虚拟机 中 ,


java HelloWorld

image.png



Java 虚拟机是使用 软件 模拟 完整硬件系统功能 , 这是一个完全隔离环境的完整的计算机系统 ,


如果当前系统是 WIndows 操作系统 , Java 虚拟机会将字节码文件转为 Windows 机器码 , 在 Windows 系统中运行 ;

如果当前系统是 Linux 操作系统 , Java 虚拟机会将字节码文件转为 Linux 机器码 , 在 Linux 系统中运行 ;

在不同的操作系统中 , Java 虚拟机的底层实现是不同的 ;






三、Java 虚拟机内存结构


使用 java 命令 , 将 HelloWorld.class 字节码装载到 Java 虚拟机之后 ,


java HelloWorld.class

先通过 " 类装载子系统 " 加载字节码文件 , 使用类加载器将 class 文件装载到 Java 虚拟机 内存中 ;


Java 虚拟机内存 模型 就是 运行时数据区 , 这部分内存可划分为以下 5 55 个区域 :


堆区 : 对象创建好之后都放在堆内存中 ;

方法区 ( 元空间 ) ;

栈 ( 线程栈 | 线程私有 ) : 存放线程运行的局部变量数据 , 是线程私有的控件

本地方法栈 ( 线程私有 ) : 本地方法栈 存放的是 Jni 调用中 , C/C++ 的方法栈 ;

程序计数器 ( 线程私有 ) ;


堆区 和 方法区 ( 元空间 ) 是所有线程 共享的区域 ;


栈 ( 线程栈 ) , 本地方法栈 , 程序计数器 是 线程私有的区域 ;


目录
相关文章
|
5天前
|
存储 算法 安全
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
12 0
|
5天前
|
算法 Linux 调度
操作系统中的虚拟内存管理:原理与实现
本文深入探讨了操作系统中虚拟内存管理的核心概念,包括分页、分段、需求分页和页面置换算法。通过分析现代操作系统如Linux和Windows的虚拟内存实现机制,文章揭示了虚拟内存在提升内存利用率、进程隔离和保护内存中的关键作用。同时,讨论了虚拟内存管理面临的挑战,如内存泄漏、碎片化以及性能开销,并提出了相应的优化策略。
|
5天前
|
设计模式 存储 安全
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
15 1
|
7天前
|
监控 Java Maven
使用AspectJ实现Java代码的运行时织入
使用AspectJ实现Java代码的运行时织入
|
7天前
|
存储 Ubuntu Java
【Linux】已解决:Ubuntu虚拟机安装Java/JDK
【Linux】已解决:Ubuntu虚拟机安装Java/JDK
13 1
|
1天前
|
监控 算法 Java
怎么用JDK自带工具进行JVM内存分析
JVM内存分析工具,如`jps`、`jcmd`、`jstat`、`jstack`和`jmap`,是诊断和优化Java应用的关键工具。`jps`列出Java进程,`jcmd`执行诊断任务,如查看JVM参数和线程堆栈,`jstat`监控内存和GC,`jstack`生成线程堆栈信息,而`jmap`则用于生成堆转储文件。这些工具帮助排查内存泄漏、优化内存配置、性能调优和异常分析。例如,`jmap -dump:file=heapdump.hprof <PID>`生成堆转储文件,之后可以用Eclipse Memory Analyzer (MAT)等工具分析。
|
5天前
|
Java 开发者
Java面试题:Java内存管理精要与多线程协同策略,Java内存管理:堆内存、栈内存、方法区、垃圾收集机制等,多线程编程的掌握,包括线程创建、同步机制的原理
Java面试题:Java内存管理精要与多线程协同策略,Java内存管理:堆内存、栈内存、方法区、垃圾收集机制等,多线程编程的掌握,包括线程创建、同步机制的原理
10 0
|
5天前
|
存储 算法 Java
Java面试题:解释JVM的内存结构,并描述堆、栈、方法区在内存结构中的角色和作用,Java中的多线程是如何实现的,Java垃圾回收机制的基本原理,并讨论常见的垃圾回收算法
Java面试题:解释JVM的内存结构,并描述堆、栈、方法区在内存结构中的角色和作用,Java中的多线程是如何实现的,Java垃圾回收机制的基本原理,并讨论常见的垃圾回收算法
8 0
|
5天前
|
Java 开发者
Java面试题:解释Java内存模型中的内存可见性,解释Java中的线程池(ThreadPool)的工作原理,解释Java中的CountDownLatch和CyclicBarrier的区别
Java面试题:解释Java内存模型中的内存可见性,解释Java中的线程池(ThreadPool)的工作原理,解释Java中的CountDownLatch和CyclicBarrier的区别
11 0
|
5天前
|
监控 Java 开发者
Java面试题:解释Java内存模型中的内存顺序规则,Java中的线程组(ThreadGroup)的工作原理,Java中的FutureTask的工作原理
Java面试题:解释Java内存模型中的内存顺序规则,Java中的线程组(ThreadGroup)的工作原理,Java中的FutureTask的工作原理
11 0