一、JVM 简介
1.1 字节码由编译器编译程序得到的二进制文件(.class文件)。不同的编译器,可以编译出相同的字节码文件,字节码文件也可以在不同的JVM上运行(具有跨平台性,一次编译,到处运行)。
1.2 虚拟机
虚拟机(Virtual Machine)可以分为系统虚拟机和程序虚拟机:
(1)系统虚拟机:完全是对物理计算机的仿真,提供了一个可运行完整操作系统的软件平台,如Visual Box;
(2)程序虚拟机:专门为执行单个计算机程序而设计,其典型代表就是Java虚拟机(JVM),在Java虚拟机中执行的指令我们称为Java字节码指令。
1.3 JVM简介
Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行。每一条Java指令,Java虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里。JVM在计算机系统中的位置如下:
JVM是运行在操作系统之上的,它与硬件没有直接的交互。
1.4 JVM的特性
(1)自动内存管理;
(2)自动垃圾回收机制(相比于C++);
(3)跨语言的平台,多语言混合编程;
1.5 JVM的整体结构
HotSpot是目前最流行的Java虚拟机,它采用解释器与即时编译器并存的架构,整体架如下:
1.6 Java代码的执行流程
(1)编译器将java源码进行编译生成字节码;
(2)而JVM的主要任务就是讲字节码装载到其内部,解释/编译成对应平台上的机器指令,然后执行;
(3)类加载完成后,会对字节码进行校验,校验通过后JVM解释器会将字节码逐行翻译成机器指令交友操作系统执行;
(4)对于热点代码,会使用JIT编译器将其字节码文件编译成机器指令缓存起来,以提高执行性能。
1.7 JVM的架构模型
JVM的架构模型主要分为两种:
(1)基于栈式架构:使用零地址指令方式,设计和实现简单,不需要依赖硬件支持(适用于资源受限的场景),可移植行好(跨平台);但指令集较大,代表的有hotspot;
(2)基于寄存器架构:使用多地址指令,依赖硬件支持,可移植性较差;但指令集较小,性能更高,代表的有Davlik;
1.8 JVM的生命周期
(1)虚拟机的启动:Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的;
(2)虚拟机的执行:执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程;
(3)虚拟机的退出:程序正常执行结束;程序在执行过程中遇到了异常或错误而异常终止;由于操作系统用现错误而导致Java虚拟机进程终止;某线程调用Runtime类或system类的exit方法,或Runtime类的halt方法;
1.9 JVM发展历程
(1)Sun classic VM:世界上第一款商用Java虚拟机,这款虚拟机内部只提供解释器,没有及时编译器,因此效率比较低;
(2)Exact VM:准确式内存管理(虚拟机可以知道内存中某个位置的数据具体是什么类型),热点探测,解释器与编译器混合工作模式;
(3)HotSpot:应用最广,跨平台,除了热点代码探测技术和解释器与编译器协同工作外,还引入了方法区和GC技术;
(4)JRockit:专注于服务器端应用,不太关注程序启动速度,不包含解释器实现,全部代码都靠即时编译器编译后执行,JRockit JVM是世界上最快的JVM;
(5)Dalvik:谷歌开发的,应用于Android系统,基于寄存器架构,不是jvm的栈架构,没有遵循 Java虚拟机规范,不能直接执行Java的Class文件(执行的是编译以后的dex(Dalvik Executable)文件);
(6)Taobao JVM:创新的GCIH(GC invisible heap),即将生命周期较长的Java对象从heap中移到heap之外,并且GC不能管理GCIH内部的Java对象,以此达到降低GC的回收频率和提升GC的回收效率的目的;对象还能够在多个Java虚拟机进程中实现共享。
标签:Java,字节,简介,虚拟机,编译器,JVM,执行 From: https://www.cnblogs.com/iancloud/p/17602872.html