• 01-25-javajvm-JVM和Java体系架构


    01-java-JVM和Java体系架构:

    1、jvm底层,对性能调优,java是动态内存分配

    2、java的跨平台性:
    Java虚拟机关心“字节码”文件,Java虚拟机和语言关性,只要其他编程语言的编译结果满足并包含Java虚拟机的内部指令集、符号表以及其他的辅助信息,它就是一个有效的字节码文件,就能够被虚拟机所识别并装载运行。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8URV21xh-1669901014102)(png/image-20211009173931444.png)]

    3、字节码:java字节码指用编译后的class字节码文件。能在jvm平台上执行的字节码格式都是一样的。所以应该统称为:jvm字节码。
    Java虚拟机与Java语言并没有必然的联系,它只与特定的二进制文件格式——Class文件格式所关联,Class文件中包含了Java虚拟机指令集(或者称为字节码、Bytecodes)和符号表,还有一些其他辅助信息。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pBpPlPSM-1669901014104)(png/image-20211009174052949.png)]

    4、虚拟接和java虚拟机

    所谓虚拟机(Virtual Machine),就是一台虚拟的计算机。它是一款软件,用来执行一系列虚拟计算机指令。虚拟机可以分为系统虚拟机和程序虚拟机。

    大名鼎鼎的Virtual Box,VMware就属于系统虚拟机,它们完全是对物理计算机的仿真,提供了一个可运行完整操作系统的软件平台。
    程序虚拟机的典型代表就是Java虚拟机,它专门为执行单个计算机程序而设计,在Java虚拟机中执行的指令我们称为Java字节码指令。
    无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚拟机提供的资源中。

    java虚拟机:特点:一次编辑到处运行,内存自动管理,垃圾自动回收

    ​ Java虚拟机是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编译而成。
    ​ JVM平台的各种语言可以共享Java虚拟机带来的跨平台性、优秀的垃圾回器,以及可靠的即时编译器。
    ​ Java技术的核心就是Java虚拟机(JVM,Java Virtual Machine),所有的Java程序都运行在Java虚拟机内部。
    ​ Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行。每一条Java指令,Java虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里。

    jvm的位置:JVM是运行在操作系统之上的,它与硬件没有直接的交互

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZPpEVwrL-1669901014105)(png/image-20211015161155674.png)]

    Java的体系结构

    • 执行引擎(高级语言翻译成机器语言)包含三部分:解释器,即时编译器,垃圾回收器

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-816tWy1u-1669901014106)(png/image-20211015161709684.png)]

    在这里插入图片描述

    在这里插入图片描述

    Java代码执行流程
    在这里插入图片描述

    JVM架构模型
    Java编译器输入的指令流:

    1、基于栈的指令集架构
    1)、设计和实现更简单,适用于资源受限的系统
    2)、避开了寄存器的分配难题:使用零地址指令方式分配(零地址,栈,入栈出栈,不需要地址记录,只操作当前)
    3)、指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小,编译器容易实现
    4)、不需要硬件支持,可移植性更好,更好实现跨平台
    2、基于寄存器的指令集架构(了解)。
    1)、典型的应用是x86的二进制指令集:比如传统的PC以及Android的Davlik虚拟机。
    2)、指令集架构则完全依赖硬件,与硬件的耦合度高,可移植性差
    3)、性能优秀和执行更高效
    4)、花费更少的指令去完成一项操作
    5)、在大部分情况下,基于寄存器架构的指令集往往都以一地址指令、二地址指令和三地址指令为主,而基于栈式架构的指令集却是以零地址指令为主

    两种架构的举例:

    同样执行2+3这种逻辑操作,其指令分别如下:

    基于栈的计算流程(以Java虚拟机为例)

    iconst_2 	//常量2入栈
    istore_1	//记录常量2的地址1
    iconst_3 	// 常量3入栈
    istore_2	//记录常量2的地址2
    iload_1		//加载常量1
    iload_2		//加载常量2
    iadd 		//常量2/3出栈,执行相加
    istore_0 	// 结果5入栈
    基于寄存器的计算流程
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    mov eax,2 //将eax寄存器的值设为1
    add eax,3 //使eax寄存器的值加3
    
    • 1
    • 2

    self测试

    public class StackStruTest {
        public static void main(String[] args) {
            int i=2;
            int j=3;
            int k=i+j;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    反编译字节码文件

    在这里插入图片描述

    总结 栈:跨平台性、指令集小、指令多;执行性能比寄存器差

    JVM虚拟机历史了解:

    HotSpot VM
    • HotSpot历史

      • 最初由一家名为“Longview Technologies”的小公司设计
      • 1997年,此公司被sun收购;2009年,Sun公司被甲骨文收购。
      • JDK1.3时,HotSpot VM成为默认虚拟机
    • 目前Hotspot占有绝对的市场地位,称霸武林。

      • 不管是现在仍在广泛使用的JDK6,还是使用比例较多的JDK8中,默认的虚拟机都是HotSpot
      • Sun / Oracle JDK 和 OpenJDK 的默认虚拟机
      • 因此本课程中默认介绍的虚拟机都是HotSpot,相关机制也主要是指HotSpot的Gc机制。(比如其他两个商用虚机都没有方法区的概念)
    • 从服务器、桌面到移动端、嵌入式都有应用。

    • 名称中的HotSpot指的就是它的热点代码探测技术。

      • 通过计数器找到最具编译价值代码,触发即时编译或栈上替换
      • 通过编译器与解释器协同工作,在最优化的程序响应时间与最佳执行性能中取得平衡

    其他虚拟机有(了解):Sun Classic VM,Exact VM,JRockit,IBM的J9,KVM和CDC / CLDC Hotspot,Azul VM,Liquid VM,Apache Harmony,Micorsoft JVM,Taobao JVM,Dalvik VM,Graal VM

    其他虚拟机有(了解):Sun Classic VM,Exact VM,JRockit,IBM的J9,KVM和CDC / CLDC Hotspot,Azul VM,Liquid VM,Apache Harmony,Micorsoft JVM,Taobao JVM,Dalvik VM,Graal VM

  • 相关阅读:
    二项分布和泊松分布
    【Spring Cloud实战】Spring Cloud GateWay服务网关
    电子电路设计基本概念100问(六)【学习目标:原理图、PCB、阻抗设计、电子设计基本原则、基本原器件等】
    C Primer Plus(6) 中文版 第2章 C语言概述 2.9 关键概念 2.10 本章小结
    Lua语法结构
    【Unity3D】基于粒子系统实现烟花特效
    微信小程序 movable-view 控制长按才触发拖动 轻轻滑动页面正常滚动效果
    特征降维学习笔记(pca和lda)(1)
    C++中静态成员和非静态成员
    如何用 C++ 部署深度学习模型?
  • 原文地址:https://blog.csdn.net/qq_37171694/article/details/128139136