码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • JVM 虚拟机 ---> JVM 基础概念


    文章目录

      • JVM 虚拟机 ---> JVM 基础概念
        • 一、Java 跨平台
          • 主要原因
        • 二、JVM 的组成结构
        • 三、Java 代码执行流程
        • 四、JVM 的生命周期

    JVM 虚拟机 —> JVM 基础概念

    一、Java 跨平台

    • Java是一种可跨平台的编程语言,我们通常把CPU处理器与操作系统构成的计算机系统整体成为叫平台
    • 不同的CPU,差异主要在底层指令集不同,指令集分为精简指令集(RISC)和复杂指令集(CISC)。每个CPU都有自己的特定指令集

    **指令集:**是CPU中用来计算和控制计算机系统的一套指令集合

    • 不同的操作系统,支持不同的CPU,严格来说,不同的操作系统支持不同的CPU指令集。例如:早期的Mac操作系统只支持PowerPC,不能安装在IntelCPU上。
    • 现在Windows、Linux、MAC和Solaris都支持Intel和AMD CPU指令集
    主要原因
    • Java 可以跨平台的主要原因是有 JVM
    • 不同的平台,使用不同的 JVM

    Java 源代码在编译后会生成一个 Class 文件,称为字节码文件,JVM负责将字节码文件翻译成特定平台下的机器码,然后运行

    简单来讲,Java的跨平台就是因为不同版本的 JVM。只要在不同的平台上安装相应的JVM,就可以运行字节码文件(.class)并运行我们编写的Java程序。

    在这个过程中,我们编写的Java程序没有做任何改动,只是通过JVM的“中间层”,就可以在不同的平台上运行,真正实现了“一次编译,到处运行(write once,run anywhere)”的目的。

    综上所述,JVM是跨平台的桥梁和中间件,是实现跨平台的关键。首先将Java代码编译成字节码文件,然后通过JVM将其翻译成机器语言,从而达到运行Java程序的目的。因此,运行Java程序必须有JVM的支持,因为编译的结果不是机器代码,必须在执行前由JVM再次翻译

    注意:编译的结果不是生成机器代码,而是生成字节码。字节码不能直接运行,必须由JVM转换成机器码。编译生成的字节码在不同的平台上是相同的,但是JVM翻译的机器码是不同的。

    image-20230911171956765

    二、JVM 的组成结构

    JVM 由 类加载器、运行时数据区、执行引擎组成

    image-20230911172211381

    三、Java 代码执行流程

    image-20230911172241642

    四、JVM 的生命周期

    JAVA程序的执行过程简单来说包括:

    1. JAVA源代码编译成字节码;
    2. 字节码校验并把JAVA程序通过类加载器加载到JVM内存中;
    3. 在加载到内存后针对每个类创建Class对象;
    4. 字节码指令和数据初始化到内存中;
    5. 找到main方法,并创建栈帧;
    6. 初始化程序计数器内部的值为main方法的内存地址;
    7. 程序计数器不断递增,逐条执行JAVA字节码指令,把指令执行过程的数据存放到操作数栈中(入栈),执行完成后从操作数栈取出后放到局部变量表中,遇到创建对象,则在堆内存中分配一段连续的空间存储对象,栈内存中的局部变量表存放指向堆内存的引用;遇到方法调用则再创建一个栈帧,压到当前栈帧的上面。
  • 相关阅读:
    自学成为一名黑客(自学笔记)
    C语言,求一个十进制数的二进制中1出现的次数,版本2.0(另外两种方法介绍)
    运营︱内容营销怎么做?
    JavaScript从入门到精通系列第二十五篇:JavaScript中的Date对象
    正则表达式删除(或替换)匹配的字符串及软件推荐
    Java实现二十三种设计模式(二)—— 七种结构型模式 (上)——适配器模式、桥接模式、组合模式
    图解LeetCode——1413. 逐步求和得到正数的最小值(难度:简单)
    Java版工程行业管理系统源码-专业的工程管理软件- 工程项目各模块及其功能点清单
    数组的定义、数组声明创建、内存分析、数组的三种初始化、数组的四个基本特点、数组边界
    Python通过dlib模块实现人脸识别的案例
  • 原文地址:https://blog.csdn.net/weixin_62587914/article/details/132813765
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号