zoukankan      html  css  js  c++  java
  • JVM笔记(一)---JVM与Java体系结构

    JVM整体结构

    Java代码执行流程

    JVM的架构模型

    Java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。具体来说:这两种架构之间的区别:

    基于栈的指令集架构
    基于栈式架构的特点:

    • 设计和实现更简单,适用于资源受限的系统;
    • 避开了寄存器的分配难题:使用零地址指令方式分配
    • 指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小,编译器容易实现
    • 不需要硬件支持,可移植性更好,更好实现跨平台

    基于寄存器的指令级架构
    基于寄存器架构的特点:

    • 典型的应用是x86的二进制指令集:比如传统的PC以及Android的Davlik虚拟机。
    • 指令集架构则完全依赖硬件,与硬件的耦合度高,可移植性差
    • 性能优秀和执行更高效
    • 花费更少的指令去完成一项操作
    • 在大部分情况下,基于寄存器架构的指令集往往都以一地址指令、二地址指令和三地址指令为主,而基于栈式架构的指令集却是以零地址指令为主

    两种架构的举例
    同样执行2+3这种逻辑操作,其指令分别如下:

    基于栈的计算流程(以Java虚拟机为例)

    iconst_2 //常量2入栈
    istore_1
    iconst_3 // 常量3入栈
    istore_2
    iload_1
    iload_2
    iadd //常量2/3出栈,执行相加
    istore_0 // 结果5入栈
    

    而基于寄存器的计算流程

    mov eax,2 //将eax寄存器的值设为1
    add eax,3 //使eax寄存器的值加3
    

    JVM架构总结
    由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。
    栈的优点:跨平台,指令集小,编译器容易实现,缺点是性能比寄存器差一些。
    时至今日,尽管嵌入式平台已经不是Java程序的主流运行平台了(准确来说应该是HotSpot VM的宿主环境已经不局限于嵌入式平台了),那么为什么不将架构更换为基于寄存器的架构呢?
    因为基于栈的架构跨平台性好、指令集小,虽然相对于基于寄存器的架构来说,基于栈的架构编译得到的指令更多,执行性能也不如基于寄存器的架构好,但考虑到其跨平台性与移植性,我们还是选用栈的架构

    JVM的生命周期

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

    虚拟机的执行

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

    虚拟机的退出
    有如下的几种情况:

    1. 程序正常执行结束
    2. 程序在执行过程中遇到了异常或错误而异常终止
    3. 由于操作系统用现错误而导致Java虚拟机进程终止
    4. 某线程调用Runtime类或System类的exit()方法,或Runtime类的halt()方法,并且Java安全管理器也允许这次exit()或halt()操作。
    5. 除此之外,JNI(Java Native Interface)规范描述了用JNI Invocation API来加载或卸载 Java虚拟机时,Java虚拟机的退出情况。
  • 相关阅读:
    在Centos 7下编译openwrt+njit-client
    开博随笔
    Chapter 6. Statements
    Chapter 4. Arrays and Pointers
    Chapter 3. Library Types
    Chapter 2.  Variables and Basic Types
    关于stm32不常用的中断,如何添加, 比如timer10 timer11等
    keil 报错 expected an identifier
    案例分析 串口的地不要接到电源上 会烧掉
    案例分析 CAN OPEN 调试记录 进度
  • 原文地址:https://www.cnblogs.com/francisforeverhappy/p/JVM1.html
Copyright © 2011-2022 走看看