01-java-JVM和Java体系架构:
1、jvm底层,对性能调优,java是动态内存分配
2、java的跨平台性:
Java虚拟机关心“字节码”文件,Java虚拟机和语言关性,只要其他编程语言的编译结果满足并包含Java虚拟机的内部指令集、符号表以及其他的辅助信息,它就是一个有效的字节码文件,就能够被虚拟机所识别并装载运行。
3、字节码:java字节码指用编译后的class字节码文件。能在jvm平台上执行的字节码格式都是一样的。所以应该统称为:jvm字节码。
Java虚拟机与Java语言并没有必然的联系,它只与特定的二进制文件格式——Class文件格式所关联,Class文件中包含了Java虚拟机指令集(或者称为字节码、Bytecodes)和符号表,还有一些其他辅助信息。
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是运行在操作系统之上的,它与硬件没有直接的交互
Java的体系结构
- 执行引擎(高级语言翻译成机器语言)包含三部分:解释器,即时编译器,垃圾回收器
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