文章目录
第一章_JVM和java体系结构
1.java和JVM简介
1.1Java
Java是一门跨平台的语言
Java 语言的特点包括:
- 跨平台性:Java 程序可以在不同操作系统上运行,只需安装对应平台的 Java 虚拟机(JVM)即可。
- 面向对象:Java 是一种纯粹的面向对象编程语言,支持封装、继承、多态等面向对象特性。
- 健壮性:Java 在设计时考虑了许多安全检查,如内存管理、异常处理等,以确保程序的稳定性和可靠性。
- 安全性:Java 提供了安全管理机制,可以防止恶意代码对系统造成危害。
- 高性能:Java 通过即时编译等技术提高了执行效率,适用于需要高性能的应用场景。
1.2JVM
JVM 是 Java 程序的运行环境,它负责将 Java 字节码翻译成特定平台的机器码并执行。
JVM 还提供了垃圾回收、内存管理等功能,帮助开发者更轻松地管理程序的执行。
2.Java文件编译过程
- 程序员编写的.java文件
- 由javac编译成字节码文件.class:(为什么编译成class文件,因为JVM只认识.class文件)
- 在由JVM编译成电脑认识的文件(0101010101) (对于电脑系统来说 文件代表一切)
3.JVM整体结构
- 类加载器子系统(Class Loader Subsystem) :
- 类加载器负责加载类文件到内存中,并生成对应的 Class 对象。类加载器按照特定的规则从不同的位置加载类文件,如文件系统、网络等。
- 类加载器通常包括启动类加载器(Bootstrap Class Loader)、扩展类加载器(Extension Class Loader)和应用程序类加载器(Application Class Loader)等层次。
- 运行时数据区(Runtime Data Area) :
- 方法区(Method Area):存储类的元信息、静态变量、常量池等数据。
- 堆(Heap):存储对象实例以及数组。
- 栈(Stack):存储局部变量、操作数栈、方法返回地址等。
- 程序计数器(Program Counter Register):记录当前线程执行的字节码指令地址。
- 本地方法栈(Native Method Stack):为执行本地方法服务。
- 执行引擎(Execution Engine) :
- 解释器(Interpreter):逐行解释字节码并执行对应的本地机器指令。
- 即时编译器(Just-In-Time Compiler,JIT):将热点代码(频繁执行的代码段)编译成本地机器码,提高执行效率。
- 本地方法接口(Native Interface) :
- 提供了与底层 C/C++ 等语言交互的能力,允许 Java 调用本地方法。
- 本地方法库(Native Method Libraries) :
- 包含了一些与平台相关的本地库和方法,用于支持 JVM 的底层操作。
4.JVM生命周期
虚拟机的启动
通过引导类加载器(bootstrap class loader)创建一个初始类来完成,这个类是由虚拟机的具体实现指定的。
虚拟机的执行
- 一个运行中的java虚拟机有这一个清晰地任务,执行java程序
- 程序开始执行时他才运行,程序结束时它就停止
- 执行一个所谓的java程序的时候,真真正正在执行的是一个叫做java虚拟机的进程
虚拟机的退出程序正常执行结束
- 程序在执行过程中遇到了异常会错误而终止
- 由于操作系统出现错误而导致java虚拟机进程终止
- 某线程调用Runtime类或Systen类的exit方法,或Runtime类的halt方法,并且java安全管理器也允许这次exit或halt操作。
- 除此之外,JNI规范描述了用JNI Invocation API来加载或卸载Java虚拟机时,jaca虚拟机的退出情况
5.JVM发展进程
Sun Classic VM
- 世界上第一款商用java虚拟机
- 虚拟机内部只提供解释器
- 现在的hotspot内置了此虚拟机
Exact VM
- 可以知道内存中某个位置的数据具体是什么类型
- 具备现代高性能虚拟机的雏形:热点探测+编译器和解释器混合工作模式
HotSpot VM
- JDK1.3时,成为默认虚拟机
- 在服务器端,桌面到移动端,嵌入式都有应用
- Hotspot指的就是热点代码探测技术
JRockit
- 专注于服务器端应用
- 内部不包含解析器实现
- 是世界上最快的JVM
J9
- 有影响力的三大商用虚拟机之一
- 服务器端,桌面应用,嵌入式等多用途VM
Azul VM
- 无停顿垃圾回收
- 与特定硬件平台绑定,软硬件配合的专有虚拟机
- 可预测性
- 适用于大内存应用
Liquid VM
Taoban JVM
6.JDK发展路程
- JDK 1.0(1996年):最初版本的 Java 开发工具包中包含了最基本的 JVM,实现了 Java 语言的基本功能。
- JDK 1.2(1998年):引入了 Just-In-Time 编译器(JIT),提高了 Java 程序的性能。
- JDK 1.3(2000年):增加了 Java HotSpot 虚拟机,引入了即时编译器技术,进一步提升了性能。
- JDK 1.4(2002年):引入了新的垃圾回收器(包括并行回收器和分代回收器),改善了内存管理和回收效率。
- JDK 5.0(2004年):引入了泛型、枚举、自动装箱拆箱等新特性,对虚拟机也做了优化和改进。
- JDK 6(2006年):增加了 G1 垃圾回收器,改进了性能和可靠性。
- JDK 7(2011年):引入了新的垃圾回收器(G1 GC)、InvokeDynamic 指令等功能,提高了性能和灵活性。
- JDK 8(2014年):引入了 Lambda 表达式、Stream API 等新特性,同时对虚拟机进行了性能优化。
- JDK 9(2017年):引入了模块化系统(Jigsaw)、改进了垃圾回收器、优化了性能等。
- JDK 10、11、12、13、14、15、16、17、18:每个版本都带来了新的特性、改进和优化,如局部变量类型推断、ZGC 垃圾回收器、Shenandoah 垃圾回收器等。