【从零开始学JVM】第一章_JVM和java体系结构

文章目录

第一章_JVM和java体系结构

1.java和JVM简介

1.1Java

Java是一门跨平台的语言

Java 语言的特点包括:

  1. 跨平台性:Java 程序可以在不同操作系统上运行,只需安装对应平台的 Java 虚拟机(JVM)即可。
  2. 面向对象:Java 是一种纯粹的面向对象编程语言,支持封装、继承、多态等面向对象特性。
  3. 健壮性:Java 在设计时考虑了许多安全检查,如内存管理、异常处理等,以确保程序的稳定性和可靠性。
  4. 安全性:Java 提供了安全管理机制,可以防止恶意代码对系统造成危害。
  5. 高性能:Java 通过即时编译等技术提高了执行效率,适用于需要高性能的应用场景。

1.2JVM

JVM 是 Java 程序的运行环境,它负责将 Java 字节码翻译成特定平台的机器码并执行。

JVM 还提供了垃圾回收、内存管理等功能,帮助开发者更轻松地管理程序的执行。

2.Java文件编译过程

  1. 程序员编写的.java文件
  2. 由javac编译成字节码文件.class:(为什么编译成class文件,因为JVM只认识.class文件)
  3. 在由JVM编译成电脑认识的文件(0101010101) (对于电脑系统来说 文件代表一切)

3.JVM整体结构

  1. 类加载器子系统(Class Loader Subsystem)
    • 类加载器负责加载类文件到内存中,并生成对应的 Class 对象。类加载器按照特定的规则从不同的位置加载类文件,如文件系统、网络等。
    • 类加载器通常包括启动类加载器(Bootstrap Class Loader)、扩展类加载器(Extension Class Loader)和应用程序类加载器(Application Class Loader)等层次。
  2. 运行时数据区(Runtime Data Area)
    • 方法区(Method Area):存储类的元信息、静态变量、常量池等数据。
    • 堆(Heap):存储对象实例以及数组。
    • 栈(Stack):存储局部变量、操作数栈、方法返回地址等。
    • 程序计数器(Program Counter Register):记录当前线程执行的字节码指令地址。
    • 本地方法栈(Native Method Stack):为执行本地方法服务。
  3. 执行引擎(Execution Engine)
    • 解释器(Interpreter):逐行解释字节码并执行对应的本地机器指令。
    • 即时编译器(Just-In-Time Compiler,JIT):将热点代码(频繁执行的代码段)编译成本地机器码,提高执行效率。
  4. 本地方法接口(Native Interface)
    • 提供了与底层 C/C++ 等语言交互的能力,允许 Java 调用本地方法。
  5. 本地方法库(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发展路程

  1. JDK 1.0(1996年):最初版本的 Java 开发工具包中包含了最基本的 JVM,实现了 Java 语言的基本功能。
  2. JDK 1.2(1998年):引入了 Just-In-Time 编译器(JIT),提高了 Java 程序的性能。
  3. JDK 1.3(2000年):增加了 Java HotSpot 虚拟机,引入了即时编译器技术,进一步提升了性能。
  4. JDK 1.4(2002年):引入了新的垃圾回收器(包括并行回收器和分代回收器),改善了内存管理和回收效率。
  5. JDK 5.0(2004年):引入了泛型、枚举、自动装箱拆箱等新特性,对虚拟机也做了优化和改进。
  6. JDK 6(2006年):增加了 G1 垃圾回收器,改进了性能和可靠性。
  7. JDK 7(2011年):引入了新的垃圾回收器(G1 GC)、InvokeDynamic 指令等功能,提高了性能和灵活性。
  8. JDK 8(2014年):引入了 Lambda 表达式、Stream API 等新特性,同时对虚拟机进行了性能优化。
  9. JDK 9(2017年):引入了模块化系统(Jigsaw)、改进了垃圾回收器、优化了性能等。
  10. JDK 10、11、12、13、14、15、16、17、18:每个版本都带来了新的特性、改进和优化,如局部变量类型推断、ZGC 垃圾回收器、Shenandoah 垃圾回收器等。
相关推荐
LuckyLay5 分钟前
Spring学习笔记_27——@EnableLoadTimeWeaving
java·spring boot·spring
向阳121818 分钟前
Dubbo负载均衡
java·运维·负载均衡·dubbo
Gu Gu Study28 分钟前
【用Java学习数据结构系列】泛型上界与通配符上界
java·开发语言
yyfhq29 分钟前
sdnet
python
测试199837 分钟前
2024软件测试面试热点问题
自动化测试·软件测试·python·测试工具·面试·职场和发展·压力测试
love_and_hope37 分钟前
Pytorch学习--神经网络--搭建小实战(手撕CIFAR 10 model structure)和 Sequential 的使用
人工智能·pytorch·python·深度学习·学习
WaaTong1 小时前
《重学Java设计模式》之 原型模式
java·设计模式·原型模式
m0_743048441 小时前
初识Java EE和Spring Boot
java·java-ee
AskHarries1 小时前
Java字节码增强库ByteBuddy
java·后端
海阔天空_20131 小时前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化