
简述
大约 6 分钟
简述
垃圾收集机制
垃圾收集机制为我们打理了很多繁琐的工作,大大提高了开发的效率,但是,垃圾收集也不是万能的,懂得JVM内部的内存结构、工作机制,是设计高扩展性应用和诊断运行时问题的基础,也是Java工程师进阶的必备能力。
JAVA虚拟机--跨语言平台
Java虚拟机根本不关心运行在其内部的程序到底是使用何种语言编写的,它只关心字节码文件。也就是说Java虚拟机拥有语言无关性,并不会单纯地与语言“终身绑定”,只要其他编程语言的编译结果满足并包含Java虚拟机的内部指令集、符号表以及其他的辅助信息,他就是一个有效的字节码文件,就能够被虚拟机所识别并装载运行。
最大的特点
- 一次编译,到处运行
- 自动内存管理
- 自动垃圾回收
Java 编译过程(编译原理)
- 词法分析
- 语法分析
- 语法/抽象语法树
- 注解抽象语法树
- 字节码生成器
基于栈与基于寄存器的两种指令集架构区别
基于栈式架构的特点
- 设计和实现更简单,适用于资源受限的系统
- 避开了寄存器的分配难题,使用零地址指令方式分配
- 指令流中的指令大部分都是
零地址指令,其执行过程依赖于操作栈。指令集更小,编译器更容易实现。 - 不需要硬件支持,可移植性更好,更好实现跨平台
基于寄存器架构的特点
- 典型的应用是x86的二进制指令集;比如传统的PC以及Andriod的Davlik虚拟机。
- 指令集架构则完全依赖硬件,可以执行差
- 性能优秀和执行更高效
- 花费更少的指令去完成一项操作
- 在大部分情况下,基于寄存器架构的指令集往往都是一地址指令、二地址指令和三地址指令为主,而基于展示架构的指令集却是以零地址指令为主
JVM的生命周期
虚拟机的启动
Java虚拟机的启动是通过 引导类加载器 创建一个初始类来完成的,这个类是由虚拟机的具体实现指定的
虚拟机的执行
- 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序
- 程序开始执行时它才会运行,程序结束时他就停止
- 执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程
虚拟机的退出
- 程序正常执行结束
- 程序在执行过程中遇到了异常或错误而异常终止
- 由于操作系统出现错误而导致Java虚拟机进程终止
- 某线程调用
RunTime 类或System 类的 exit 方法,或Runtime 类的 halt 方法,并且Java安全管理器也允许这次exit或hale操作 - 除此之外,JNI 规范描述了用 JNI Invocation API 来加载或卸载 Java 虚拟机时,Java 虚拟机退出的情况
JVM发展历程
- Sun Classic VM
- 世界上第一款商用虚拟机
- 虚拟机内部只提供解释器
- 解释器和编译器不能协同工作(JIT)
- 现在HotSpot内置了此虚拟机
- Exact VM
- Exact Memory Management 准确式内存管理
- 虚拟机可以知道内存中某个 具体位置的数据具体是什么类型
- 具备现代高性能虚拟机的雏形
- 热点探测
- 编译器与解释器混合工作模式
- 只在Solaris平台短暂使用,最终被HotSpot替代
- Exact Memory Management 准确式内存管理
- HotSpot VM
- HotSpot占有绝对的市场地位
- 其名称指的就是热点代码探测技术
- 通过计数器找到最具编译价值代码,触发即时编译或栈上替换
- 通过编译器和解释器协同工作,在最优化的程序 响应时间与最佳执行性能中取得平衡
- JRockit
- 专注于服务端应用
- 它不关注程序启动速度,因此其内部不包含解析器实现,全部代码都靠及时编译器编译后执行
- JRockit JVM是世界上最快的JVM
- 显著性能提高与硬件成本减少
- 全面的JAva运行时解决方案组合
- JRockit面向延迟敏感型应用的解决方案
JRockit Real TIme提供以毫秒或微妙 级的JVM响应时间,适合财务、军事指挥 、电信网络的需要 - MissionControl服务套件,他是一组以 极低的开销来监控、管理和分析生产环境 中的应用程序的工具
- JRockit面向延迟敏感型应用的解决方案
- 专注于服务端应用
- J9
- 三大商用虚拟机之一
号称时间上最快的Java虚拟机- 广泛应用于IBM的各种Java产品
- KVM和CDC/CLDC HotSpot
- 在Java ME产品线上的虚拟机
- 目前移动领域地位尴尬
- KVM简单、轻量、高度可移植,在面向更低端的设备上还维持自己的一片市场
- Azul VM
- 与特定平台绑定,软硬件配合的专有虚拟机
- 每个Azul VM实例都可以管理少数十个CPU和数百GB内存的硬件资源,并提供在巨大内存范围内实现可控的GC时间的垃圾收集器、转悠硬件优化的线程调度等优特性
- LIquid VM
- 不需要操作系统支持,也与特定平台绑定,软硬件配合
- Apache Harmony
- 被Sun打压的可怜儿
- 他的Java类库代码吸纳进了Andriod SDK
- Microsoft VM
- 被Sun指控后被抹杀的可怜儿
- 在IE3浏览器中支持JAva Applets, 开发了Microsoft JVM
- 只能在window平台下运行,但是当时性能最好的Java VM
- TaobaoJVM
- 基于OpenJDK 开发自己的定制版本AlibabaJDK,简称AJDK,是整个阿里 Java体系的基石
- 基于OpenJDK Hotspot VM 发布国内的第一个优化,深度定制且开源的高性能服务器版Java虚拟机
- 创新的GCIH技术实现了off-heap
- GCIH中的对象还能够在多个JAva虚拟机进程中实现共享
- 使用crc32指令实现 JVM intrinsic 降低 JNI 的调用开销
- PMU hardware 的 Java profiling tool 和诊断协助功能
- 针对大数据场景的ZenGC
- 应用在阿里产品性能高,硬件严重依赖intel的cpu,损失了兼容性,但提高了性能
- Graal VM
- 还在开发中
- 跨语言全栈虚拟机
