另外的老师讲解。
虚拟机概念,JVM,JIT
虚拟机带来的好处
C++和Java编译上的区别
应用层代码不修改,为何有时候可以编译过,有时候编译不过?
什么是虚拟机
虚拟机分两种:
1 System virtual machine:一个系统的仿真和抽象,可供一个或多个操作系统在上面运行。eg,VM Ware,OEMU,KVM
虚拟机指令集可与硬件cpu指令不同
提供隔离isolation
2 Process virtual machine:只供一个进程的仿真执行。eg,JVM,Microsoft.NET,Android的Dalvik
什么是JVM
java code (.java)
JAVAC compiler
byte code (.class 类汇编语言,和硬件无关,和os无关)
不同系统的JVM
Windows,Linux,Mac
WORA:Write Once,Compile once,run anywhere
应用程序和bytecode编译器独立于硬件(machine-independent)
虚拟机软件仿真要实现指令集转换,虚拟地址物理地址的转换,代价:慢!Java刚问世时比C/C++慢20*+
什么是JTI
改进(慢):实时编译JIT(Just in Time) compiler
只有新的bytecode指令需要编译
10*faster using JIT
需要存储空间,占内存(memory footprint)
啥叫实时?编译什么?
汇编器,链接器,加载器
汇编器Assembler,转换标签(Tag)为偏移量(offset),汇编语言的IDE
链接器Linker,多个目标文件和库变为一个可执行文件或者新的库
lib obj
《linker》
lib dll exe
动态链接vs静态链接
动态,编译过的常用库二进制码只存一处,更新方便,but...Dll Hell-如缺少函数,函数名变了。
加载器loader,加载到内存,execve()