01-25-javajvm-JVM和Java体系架构
创始人
2024-03-17 11:10:17
0

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入栈
基于寄存器的计算流程
mov eax,2 //将eax寄存器的值设为1
add eax,3 //使eax寄存器的值加3

self测试

public class StackStruTest {public static void main(String[] args) {int i=2;int j=3;int k=i+j;}
}

反编译字节码文件

在这里插入图片描述

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

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

相关内容

热门资讯

汽车油箱结构是什么(汽车油箱结... 本篇文章极速百科给大家谈谈汽车油箱结构是什么,以及汽车油箱结构原理图解对应的知识点,希望对各位有所帮...
美国2年期国债收益率上涨15个... 原标题:美国2年期国债收益率上涨15个基点 美国2年期国债收益率上涨15个基...
嵌入式 ADC使用手册完整版 ... 嵌入式 ADC使用手册完整版 (188977万字)💜&#...
重大消息战皇大厅开挂是真的吗... 您好:战皇大厅这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...
盘点十款牵手跑胡子为什么一直... 您好:牵手跑胡子这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游...
senator香烟多少一盒(s... 今天给各位分享senator香烟多少一盒的知识,其中也会对sevebstars香烟进行解释,如果能碰...
终于懂了新荣耀斗牛真的有挂吗... 您好:新荣耀斗牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信8435338】很多玩家在这款游戏...
盘点十款明星麻将到底有没有挂... 您好:明星麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【5848499】很多玩家在这款游戏...
总结文章“新道游棋牌有透视挂吗... 您好:新道游棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【7682267】很多玩家在这款游...
终于懂了手机麻将到底有没有挂... 您好:手机麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...