深入理解Java虚拟机系列 --01JVM基础概述

365 阅读4分钟

在这里插入图片描述在这里插入图片描述在这里插入图片描述

因为热爱所以坚持,因为热爱所以等待。熬过漫长无戏可演的日子,终于换来了人生的春天,共勉!!!

1.什么是JVM?

  • ①.JVM 是 java虚拟机,是用来执行java字节码(二进制的形式)的虚拟计算机

  • ②.jvm是运行在操作系统之上的,与硬件没有任何关系

  • ③.组成体系 在这里插入图片描述

2.Java的跨平台及原理

  • ①.跨平台:由Java编写的程序可以在不同的操作系统上运行:一次编写,多处运行

  • ②.原理:编译之后的字节码文件和平台无关,需要在不同的操作系统上安装一个对应版本的虚拟机(JVM) 在这里插入图片描述

  • ③Java虚拟机不和包括java在内的任何语言绑定,它只与class文件这种二进制文件格式所关联无论使用何种语言进行软件开发,只要将源文件编译为正确的Class文件,那么这种语言就可以在Java虚拟机上执行,可以说,统一而强大的Class文件结构,就是Java虚拟机的基石、桥梁) 在这里插入图片描述

3.JVM的整体结构

  • ①.类加载子系统

  • ②.运行时数据区 [ 我们核心关注这里 的栈、堆、方法区 ]

  • ③.执行引擎(一般都是JIT编译器和解释器共存)

    • JIT编译器(主要影响性能):编译执行; 一般热点数据会进行二次编译,将字节码指令变成机器指令。将机器指令放在方法区缓存
    • 解释器(负责响应时间):逐行解释字节码

在这里插入图片描述

在这里插入图片描述

4.三大商业虚拟机

①. Sun HotSpot

  • 提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机

  • 在2006年的JavaOne大会上,Sun公司宣布最终会把Java开源,并在随后的一年,陆续将JDK的各个部分(其中当然也包括了HotSpot VM)在GPL协议下公开了源码, 并在此基础上建立了OpenJDK。这样,HotSpot VM便成为了Sun JDK和OpenJDK两个实现极度接近的JDK项目的共同虚拟机

  • 在2008年和2009年,Oracle公司分别收购了BEA公司和Sun公司,这样Oracle就同时拥有了两款优秀的Java虚拟机:JRockit VM和HotSpot VM。 Oracle公司宣布在不久的将来(大约应在发布JDK 8的时候)会完成这两款虚拟机的整合工作,使之优势互补。 整合的方式大致上是在HotSpot的基础上,移植JRockit的优秀特性,譬如使用JRockit的垃圾回收器与MissionControl服务, 使用HotSpot的JIT编译器与混合的运行时系统

②. BEA JRocket

  • 专注于服务端应用(JRockit内部不包含解释器实现,全部代码都靠即时编译器编译后执行) Jrockit JVM 是世界上最快的jvm, 2008年被oracle收购

③. iBM J9

  • 市场定位与hotspot接近,服务器端,桌面应用,嵌入式等
  • 目前,是影响力的三大商业虚拟机之一

5.JVM的生命周期

  • ①.虚拟机的启动 Java虚拟机的启动是通过引导类加载器(bootstrap class loader) 创建一 个初始类(initial class) 来完成的,这个类是由虚拟机的具体实现指定的。
  • ②.虚拟机的执行
    • 一个运行中的Java虚拟机有着-一个清晰的任务:执行Java程序。
    • 程序开始执行时他才运行,程序结束时他就停止。
    • 执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虛拟 机的进程。
  • ③.虚拟机的退出 有如下的几种情况:
    • 程序正常执行结束
    • 程序在执行过程中遇到了异常或错误而异常终止
    • 由于操作系统出现错误而导致Java虚拟机进程终止
    • 某线程调用Runtime类或System类的exit方法, 或Runt ime类的halt 方法,并且Java安全管理器也允许这次exit或halt操作。 除此之外,JNI ( Java Native Interface) 规范描述了用JNI Invocation API来加载或卸载Java虚拟机时,Java 虚拟机的退出情况。

在这里插入图片描述在这里插入图片描述在这里插入图片描述

下一篇 02JVM的类加载子系统(上) --类加载过程详解

参考视频 : 尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机)

参考书籍 : 深入理解Java虚拟机