【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++ 的方法栈 ;

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


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


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


目录
相关文章
|
10月前
|
安全 Java 应用服务中间件
Spring Boot + Java 21:内存减少 60%,启动速度提高 30% — 零代码
通过调整三个JVM和Spring Boot配置开关,无需重写代码即可显著优化Java应用性能:内存减少60%,启动速度提升30%。适用于所有在JVM上运行API的生产团队,低成本实现高效能。
1131 3
|
9月前
|
Java 大数据 Go
从混沌到秩序:Java共享内存模型如何通过显式约束驯服并发?
并发编程旨在混乱中建立秩序。本文对比Java共享内存模型与Golang消息传递模型,剖析显式同步与隐式因果的哲学差异,揭示happens-before等机制如何保障内存可见性与数据一致性,展现两大范式的深层分野。(238字)
271 4
|
9月前
|
存储 缓存 Java
【深入浅出】揭秘Java内存模型(JMM):并发编程的基石
本文深入解析Java内存模型(JMM),揭示synchronized与volatile的底层原理,剖析主内存与工作内存、可见性、有序性等核心概念,助你理解并发编程三大难题及Happens-Before、内存屏障等解决方案,掌握多线程编程基石。
|
10月前
|
缓存 监控 Kubernetes
Java虚拟机内存溢出(Java Heap Space)问题处理方案
综上所述, 解决Java Heap Space溢出需从多角度综合施策; 包括但不限于配置调整、代码审查与优化以及系统设计层面改进; 同样也不能忽视运行期监控与预警设置之重要性; 及早发现潜在风险点并采取相应补救手段至关重要.
1058 17
|
编解码 Java
JDK的问题:用C启动虚拟机跟java运行结果有差异
JDK的问题:用C启动虚拟机跟java运行结果有差异
218 0
JDK的问题:用C启动虚拟机跟java运行结果有差异
|
10月前
|
Oracle 关系型数据库 虚拟化
在VMware的Win10虚拟机中安装使用ENSP
本文介绍了在Windows 10虚拟机上安装ENSP及相关软件的全过程,包括VirtualBox、WinPcap、Wireshark、VLC和ENSP的安装步骤,并提供图文演示,帮助用户顺利完成配置与测试。
2661 134
|
9月前
|
Linux 虚拟化 iOS开发
VMware Remote Console 13.0.1 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
VMware Remote Console 13.0.1 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
1923 0
VMware Remote Console 13.0.1 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
|
9月前
|
Linux 虚拟化 iOS开发
VMware Fusion 25H2 OEM BIOS 2.7 - 在 macOS 中运行 Windows 虚拟机的最佳方式
VMware Fusion 25H2 OEM BIOS 2.7 - 在 macOS 中运行 Windows 虚拟机的最佳方式
1815 0
VMware Fusion 25H2 OEM BIOS 2.7 - 在 macOS 中运行 Windows 虚拟机的最佳方式
|
编解码 网络协议 网络安全
OpenWrt x86 虚拟机VMware ESXi安装
OpenWrt x86 虚拟机VMware ESXi安装
|
11月前
|
Linux 虚拟化 iOS开发
Windows Server 2025 OVF (2025 年 8 月更新) - VMware 虚拟机模板
Windows Server 2025 OVF (2025 年 8 月更新) - VMware 虚拟机模板
1351 3
Windows Server 2025 OVF (2025 年 8 月更新) - VMware 虚拟机模板