java 虚拟机指令集_第一章:java 虚拟机介绍

一、阐述

java 虚拟机(JVM)是一台执行java 字节码的虚拟计算机,拥有独立的运行机制,其运行的java字节码也未必由Java 语言编译而成。JVM平台的各种语言可以共享Java虚拟机带来的跨平台性、垃圾回收器、即时编译器。

二、作用

Java 虚拟机是二进制自己码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行。每一条Java指令,Java虚拟机规范中都有详细的定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里。

特点:

一次编译,处处运行

自动内存管理

自动垃圾回收功能

三、JVM整体结构

HotSpot VM 是目前高性能虚拟机的代表之一,采用解释器与即时编译器并存的架构。

76b697dba9c7

四、Java代码执行流程

Java 源码(.java 文件)经过Java编译器编译后(编译器编译过程为:词法分析、语法分析、语法/抽象语法树、语义分析、字节码生成器等步骤)生成字节码文件(.class 文件)。

JVM将每一条要执行的字节码通过类加载器(ClassLoader)加载到内存中,再通过字节码校验器的校验,Java解释器翻译成对应的机器码,其中对于热点代码使用即时编译器(JIT)编译执行,最后在操作系统解释运行。

76b697dba9c7

五、JVM的架构模型

Java编译器输入的指令集架构分两种,一种是基于栈的指令集架构,一种是基于寄存器的指令集架构。

两种结构的特点:

.基于栈式架构的特点

1、设计和实现更加简单,适用于资源受限的系统;

2、避开了寄存器的分配难题:使用零地址指令方式分配。

3、指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小,编译器容易实现。

4、不需要硬件支持,可移植性更好,更方便实现跨平台。

.基于寄存器架构的特点

1、典型的应用是x86的二进制指令集:如传统的PC以及Android的Davlik虚拟机。

2、指令集架构则完全依赖硬件,可移植性差。

3、性能优秀,执行效率高。

4、花费更少的指令去完成一项操作。

5、通常情况下,基于寄存器架构的指令集往往都是以一地址指令、二地址指令和三地址指令为主。而基于栈式架构的指令集却是以零地址指令为主。

.总结

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

tips:idea查看字节码文件命令,进入字节码文件所在的目录执行 javap -v xxx.class

76b697dba9c7

六、JVM的生命周期

.JVM启动

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

.JVM的执行

1.虚拟机运行的任务就是执行java程序。

2.程序开始执行时,jvm也一同运行,程序执行结束,jvm就停止运行。

3.执行一个Java程序时,本质上执行的是Java虚拟机的进程。

.JVM的退出

jvm退出的几种情况:

1、程序正常执行结束。

2、程序在执行过程中遇到异常或错误导致异常终止。

3、由于操作系统出现错误导致Java虚拟机进程终止。

4、调用Runtime类或者System类的exit方法,或者Runtime类的halt方法。

5、JNI(Java Native Interface)规范描述了用JNI Invocation API来加载或卸载Java虚拟机时,jvm也会退出。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值