2021/07/10 JVM (宋红康) 学习记录 一、JVM与Java体系结构

本文介绍了Java虚拟机JVM的结构,包括栈式指令架构和寄存器指令架构的区别,详细阐述了JVM的代码执行流程、生命周期,从启动到执行再到结束的过程。同时,概述了JVM的发展历程,涉及SuncalssicVM、HotSpot、JRockit、Dalvik等多个知名虚拟机。此外,还讨论了JVM的性能优缺点及其跨平台特性。
摘要由CSDN通过智能技术生成

前言

持续更新学习状况,

简介

JVM的整体结构

在这里插入图片描述

在这里插入图片描述

代码执行流程

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

区分栈的指令架构和寄存器的指令架构

Java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。
区别:

  • 基于栈式框架的特点
    • 设计和实现更简单,适用于资源受限的系统;
    • 避开了寄存器的分配难题:使用零地址指令方式分配。
    • 指令流中的指令大部分是零地址指令,其执行过程以来与 操作栈。指令集更小,编译器工容易实现。
    • 不需要硬件支持,可移植性更好,更好实现跨平台
  • 基于寄存器架构的特点
    • 经典的应用是x86的二进制指令集:比如传统的PC以及Android的Davlik虚拟机
    • 指令集架构则完全依赖硬件,可移植性差
    • 性能优秀和执行更高效;
    • 花费更少的指令去完成一项操作
    • 在大部分情况下,基于寄存器架构的指令集往往都以一地址指令、二地址指令和三地址指令为主,而基于栈式架构的指令集却是以零地址指令为主。
javap <XXX.class> //反编译

总结:由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。

JVM的生命周期

虚拟机的启动

Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的。

虚拟机的执行

  • 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。
  • 程序开始执行时他才运行,程序结束时他就停止。
  • 执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程。
jps //cmd terminal中查看当前运行 线程

虚拟机的结束

有如下的几种情况:

  • 程序正常执行结束
  • 程序在执行过程中遇到了异常或错误而异常终止
  • 由于操作系统出现错误而导致Java虚拟机进程终止
  • 某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作。
  • 除此之外,JNI(Java Native Interface)规范描述了用JNI Invocation API来加载或卸载 Java虚拟机时,Java虚拟机的退出情况。

JVM发展历程

Sun calssic VM

在这里插入图片描述

Exact VM

在这里插入图片描述

SUN公司的 HotSpot VM

在这里插入图片描述

BEA 的 JRockit

在这里插入图片描述

IBM 的 J9

在这里插入图片描述

KVM和CDC/CLDC Hotspot

在这里插入图片描述

Azul VM

在这里插入图片描述

Liquid VM

在这里插入图片描述

Apache Harmony

在这里插入图片描述

Microsoft JVM

在这里插入图片描述

TaobaoJVM

在这里插入图片描述

Dalvik VM

在这里插入图片描述

其他虚拟机

在这里插入图片描述

Graal VM

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值