一、JVM和Java体系结构( 三 )


同年,IBM的J9开源,形成了现在的Open J9社区
2018年,的Java侵权案判决,.赔偿计88亿美元
同年,宣告成为历史名词,JDBC、JMS、赠予基金会
同年,JDK11发布,LTS版木的JDK,发布革命性的ZGC,调整JDK授权许可
2019年,JDK12发布,加入领导开发的 GC
Open JDK和 JDK
在JDK11之前,中还会存在一些中没有的、闭源的功能 。但在JDK11中,我们可以认为和代码实质上已经完全一致的程度 。
5、虚拟机与Java虚拟机 5.1、虚拟机
所谓虚拟机( ),就是一台虚拟的计算机 。它是一款软件,用来执行一系列虚拟计算机指令 。大体上,虚拟机可以分为系统虚拟机和程序虚拟机 。
无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚拟机提供的资源中 。
5.2、Java虚拟机
Java虚拟机是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编译而成 。
JVM平台的各种语言可以共享Java虚拟机带来的跨平台性、优秀的垃圾回
器,以及可靠的即时编译器 。
Java技术的核心就是Java虚拟机(JVM,Java),
因为所有的Java程序都运行在Java虚拟机内部 。
作用
Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行 。每一条Java指令,Java虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里 。
特点
一次编译,到处运行
自动内存管理
自动垃圾回收功能
5.3、JVM的位置
6、JVM的整体结构
VM是目前市面上高性能虚拟机的代表作之一 。
它采用解释器与即时编译器并存的架构 。
在今天,Java程序的运行性能早己脱胎换骨,己经达到了可以和C/C++程序一较高下的地
步 。
方法区和堆是多线程共享一份的,而Java栈、本地方法栈、程序计数器是每个线程都有独一份的 。
7、Java代码执行流程
8、JVM的架构模型
是基于栈的指令集架构,也被称为基于堆栈的虚拟机(Stack-based) 。虚拟机将所有的计算操作都基于操作数栈进行,而不是像基于寄存器的指令集架构(-basedSet )那样基于寄存器 。这种设计使得虚拟机的指令集更加简单,同时也更加容易实现跨平台的特性 。
Java编译器输入的指令流基木上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构 。
具体来说:这两种架构之间的区别:
基于栈式架构的特点
基于寄存器架构的特点
举例1:
同样执行2+3这种逻辑操作,其指令分别如下:
基于栈的计算流程(以Java虚拟机为例):
iconst_2 //常量2入栈istore_1iconst3 //常量3入栈istore_2iload_1iload_2iadd//常量2、3出栈,执行相加istore_0 //结果5入栈
而基于寄存器的计算流程:
mov eax,2//将eax寄存器的值设为2add eax,3//使eax寄存器的值加3
javap -v .\.class
命令:进行反编译
javap -V .class文件
也可以使用idea插件
iconst_2 //常量2入栈istore_1//表示常量2保存在索引为1的位置上iconst3 //常量3入栈istore_2 //表示常量3保存在索引为2的位置上iload_1 //加载索引为1的常量iload_2//加载索引为2的常量iadd//常量2、3出栈,执行相加istore_0 //结果5入栈
举例2:
和是Java字节码指令,用于将常数值推送到操作数栈中 。
指令用于将一个字节大小的常数值(-128到127)推送到操作数栈中 。它的操作码为0x10,后面跟着一个8位有符号整数表示要推送的常数值 。