Dalvik虚拟机 和理解jdk和Android SDK的区别

Dalvik虚拟机是安卓操作系统执行java语言开发应用的的基础,就好像window10要执行java程序一样要hotspot虚拟机,
每一个app应用程序在其运行进程中都有一个独立的Dalvik虚拟机实例,主要是完成对生命周期的管理、堆栈的管理、线程的管理、安全和异常的管理以及垃圾回收等重要功能

Dalvik虚拟机和jvm虚拟机的区别

Dalvik 基于寄存器,而 JVM 基于栈。基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。 JVM字节码中,局部变量会被放入局部变量表中,继而被压入堆栈供操作码进行运算,当然JVM也可以只使用堆栈而不显式地将局部变量存入变量表中。Dalvik字节码中,局部变量会被赋给65536个可用的寄存器中的任何一个,Dalvik指令直接操作这些寄存器,而不是访问堆栈中的元素。

Dalvik运行的不是.class文件

VM字节码由.class文件组成,每个文件一个class。JVM在运行的时候为每一个类装载字节码。相反的,Dalvik程序只包含一个.dex文件,这个文件包含了程序中所有的类。Java编译器创建了JVM字节码之后,Dalvik的dx编译器删除.class文件,重新把它们编译成Dalvik字节码,然后把它们写进一个.dex文件中。这个过程包括翻译、重构、解释程序的基本元素(常量池、类定义、数据段)。常量池描述了所有的常量,包括引用、方法名、数值常量等。类定义包括了访问标志、类名等基本信息。数据段中包含各种被VM执行的函数代码以及类和函数的相关信息(例如DVM所需要的寄存器数量、局部变量表、操作数堆栈大小),还有实例变量。

在手机上运行的每各android程序,包含一个android运行时、Dalvik虚拟机和android的核心库。

所以可以这样理解,Dalvik是google自己实现的一个jvm(jvm不只sun有,IBM也自己实现了,据我了解,也就是jvm可以自行实现);

jdk 和sdk,JSE ,JEE和JME区别

SDK是Software Development Kit的缩写,中文意思是“软件开发工具包”。这是一个覆盖面相当广泛的名词,

JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK(Software development kit)

JSE JEE JME是java语言的三个版本,

不能说jdk有三个版本,只是说用java开发的系统类型分为三个版本。一定要理清语言和开发工具包的区别,比如说java语言和开发工具包jdk的区别,语言其实就是由加了一定语法规则,写文件要按照这些语法规则来写,文件要交给计算机来执行就要编译,调试,还要环境,这就是开发工具包,这就要jdk(linux,windows max),或者andriod sdk(andriod)

jdk 和andriod SDK的区别两个开发工具包的区别

区别两个开发工具包要从两者的编译工具,调试工具,编译后的文件类型,运行环境等各种方面的不同加于区别
对于Android SDK和JDK很多开发人员都不清楚它们之间得区别,以为Android虚拟机[ART&Darvit]就是JVM更是多数,以下梳理了SDK和JDK的区别和联系

Android SDK
Android SDK全称为安卓软件开发工具包,主要作用包括:

1.提供基础类库和官方推荐的附加类库
调用电话/调用相机/相册选择等都是由基础类库android.jar提供的
v4包v7包都是官方推荐的附加类库

2.编译工具
java编码文件通过编译工具编译成Darvit虚拟机能够读取的dex文件,Android4.4后使用Art虚拟机,运行效率得到极大的提高,关于这两种虚拟机的区别点击链接 DVM和ART原理初探

3.调试开发工具
提供了模拟器等调试开发工具

需求案例
2018年平安银行产品经理和开发人员打架事件受到广泛的关注,主要是由于不懂技术的产品经理提出奇葩需求:app的主题颜色能够根据手机壳的颜色变化而变化。我们一个需求的实现高度依赖于SDK,SDK提供了相关API我们就能做,如果没有提供我们就做不了,因此该开发人员在拒绝该需求的时候解释说没有提供接口,这里就是说SDK没有提供相关的API来做这个需求。

JDK
JDK全称为Java开发工具包,主要作用包括:

1.提供基础类库
由rt.jar提供了基础类的API,如果基础类没有只能由jar包的扩展类来提供

2.JVM[JAVA虚拟机]
class文件通过JVM"翻译"成机器能够识别的二进制的编码,充当着机器和虚拟机之间的桥梁

3.编译器
将java编码"翻译"成JVM能够识别的成class文件

4.调试开发工具
提供debug调试工具等

跨平台
Java之所以能实现其跨平台的属性其JVM功不可没,不管你是win、mac还是Linux系统,只要安装了JDK,就能跨平台运行class文件。JVM做了中间的桥梁,所以JVM是很牛逼的东西,可惜的是我国真正去研究JVM的人很少。

Android SDK和JDK区别和联系
1.Android SDK的基础类库[android.jar]参考了大部分的JDK基础类库[rt.jar],在此基础上进行的一些修减,增加了Android特有的也删除了JDK的一些基础类,也有改造了一些类。Android各版本对应的SDK和JDK版本

2.Android SDK不包括虚拟机但JDK包括虚拟机**,Android的Darvit&ART虚拟机安装在Android设备上**,Android是不存在main方法的入口这种说法的。

3.Android SDK编译工具[Gradle]是将java文件编译成Darvit&ART虚拟机能够读取的apk文件,JDK编译工具将java文件编译成JVM虚拟机能够读取的class文件。apk文件本质上就是zip包其中类主要编译在dex文件中,dex文件由class文件转化而来,因此apk的编译程序比war包[将class文件打包,用于部署在服务器]编译程序要多且要慢。

apk文件和dex文件的区别:

	APK是Android Package的缩写,即Android安装包,使用Android打包工具(aapt)将DEX文件,资源文件以及AndroidManifest.xml文件(二进制格式)组合成一个应用程序包(APK)。APK文件其实是zip格式。zip解压后主要是是DEX文件,资源文件以及AndroidManifest.xml文件(二进制格式)文件。
	dex文件Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码
	[apk文件包有什么,.dex文件怎么在dalvik虚拟机上运行参考](https://blog.csdn.net/houyu_1983/article/details/39989253)

为什么安装andriod SDK一定要先配置jdk

因为我们写的还是java文件的代码,要把java文件编译成.class文件(这就必须要加入jdk的编译工具javac);然后再用andriod sdk的编译工具gradle将.class文件编译成.dex文件,dex文件由class文件转化而来的。。
(在安装配置andriod sdk的时候 看下图,可见,自动识别本机的jdk路径)
在这里插入图片描述
andriod SDK在ideal上的配置安装教程参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值