美文网首页
Android JVM01 --- 运行时数据区(栈区) - 草

Android JVM01 --- 运行时数据区(栈区) - 草

作者: 沪漂意哥哥 | 来源:发表于2022-06-29 23:17 被阅读0次

    一.什么是JVM?

    JVM就是一种规范,对于汇编的语言规范和处理,而上层得高级语言实际上我们就可以理解为一堆的字符串。

    二.Hotspot虚拟机

    隶属:sun

    Dalvik虚拟机和ART虚拟机

    隶属:Google

    Dalvik是一款不是JVM的JVM虚拟机,本质上他没有遵循JVM规范,不能直接运行java class文件,他的结构基于寄存器结构,而不是JVM栈架构,执行的时编译后的Dex文件,执行效率较高,在Android5.0后被ART替换。

    三.栈指令集架构与寄存器指令集架构

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

    1.设计与实现简单,避开寄存器的分配问题。

    2.指令流中的指令操作过程基于栈,且位数小(8位)。

    3.不需要硬件支持,可移植性好。

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

    1.依赖于硬件,可移植性差。

    2.性能优秀和执行更加高效。

    3.花费更少时间去执行一个操作。

    四.JVM三大架构组件

    1.类加载器:将编译好的class文件加载到JVM进程中。

    2.运行时数据区:存放系统执行过程中产生的数据。

    3.执行引擎:用来执行汇编及当前进程内所要完成的一些具体内容。

    五.运行时数据区结构

    1.线程共享区:方法区+堆区

    2.线程私有区:程序计数器+本地方法栈

    六.堆栈在内存中的职责

    栈时运行时的处理单位,而堆时运行时的存储单位。

    栈是用来解决程序运行问题,如程序如何运行,如何去处理数据,方法是怎么执行

    堆是用来解决数据存储问题,数据放哪,怎么放。

    七.栈帧内部结构

    1.局部变量表:一个数组存储。

            a.默认在局部变量表中第一个位置会置入一个this指针.

            b.参数也会置入。

            c.内部所有声明的变量。

            d.注意槽的概念:32位1slot, 引用类型32位。

            e.大小编译期决定。

            f.槽位复用。

    2.操作数栈。

    3.动态链接:解决多态(方法重写)问题。

    4.方法返回地址。

    存放调用方法的PC寄存器的值。

    一个方法的结束有两种方式:正常执行完成,非正常退出(出现未处理的异常)

    无论通过哪种方式退出,在方法退出后返回到该方法调用的地方。

    方法正常退出:调用者的PC寄存器的值作为返回地址。

    方法异常退出:返回地址是要通过异常表来确定,通过异常完成的出口退出的不会给他的上层调用这产生任何的返回值。只要在本方法中没有搜索到匹配的异常处理器就会异常退出。

    相关文章

      网友评论

          本文标题:Android JVM01 --- 运行时数据区(栈区) - 草

          本文链接:https://www.haomeiwen.com/subject/styovrtx.html