1, JDK和JRE的区
JDK 在JRE的基础上,还附带了一系列开发工具,诊断工具
JRE 仅包含java程序运行的必需组件,包括java虚拟机和核心类库。
2, Java虚拟机
跨平台的关键
提供一个托管环境,比如内存的自动管理和垃圾回收,数组越界,安全权限等动态监测
3, java虚拟机运行java代码
首先将class文件加载到java虚拟机中,加载的java类会被存放于方法区中,实际运行时会执行方法区内的代码,
堆和栈用于存储运行时的数据
运行过程中,每调用一个java方法,虚拟机会在当前线程的本地方法栈中生成一个栈帧,用于存放局部变量和字节码操作数。
退出当前执行的方法的时候,虚拟机会弹出当前线程的当前栈。
4,HotSpot(标准JDK带)将class文件翻译成机器码的两种形式
解释执行,逐条将字节码翻译成机器码并执行
即时编译,将一个方法中包含的所有字节码编译成机器码后再执行,主要针对需要反复执行的热点代码。
前者的优势在于无需等待编译,后者的优势在于实际运行速度更快(翻译过程已完成)。
即时编译可以获得运行时信息,比如说接口具体调用的实现可以确定。
HotSpot默认采用混合方式
5, HotSpot内置即时编译器:C1,C2,Graal。
C1又称之为Client编译器,适用于对启动性能有要求的的客户端GUI程序,采用的优化手段相对简单
C2又叫做Server编译器,是面向对峰值性能有要求的服务器端程序,采用的优化手段相对复杂,编译时间长,生成代码的执行效率较高。
C1和C2分配比率为1:2
HotSpot的即时编译都是放在额外的线程中进行的
作业:
Java语言和java虚拟机看待Boolean类型有什么不同?
java语言:true和false
Java虚拟机:1和0