1 前言
Java自动动态管理内存,自动垃圾回收
2 面向人群及参考书目
Java虚拟机规范:
《深入理解Java虚拟机》周志明
3 Java及JVM简介
Java:跨平台语言
JVM:跨语言的平台
Java内置的虚拟机是HotSpot
任何能在JVM平台上执行的字节码格式是相同的,统称为JVM字节码
4 Java发展的重大事件
1990年 Sun公司开发了Oak 后改名为Java
2000年 Java HotSpot 虚拟机发布,Java的默认虚拟机
2004年 Java5.0发布
2006年 Java开源 建立了OpenJDK,HotSpot也成为OpenJDk的默认虚拟机
2010年 Oracle收购了Sun
2011年 JDK7发布,正式启用G1垃圾回收器
5 虚拟机与Java虚拟机
Java虚拟机执行Java的字节码
Java虚拟机特点:
- 一次编译,到处运行
- 自动内存管理
- 自动垃圾回收功能
虚拟机位置
6 JVM整体结构
方法区和堆是线程共享的
Java栈、本地方法栈、程序计数器是线程独享的
执行引擎:解释器,即时编译器和垃圾回收器
7 Java代码执行流程
Java源码(.java)—>
Java编译器(词法分析、语法分析、语义分析、字节码生成器)—>字节码(.class)—>
Java虚拟机(类加载器—>字节码校验器—>解释执行编译执行)—>操作系统
8 JVM的架构模型
基于栈的指令集架构
- 设计简单
- 指令多,指令集小
- 可移植性好
- 性能稍差
基于寄存器的指令集架构
- 完全依赖硬件,可移植性差
- 指令少,指令集大
- 性能高效
9 JVM生命周期
启动
通过引导类加载器(bootstrap class loader)创建的初始类(initial class)完成,这个初始类是由虚拟机具体实现指定的
执行
执行一个Java程序时,执行的就是一个叫做Java虚拟机的进程
退出
程序结束时虚拟机退出
10 JVM的发展历程
- 1996年 Sun Classic VM 世界上第一款商用虚拟机,只提供了解释器,用即时编译器的话需要外挂
- Exact VM 热点探测,只针对热点代码即时编译;可以与即时解释器混用
- 1997 HotSpot VM,JDK和OpenJDk的默认虚拟机都是HotSpot,方法区的概念只有HotSpot才有。
-
热点代码探测技术,可即时编译也可栈上替换
-
编译器和解释器可同时工作,相应时间和执行性能相平衡
- BEA JRockit,专注于服务器端应用,不关注于程序响应时间,不包含解释器。世界上最快的JVM
-
MissionControl,极低的开销来监控、管理和分析生产环境的工具
- IBM J9,多用途VM,在IBM内性能较好
- GRaal VM Oracle ,跨语言全栈虚拟机,任何语言的运行平台使用