代码编织梦想

运行时数据区就是字节码运行时在内存中的状态

方法区:用于存放字节码中加载出来的类信息
堆:用于存放实例类型的数据,JVM垃圾回收主要针对于堆

虚拟机栈
记录线程内方法的执行状态
栈帧
栈中的元素,对应每一个方法的执行情况

fun main(){
    foo()
    ...
}


fun foo(){
    val a = 1
    val b = 2
    val c = (a+b)*9
}


操作数栈:字节码执行时处理中间状态的内存区域

基于栈的JVM

0行:int类型的1推送至栈顶
1行:将栈顶数据存入第一个本地变量 (此时局部变量a赋值为1)
2行:int类型的2推送至栈顶
3行:将栈顶数据存入第二个本地变量(此时局部变量b赋值为2)
4、5行:将对应的局部变量的值入栈,从局部变量表拿回操作数栈
6行:将栈顶两个数相加,并将结果压入栈顶
7行:将单字节常量放入栈顶,占用两个单元,所以下一行跳到9
9行:将栈顶两个int数值相乘,并将结果压入栈顶
a行:将栈顶数据存入第三个本地变量(此时局部变量c赋值为27)
b行:return

Dalvik虚拟寄存器

 

0行:将1存入指定寄存器中  v0=1
1行:将2存入指定寄存器中 v1=2
2行:将两个寄存器执行二元运算相加,并将结果存入第一个寄存器中。v0=3
3行:执行二元运算相乘,并将结果存入。v0=27
编译优化:以使用最少寄存器为前提,不改变语意义,优化掉无用代码

各自特点:
基于栈的JVM字节码单元长度为8位(1字节),Dalvik为16位(2字节)
单条指令长度较短,而Dalvik几乎翻倍
同样逻辑指令条数较多,Dalvik较少
同样逻辑数据移动次数较多,Dalvik尽可能少
同样逻辑临时结果存储次数较多,Dalvik尽可能少

如何看待基于栈的虚拟机设计?
1. JVM基于栈去设计的初衷之一,是压缩代码体积
  a. Java设计之初最重要的一个特性就是跨平台,支持嵌入式设备和手持设备(J2ME)
  b. 另一个特性是支持远程传输执行字节码,要降低传输开销
2. 基于栈的虚拟机,字节码实现简单
  a. 指的是生成字节码的过程简单,而不是虚拟机本身简单,或者说是编译器的简单实现
  b. 操作时,不用考虑寄存器的地址,只需要把想要操作的数据出栈、入栈,然后在实现如何针对栈进行操作
3. 可移植性高
  a. 为了提高效率,虚拟寄存器要映射到真实机器的寄存器,增加移植难度
  b. 代码移植到其他硬件平台的时候,不用考虑真实机器寄存器的差异,因为操作栈的指令是通用的

如何看待Android平台基于寄存器的设计?
1. 更快,更省内存
  a. 指令条数少
  b. 数据移动次数少、临时结果存放次数少
  c. 映射到真实机器的寄存器
2. Android不需要解决移植性问题
3. 用其他方式解决了代码体积问题
  a. dex文件优化

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013390128/article/details/127962744

jvm学习笔记5——虚拟机字节码指令与执行引擎_bugwriter的博客-爱代码爱编程

虚拟机字节码执行引擎 字节码指令 字节码指令分类 运行时栈帧结构 局部变量表操作数栈动态连接方法返回地址附加信息 基于栈的字节码解释执行引擎 基于栈的指令集与基于寄存器的指令集基于

jvm笔记:java虚拟机的字节码指令详解-爱代码爱编程

1.字节码 Java能发展到现在,其“一次编译,多处运行”的功能功不可没,这里最主要的功劳就是JVM和字节码了,在不同平台和操作系统上根据JVM规范的定制JVM可以运行相同字节码(.Class文件),并得到相同的结果

深入理解Java虚拟机学习笔记,Java历程与Java虚拟机历程-爱代码爱编程

走进Java Java小白菜鸡想学深入理解Java虚拟机,做了一下笔记,水平有限,大牛切莫笑话 Java概述 Java java不仅仅是一门语言,他还是一个由计算机软件和规范组成的技术体系。 Java的优点: Java拥有一门结构严谨,面向对象的编程语言他拜托了硬件平台的束缚,实现了“ 一次编译,到处运行 ”的理想提供了一种相对

JVM虚拟机原理深入解析,详细的Android学习指南-爱代码爱编程

主要说一下个人经历,希望能给即将面试的小伙伴一些有效信息。大家都要加油~ 基本情况 先说一下个人基本情况,计算机科学与技术专业。主要学的Android开发,所以投的岗位都是Android开发工程师。投了知乎,内推了阿里蘑菇街腾讯百度网易。腾讯百度都没有收到面试,知乎Skype面试,蘑菇街阿里电话面试,网易现场面。知乎二面被拒,蘑菇街阿里一面被拒,网易三

Android 学习笔记(4)之JVM虚拟机内存区域解析-爱代码爱编程

