前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Java 虚拟机原理】JDK 体系结构 | Java 源码运行原理 | Java 虚拟机内存

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

作者头像
韩曙亮
发布2023-03-29 16:21:41
7470
发布2023-03-29 16:21:41
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、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 程序实际上是运行在虚拟机上的 ;

在这里插入图片描述
在这里插入图片描述

二、Java 源码运行原理


Java 源码运行原理 :

编写一个 HelloWorld.java ,

代码语言:javascript
复制
public class HelloWorld{
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

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

代码语言:javascript
复制
javac HelloWorld.java

得到 HelloWorld.class 字节码文件 ,

在这里插入图片描述
在这里插入图片描述

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

代码语言:javascript
复制
java HelloWorld
在这里插入图片描述
在这里插入图片描述

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

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

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

三、Java 虚拟机内存结构


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

代码语言:javascript
复制
java HelloWorld.class

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

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

5

个区域 :

  • 堆区 : 对象创建好之后都放在堆内存中 ;
  • 方法区 ( 元空间 ) ;
  • 栈 ( 线程栈 | 线程私有 ) : 存放线程运行的局部变量数据 , 是线程私有的控件
  • 本地方法栈 ( 线程私有 ) : 本地方法栈 存放的是 Jni 调用中 , C/C++ 的方法栈 ;
  • 程序计数器 ( 线程私有 ) ;

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、JDK 体系结构
  • 二、Java 源码运行原理
  • 三、Java 虚拟机内存结构
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档