美文网首页
JVM系列学习随笔(一)

JVM系列学习随笔(一)

作者: luckyShan_95 | 来源:发表于2020-11-06 12:25 被阅读0次

虚拟机

JVM:JVM全称Java Virtual Machine(Java虚拟机),是一个虚构出来的计算机,作用是把平台无关的.class里面的字节码翻译成平台相关的机器码,Dalvik、Art就是安卓中使用的虚拟机

一. 简述虚拟机区别

1.1 JVM虚拟机和Android虚拟机的区别

JVM虚拟机和Android虚拟机编译

1.2 Dalvik虚拟机和Art虚拟机的区别

Dalvik虚拟机和Art虚拟机

Art:典型的空间换时间,应用安装时翻译为字节码占用大量空间,cpu使用减少,耗电减少

总结

JVM执行的是.class文件。一个class文件代表一个类,多次加载,多次IO(class文件包含很多冗余信息)。jvm执行是基于虚拟栈的虚拟机

Android虚拟机执行的是.dex文件。一个dex包含所有系统类,一次加载,一次IO(dex工具去除冗余信息)。Android虚拟机是基于寄存器的虚拟机

(详见:三. 寄存器和栈的区别)

二. class及dex区别

2.1 文件结构

class文件和dex文件结构

总结

1. dex文件减少整体的文件大小,dex更像是一种压缩文件,一个dex可以表示更多的class;

class像是一种单个文件。

2. Android虚拟机加载类时,只对dex进行一次IO就可以加载很多类,而class需要被加载多次,进行多次IO,因此Android虚拟机的查找速度快

3. dex指令更加密集,class指令比较多(待理解)

4. dex寄存器设计方便寻址,class java栈需要多次load和store指令(待理解)

5. dex适合于移动设备,性能不太高的。class适合PC大内存,单指令小的可以快速执行

三. 寄存器和栈的区别

总结:

java虚拟机是基于栈的结构。基于栈的指令紧凑,指令仅占一个字节,称为字节码

Android虚拟机是基于寄存器的结构。基于寄存器的指令由于需要制定源地址和目标地址,因此需要占用更多的指令空间,Dalvik虚拟机的某些指令需要占用两个字节

基于栈和基于寄存器各有优劣,一般而言,执行同样的功能:

基于栈需要更多的指令(主要是load和store指令,意味着更多的指令分配次数和内存访问次数,访问内存是执行速度的一个重要瓶颈),意味着要多占用CPU时间

而基于寄存器需要更多的指令空间,意味着有数据缓冲,更容易失效

暂存于此,后续补充。。。🐷

相关文章

  • JVM系列学习随笔(一)

    虚拟机 JVM:JVM全称Java Virtual Machine(Java虚拟机),是一个虚构出来的计算机,作用...

  • JVM学习系列学习一

    本文主要内容: ​ 一:为什么要对JVM进行优化? 我们在自己电脑上进开发的时候,几乎很少考虑对JVM进行优化。但...

  • JVM学习系列学习五

    我们接着上一篇文章讲解: 4.2:查看内存中对象数量及大小 查看所有对象,包括活跃及非活跃的。使用命令: Jmap...

  • JVM学习系列学习六

    本文是《JVM学习系列》教程中第六篇文章。不是单篇的。 我们接着上一篇讲解: 4.5:通过MAT工具对dump文件...

  • JVM学习系列学习七

    5:实战:内存溢出的定位与分析 内存溢出在日常工作中,这个错误很容易遇到。遇到内存溢出,首先我们需要快速定位内存溢...

  • JVM学习系列学习四

    我们接着上一篇讲解: 使用命令查看对内存使用情况 使用到的命令:jstat Jstat:此命令可以查看对内存各个部...

  • JVM学习系列学习二

    查看JVM的运行参数 在有些时候我们需要查看JVM的运行参数,这个需求可能有以下两种情况: 1:运行Java命令时...

  • JVM学习系列学习三

    我们接着上一篇文章讲解: 堆、栈、永久区比较 Heap(堆内存): 在Java中,创建的所有引用对象类型,都在堆内...

  • 2018-03-24

    Java学习随笔4 JVM的内存分配: 首先,jvm的内存主要分为三大块:堆,栈,方法区。 堆:jvm内存中最大的...

  • 科学计算系列学习 02:Pandas

    科学计算系列学习 01:Numpy科学计算系列学习 02:Pandas科学计算系列学习 03:Matplotlib...

网友评论

      本文标题:JVM系列学习随笔(一)

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