学校网站的英文,动漫制作专业软件,淄博手机网站建设报价,减肥瘦身网站模板源码启航JVM概论 #x1f604;生命不息#xff0c;写作不止 #x1f525; 继续踏上学习之路#xff0c;学之分享笔记 #x1f44a; 总有一天我也能像各位大佬一样 #x1f3c6; 博客首页 怒放吧德德 To记录领地 #x1f31d;分享学习心得#xff0c;欢迎指正#xff0c…启航·JVM概论 生命不息写作不止 继续踏上学习之路学之分享笔记 总有一天我也能像各位大佬一样 博客首页 怒放吧德德 To记录领地 分享学习心得欢迎指正大家一起学习成长 文章目录 启航·JVM概论前言虚拟机和Java虚拟机1 虚拟机2 Java虚拟机3 JVM的位置4 *JVM的整体结构1) 简单介绍HotSpot VM2) 整体结构介绍 5 Java代码执行流程6 JVM的生命周期虚拟机启动虚拟机执行虚拟机退出 7 常见虚拟机 总结 前言
为什么要学习JVM相信好多开发者开头也处于迷惑之中对于Java虚拟机也是很头疼大多开发者都会认为学习JVM无非就是面试。然而学习JVM并不是为了面试更是为了深入去理解Java这门语言笔者大学毕业入坑Java以来也有一年多了说长也不长但是在开发的过程中却也是遇到一些性能问题最后也是由领导解决。个人认为学习Java虚拟机更是一种基础知识在开发中才能够深入理解一些细节。
虚拟机和Java虚拟机 1 虚拟机
虚拟机Virtual Machine是一种软件或硬件实体它模拟了物理计算机的功能允许在其上运行操作系统和应用程序。虚拟机通常用于隔离不同的计算环境提供了一种独立于物理硬件的计算平台。
2 Java虚拟机
Java虚拟机Java Virtual MachineJVM是一种软件虚拟机特别为执行Java程序而设计。JVM是Java平台的核心组件之一它负责将Java字节码翻译成可以在特定计算机上运行的本地机器代码。Java程序员编写的Java代码首先被编译成字节码然后由JVM执行。这种方式使Java程序具有跨平台的特性因为只需要在不同平台上实现JVM就可以在各种操作系统上运行相同的Java程序。 JVM的主要任务包括字节码加载、解释执行或即时编译、垃圾回收、内存管理等。它还提供了各种标准库和API用于支持Java程序的运行和互动。不同的Java虚拟机实现可以适应不同的硬件和操作系统但它们都遵循Java虚拟机规范Java Virtual Machine Specification以确保Java程序的跨平台性。 3 JVM的位置
Java虚拟机试运行在操作系统之上的和硬件是没有直接交互的。在Java 生态系统中的三个关键组件JDKJava Development Kit、JREJava Runtime Environment和 JVMJava Virtual Machine① JDKJava Development Kit JDK是用于Java应用程序的开发工具包。它包括Java编译器javac、Java虚拟机JVM以及各种开发工具和库如调试器、性能分析工具、API文档生成工具等。JDK是开发人员用于创建、编译和调试Java应用程序的关键工具它使开发者能够编写Java源代码并将其编译成Java字节码。JDK的结构包括bin目录其中包含编译器和其他命令行工具以及lib目录其中包含Java类库和运行时支持。 ② JREJava Runtime Environment JRE是用于运行Java应用程序的运行时环境。它包括Java虚拟机JVM和Java类库Java API允许用户执行已编译的Java应用程序而不需要进行开发。JRE没有开发工具因此不包含编译器或其他开发相关的工具。JRE的结构包括bin目录其中包含用于运行Java应用程序的JVM可执行文件以及lib目录其中包含Java类库 三者中JDK 包含 JRE而 JRE 包含 JVM。JDK 提供了完整的 Java 开发和运行时环境适用于开发人员而 JRE 提供了用于运行 Java 应用程序的环境适用于普通用户或生产环境。 JVM 是在 JDK 和 JRE 中共享的核心组件负责执行 Java 应用程序。
4 *JVM的整体结构 1) 简单介绍HotSpot VM HotSpot VMHotSpot Virtual Machine是Oracle以前是Sun Microsystems开发的 Java 虚拟机的一种实现它是Java平台上最广泛使用的虚拟机之一。HotSpot VM在性能和可移植性方面表现出色它是Java应用程序的运行时引擎负责将Java字节码翻译成本地机器代码并执行程序。 HotSpot VM是Oracle JDKJava Development Kit的一部分也是许多其他Java发行版的基础包括OpenJDK。由于其卓越的性能和稳定性HotSpot VM一直是广泛使用的Java虚拟机之一特别适用于生产环境和要求高性能的Java应用程序。
2) 整体结构介绍 对于上图这里简单介绍一下首先是Java类通过编译成class文件在用过类加载器加载到内存中。 类加载是Java虚拟机JVM的一个关键组件负责将Java字节码文件加载到内存中并转换为可执行的类。类加载器的主要任务是查找和加载类文件确保在程序运行时可以访问所需的类。类加载器的工作使Java的动态性成为可能允许在运行时加载和卸载类。 接着看这个第二层运行时的数据区这里包含了方法区、Java栈、本地方法栈、堆、程序计数器 方法区是存储类信息、常量、静态变量以及编译后的字节码的地方包括类的结构信息、方法和字段描述以及运行时常量池。 堆是Java程序中用于存储对象实例的区域。 栈是每个线程独有的用于存储方法调用、局部变量以及方法返回值。 本地方法栈与栈类似但它存储的是Java程序调用本地方法使用JNIJava Native Interface时的信息。 程序计数器是当前线程执行的字节码指令的位置计数器。 总结 方法区和堆这两个是多线程共享的 Java栈、本地方法栈和程序计数器这是每个线程都独有一份 最后看第三层这一层是和操作系统和硬件交互的重要组件。执行引擎这是Java虚拟机核心组件之一他是负责执行Java字节码将Java字节码解释成底层平台的机器码或者通过即时编译器Just-In-Time CompilerJIT将字节码编译成本地机器代码以提高性能。本地方法接口是Java虚拟机提供的机制允许Java代码与本地代码通常是用C或C编写的进行交互在Java中就是呗native修饰的接口方法。本地方法库是包含本地方法的动态链接库通常是.so文件或.dll文件用C或C编写。
5 Java代码执行流程
Java代码的执行流程可以分为一下几个步骤
编写Java代码编写一个xxx.java的文件。编译源代码使用Java编译器将Java源文件编译成xx.class的字节码文件通常是使用javac。Java虚拟机在Java虚拟机JVM中其负责加载字节码文件并将其转换为可执行代码。在类加载过程中还有一些操作类加载、链接、初始化等等。执行程序一旦类加载完成并且程序初始化完成JVM开始执行程序。运行时垃圾收集JVM会定期检查不再被引用的对象并进行垃圾回收以释放内存资源程序结束程序执行完main方法或遇到异常时程序将结束执行。 6 JVM的生命周期
Java虚拟机的生命周期简单来说就是三个阶段启动、执行、退出。JVM的生命周期确保了Java程序的安全加载、初始化和执行以及资源管理和垃圾回收。这一过程是Java跨平台性的关键因为它将Java程序从特定硬件平台解耦使其能够在不同操作系统上运行。
虚拟机启动
Java虚拟机在启动的时候是通过类加载器创建一个初始类来完成。在这一阶段类加载器加载Java字节码文件并对其进行验证、准备、解析和初始化等操作接着链接包括验证类的正确性、为静态变量分配内存和解析符号引用。然后初始化在这个阶段JVM执行类的静态初始化代码初始化静态变量。
虚拟机执行
JVM进入运行阶段开始执行程序通常从main方法开始。程序在运行过程中可以加载、链接、初始化其他类并执行程序逻辑。同时JVM的垃圾回收器定期检查不再被引用的对象进行垃圾回收。这个Java程序在Java虚拟机中就是一个进程。
虚拟机退出
在程序执行完成或出现严重错误时JVM会进入终止阶段可以执行清理操作。最后如果某个类不再被引用并且没有实例存在JVM可能会进行卸载释放内存。
7 常见虚拟机
常见的虚拟机每种的实现通常都是针对不同的需求比如sun classic vm、exact vm、jrockit、j9等等。以下笔者通过网络查阅到一些的简单介绍。 在Java生态系统中有几个常见的Java虚拟机JVM实现每个实现通常针对不同的用例和需求。以下是一些常见的JVM实现 Oracle HotSpot JVM这是Oracle公司的官方JVM实现广泛用于生产环境。它以高性能和优化而闻名是许多企业应用程序的首选JVM。OpenJDKOpenJDK是Oracle的开放源JVM实现也是许多其他JVM的基础。它提供了Java开发工具和库并被许多Linux发行版采用作为默认JVM。IBM J9 JVMIBM的J9虚拟机是WebSphere应用服务器和其他IBM产品的一部分。它专注于嵌入式和企业级应用。Apache Harmony虽然已经终止但Apache Harmony曾是一个Apache项目旨在创建一个免费的、开放源的JVM实现。虽然它不再维护但它仍然被某些项目和研究用途使用。GraalVMGraalVM是Oracle开发的一款全栈虚拟机支持多种语言包括Java、JavaScript、Python等。它具有高性能和多语言互操作性适用于各种应用场景。Azul ZingAzul Zing是专门针对大规模、高性能Java应用程序而设计的JVM。它包括C4垃圾收集器可显著降低垃圾回收停顿时间。SAP JVMSAP JVM是针对SAP应用的JVM实现优化了SAP系统的性能和稳定性。 这些JVM实现在性能、垃圾回收策略、支持的平台和工具等方面存在差异开发人员可以根据其应用程序的需求选择最适合的JVM。总的来说Java虚拟机的多样性为Java生态系统的健康发展提供了重要的选择。 总结
本章就是学习一下Java虚拟机的概念为了对Java虚拟机有个简单的认识。总之我们知道的JVM有许多但是我们经常遇到的就是 Oracle HotSpot JVM Java虚拟机的主要任务包括字节码加载、解释执行或即时编译、垃圾回收、内存管理等。它还提供了各种标准库和API用于支持Java程序的运行和互动。不同的Java虚拟机实现可以适应不同的硬件和操作系统。