1,运行时数据区域 程序计数器:指向当前线程正在执行的字节码指令的地址(行号) 作用:Java是多线程的,意味着线程切换 确保多线程情况下的程序正常执行 独立运行互不影响 栈(Stack) FILO先进后出 为什么JVM使用栈:非常符合JAVA中方法间的调用 A()-B()-C() 虚拟机栈:每个线程私有的,存储当前线程运行方法所需的数据,指令、返回地址

android 加载机制,学习笔记-Android虚拟机与类加载机制-爱代码爱编程

JVM与Dalvik Android 应用程序运行在 Dalvik/ART 虚拟机,并且每一个应用程序对应有一个单独的 Dalvik 虚拟机实例。 Dalvik 虚拟机实则也算是一个 Java 虚拟机,只不过它执行的是 dex文件,而不是 class 文件。 Dalvik 虚拟机与 Java 虚拟机有差不多的特性,差别在于两者执行的指令集是不一样

Android 虚拟机与类加载机制-爱代码爱编程

ART 和 Dalvik Dalvik虚拟机 - Android5.0之前 1.Android中的虚拟机是Dalvik/ART 2.每个应用程序都对应有一个单独的Dalvik虚拟机实例。 3.Dalvik虚拟机实则也算是一个Java虚拟机,只不过它执行的不是class文件,而是dex文件。 4.Jvm是的指令集是基于堆栈。Dalvik的指令集

JVM系列——常见JVM(java虚拟机)-爱代码爱编程

 本文为个人学习笔记,可能会有错误之处,仅供参考,视频链接如下: 尚硅谷宋红康JVM全套教程(详解java虚拟机)_哔哩哔哩_bilibili0基础如何学起?宋红康30天搞定Java核心:BV1Kb411W75N一键三连+收藏,关注硅谷更辉煌!制作不易,感谢支持!全套课程分为《内存与垃圾回收篇》《字节码与类的加载篇》《性能监控与调优篇》三个篇章,由尚

JVM学习笔记01-JVM与其结构结构-爱代码爱编程

导语:小尘需要准备实习生面试了,先准备JVM的复习。把自己的笔记发上来供大家使用。如有问题,请多指教。该笔记主要参考尚硅谷宋红康老师的JVM课程,有需要的可以区B站观看视频。这里附上其B站的视频链接:尚硅谷宋红康JVM全套教程(详解java虚拟机)_哔哩哔哩_bilibili 目录 1、JVM的架构模型 2、JVM的生命周期 2.1、JVM的启动

JVM学习笔记 之 JVM概述-爱代码爱编程

JVM与Java体系结构 本篇学习笔记基于bilibili尚硅谷的jvm课程整理而来。 前言 作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问题? 运行着的线上系统突然卡死,系统无法访问,甚至直接OOMM! 想解决线上JVM GC问题,但却无从下手。新项目上线,对各种JVM参数设置一脸茫然,直接默认吧然后就JJ了每次面试之前都要

jvm基础学习笔记_勐烨.的博客-爱代码爱编程

JVM基础 1.jdk, jre, jvm 关系. JDK 简单理解就是Java开发工具包,是java的核心所在;JRE 是 Java 的运行环境,JVM 也就是常常听到的 Java 虚拟机。 JDK是整个Java的核心,包括了 JRE ,同时在 jdk 文件夹 bin 目录中包含了一些Java开发工具(例如:javac、java、javadoc、

尚硅谷jvm学习笔记:1.jvm与java体系结构_最爱吃鸡肉卷的博客-爱代码爱编程

JVM上篇:内存与垃圾回收篇(一) 笔记来源:尚硅谷宋红康JVM全套教程(详解java虚拟机)_哔哩哔哩_bilibili 1.JVM与Java体系结构 1.1前言 开发人员如何看待上层框架 一些有一定工作经验的

为什么我的视频播放量上不去?_大 周 网 络的博客-爱代码爱编程

正在做自媒体视频的你有没有这个疑问:自己视频的播放量为什么一直上不去? 其实除了内容本身的质量外,还有很多外在因素,这些因素也很容易被新手们忽略,导致播放量一直上不去,收益自然也不会很高。 今天这期内容就来跟粉丝们分享一

宋红康jvm 学习笔记_宋红康jvm笔记-爱代码爱编程

为什么要学 JVM? ⚫ 面试的需要:入职 BATJ、TMD、PKQ 等一线大厂不光关注技术的广度,更关注 技术的深度,JVM 技术是大厂面试的必备技能,掌握越深越好 ⚫ 中高级程序员、架构师必备技能:架构师每天都在思

《java虚拟机解密:探究jvm与java体系结构的奥秘》-爱代码爱编程

JVM与Java体系结构 字节码 java字节码,指的是用java语言编译成的字节码。准确的说任何能在jvm平台上执行的字节码格式都是一样的。所以应该统称为:jvm字节码。 不同的编译器,可以编译出相同的字节码文件,

jvm学习笔记Ⅰ-爱代码爱编程

文章目录 01、JVM与Java体系结构虚拟机:Java虚拟机:Java虚拟机作用:JVM的位置JVM的整体结构:Java程序的执行流程JVM的架构模型JVM的生命周期 02、类加载子系统类加载器与类的加