zoukankan      html  css  js  c++  java
  • 我的面试经之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虚拟机退出的情况

              

  • 相关阅读:
    leetcode算法题基础(五)双指针(一)27 题 移除元素
    kata-shim: Setctty set but Ctty not valid in child: unknown.
    kata-runtime mount
    UVa1636 Headshot
    HDU1150 Machine Schedule
    POJ 1273 Drainage Ditches
    SPOJ GSS1 Can you answer these queries I
    POJ 1840 Eqs
    POJ2001 Shortest Prefixes
    HDU 2795 Billboard
  • 原文地址:https://www.cnblogs.com/Timeouting-Study/p/12433272.html
Copyright © 2011-2022 走看看