我的面试经之JVM(一)JVM简述

Java 跨平台语言

JVM 跨语言平台

Java进化史:

 

虚拟机:Virtual Machine,对硬件进行模拟的软件,虚拟的计算机

Java虚拟机:执行Jvm字节码的虚拟计算机,是二进制字节码的运行环境

JVM的位置

jvm整体结构

方法区和堆,多个线程共享

Java栈(又叫虚拟机栈),本地方发栈,程序计数器这三个每个线程独有一份

 【运行时数据区是单例的,一个虚拟机一个】

【hotspot 才有方法区,其他两大商用虚拟机没有【HotSpot,JRocket,J9】】

 class files前边是编译器前端

执行引擎相当于编译器后端

java代码执行流程

第一次编译,把java源文件编译成字节码.class文件,第二次编译JIT编译器把.class文件编译成机器指令文件,并且缓存到方法区

JVM架构模型

指令集架构分为两种,基于栈的指令集架构,基于寄存器的指令集架构

两种指令集架构区别

基于栈式架构的特点:

  设计和实现简单【每执行一个方法,就进行一次入栈的操作】,适用于资源受限的系统(eg:嵌入式)

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

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

  不需要硬件实现,可以执性更好,更好实现跨平台

基于寄存器架构的特点:

  典型的是x86的二进制指令集:比如传统的PC以及Android 的Davlik虚拟机

  指令集架构完全依赖于硬件,可移植性差

  性能优秀和执行更高效(指令集少,指令长)、

  花费更少的指令去完成意向操作

  带大部分情况下,基于寄存器架构的指令集往往都以一地址指令,二地址指令,三地址指令为主,而基于栈架构的指令集以零地址指令为主 

JVM的生命周期

  启动

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

  执行

    运行的虚拟机的任务:执行Java程序

    程序开始时运行,程序结束时就停止

    执行一个所谓的Java程序,真真正正执行的一个叫做Java虚拟机的进程

  退出

    程序正常执行结束

    程序在执行过程中遇到异常或错误异常终止

    由于OS出现错误导致JVM进程终止

    某线程调用Runtime类的exit方法,或halt方法,并且Java安全管理器也允许这次exit或halt方法

    除此之外,JNI(Java Native Interface)规范描述了用JNI Invocation API 来加载或卸载时,Java虚拟机退出的情况

          

猜你喜欢

转载自www.cnblogs.com/Timeouting-Study/p/12433272.html