《剑指JVM》JVM架构——JVM与Java体系结构——引言篇2

🌈hello,你好鸭,我是Ethan,西安电子科技大学大三在读,很高兴你能来阅读。

✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。
🏃人生之义,在于追求,不在成败,勤通大道。加油呀!

🔥个人主页:Ethan Yankang
🔥推荐:史上最强八股文||一分钟看完我的几百篇博客

🔥温馨提示:划到文末发现专栏彩蛋   点击这里直接传送

🔥本篇概览:详细讲解了JVM与Java体系结构中的JVM架构篇。🌈⭕🔥


【计算机领域一切迷惑的源头都是基本概念的模糊,算法除外】


🔥 《剑指JVM》序言-CSDN博客

🔥 《剑指JVM》全书-CSDN博客


 🌈引出

前一篇章:《剑指JVM》Java与JVM——JVM与Java体系结构——引言篇1-CSDN博客

但是同学们想过没有?今天这篇文章我们就来详细讲解


1.4JVM的整体架构——三层架构

🔥最上层:

类装载器子系统。javac编译器将编译好的字节码文件,通过Java类装载器执行机制,把对象或字节码文件存放在JVM 内存划分区域。


🔥中间层:

运行时数据区(Runtime Data Area)。主要是在Java 代码运行时用于存放数据的区域,包括方法区、堆、Java 栈、程序计数器、本地方法栈。

🔥最下层:

执行引擎层。执行引擎包含解释器、JIT(Just InTime)编译器和垃圾回收器Garbage Collection,GC),在后续章节会进行详细的介绍。


1.5Java程序的执行流程:

很重要的知识:


首先Java源代码文件通过javac编译器编译成Hello.class文件。通过java程序启动java虚拟机,虚拟机将编译器编译到类文件(.class)中的字节码加载进内存,经过字节码校验、翻译字节码等,执行过程中可能会遇到JIT优化。是指将常用的字节码进一步编译成机器码缓存便于下次使用。类文件中的指令执行的过程设计各种运算、内存操作、方法调用等,这些操作最终会转化为CPU的指令请求,JVM会交给操作系统执行。CPU根据输出再结果反馈给JVM,JVM 再根据程序的逻辑进行后续的处理和输出。如此反复之。



1.6JVM的架构模型

Java 编译器输入的指令流是一种基于栈的指令集架构,另一种指令集架构则是基于寄存器的指令集架构(实际物理机)。具体来说,这两种架构之间的区别如下:

基于栈

(1)设计和实现更简单,适用于资源受限的系统。比如机顶盒、打印机等嵌入式设备。

(2)避开了寄存器的分配难题,使用零地址指令方式分配,针对栈顶元操作。

(3)指令流中的指令大部分是零地址指令,其执行过程依赖操作栈。指令集更小,编译器更容易实现。

使用零地址指令方式分配是指指令中没有操作数地址字段,只有操作码。这种指令的执行过程依赖于操作栈,大部分操作数存放在栈顶,通过入栈和出栈操作来获取和使用数据。

(4)不需要硬件支持,可移植性更好,可以更好地实现跨平台。



基于寄存器

(1)典型的应用是x86的二进制指令集。比如传统的PC。

(2)指令集架构则完全依赖硬件,可移植性差。
(3)指令直接由CPU来执行,性能优秀和执行更高效。
(4)花费更少的指令去完成一项操作。
(5)在大部分情况下,基于寄存器架构的指令集往往都以一地址指令、二地址指令和三地址指令为主,而基于栈式架构的指令集却是以零地址指令为主。


举例:

public class stack {
    public static void main(String[] args) {
        int num1 = 2;
        int num2 = 3;
        int sum = num1 + num2;
        System.out.println("2 + 3 的结果是:" + sum);
    }
}

使用

javap -v stack.class

反编译后:

字节码如下,是基于栈的操作:


基于寄存器的计算逻辑如下:


下面是JVM的指令详细执行过程,二刷的时候再着重讲解理解

        


1.7JVM的生命周期

JVM 的生命周期包含三个状态:JVM 的启动、JVM 的执行和JVM 的退出。 

JVM 可以通过 Java命令启动,接着通过引导类加载器(Bootstrap Class Loader)加载类文件。
最后找到程序中的 main()方法。去执行 Java 应用程序。JVM 的执行表示一个已经启动的JVM 开始执行Java 程序。JVM 通过 main()方法开始执行程序,程序结束时JVM 就停止。执行一个Java程序的时候,真正在执行的是一个叫作JVM的进程,通常情况下,一个Java 程序对应一个JVM 进程.



💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖

热门专栏推荐

🌈🌈计算机科学入门系列                     关注走一波💕💕

🌈🌈CSAPP深入理解计算机原理        关注走一波💕💕

🌈🌈微服务项目之黑马头条                 关注走一波💕💕

🌈🌈redis深度项目之黑马点评            关注走一波💕💕

🌈🌈JAVA面试八股文系列专栏           关注走一波💕💕

🌈🌈JAVA基础试题集精讲                  关注走一波💕💕   

🌈🌈代码随想录精讲200题                  关注走一波💕💕


总栏

🌈🌈JAVA基础要夯牢                         关注走一波💕💕  

🌈🌈​​​​​​JAVA后端技术栈                          关注走一波💕💕  

🌈🌈JAVA面试八股文​​​​​​                          关注走一波💕💕  

🌈🌈JAVA项目(含源码深度剖析)    关注走一波💕💕  

🌈🌈计算机四件套                               关注走一波💕💕  

🌈🌈数据结构与算法                           ​关注走一波💕💕  

🌈🌈必知必会工具集                           关注走一波💕💕

🌈🌈书籍网课笔记汇总                       关注走一波💕💕         



📣非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤收藏✅ 评论💬,大佬三连必回哦!thanks!!!
📚愿大家都能学有所得,功不唐捐!

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值