Android中Dalvik的简介

安卓开发第一讲---android的系统框架,dalvik虚拟机简介 Android的系统架构主要分为四层架构,五块区域,总的来说,可以用下面一张图概括 1.Linux内核层:android系统是基于Linux2.6内核的,这一层为Android设备的各种硬件提供了底层的驱动,如显示驱动音频驱动,照相机驱动,蓝牙驱动,WI-FI驱动,电源管理等等。 2.系统运行库层:这一层是通过一些C/C++库来为Android系统提供了主要的特性支持。如SQLite库提供了数 阅读详情

文章转自:https://blog.youkuaiyun.com/join_xiao/article/details/79099239

一、什么是Dalvik虚拟机
  Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的Java应用程序的运行。dex格式是专门为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Google对其进行了特定的优化,使得Dalvik具有高效、简洁、节省资源的特点。从Android系统架构图知,Dalvik虚拟机运行在Android的运行时库层。

二、Dalvik虚拟机系统结构

实际上,Dalvik是基于Apache Harmony(Apache软件基金会的Java SE项目)的部分实现,提供了自己的一套库,即上层Java应用程序编写所使用的API。
在这里插入图片描述 以上图示来自tech-insider。Apache Harmony大体上分为三个层:操作系统、Java虚拟机、Java类库。它的特点在于虚拟机和类库内部被高度模块化,每一个模块都有一定的接口定义。操作系统层与虚拟机层之间的接口由Portability Layer定义,它封装了不同操作系统的差异,为虚拟机和类库的本地代码提供了一套统一的API访问底层系统调用。
虚拟机与类库之间的接口除了Java规范定义的JNI、JVMITI外,还加入了一层虚拟机接口,由内核类和本地代码组成。实现了虚拟机接口的虚拟机都可以使用Harmony的类库实现,并且可以被Harmony提供的同一个Java启动程序启动。

三、 Dalvik虚拟机的功能
  Dalvik作为面向Linux、为嵌入式操作系统设计的虚拟机,主要负责完成对象生命周期管理、堆栈管理、线程管理、安全和异常管理,以及垃圾回收等。Dalvik充分利用Linux进程管理的特定,对其进行了面向对象的设计,使得可以同时运行多个进程,而传统的Java程序通常只能运行一个进程,这也是为什么Android不采用JVM的原因。Dalvik为了达到优化的目的,底层的操作大多和系统内核相关,或者直接调用内核接口。另外,Dalvik早期并没有JIT编译器,直到Android2.2才加入了对JIT的技术支持。
在这里插入图片描述
四、 Dalvik虚拟机和Java虚拟机的区别
  本质上,Dalvik也是一个Java虚拟机。但它特别之处在于没有使用JVM规范。大多数Java虚拟机都是基于栈的结构(详情请参考:理解Java虚拟机体系结构),而Dalvik虚拟机则是基于寄存器。基于栈的指令很紧凑,例如,Java虚拟机使用的指令只占一个字节,因而称为字节码。基于寄存器的指令由于需要指定源地址和目标地址,因此需要占用更多的指令空间。Dalvik虚拟机的某些指令需要占用两个字节。基于栈和基于寄存器的指令集各有优劣,一般而言,执行同样的功能,前者需要更多的指令(主要是load和store指令),而后者需要更多的指令空间。需要更多指令意味着要多占用CPU时间,而需要更多指令空间意味着数据缓冲(d-cache)更易失效。
  Java虚拟机运行的是Java字节码,而Dalvik虚拟机运行的是专有文件格式dex。在Java程序中,Java类会被编译成一个或多个class文件,然后打包到jar文件中,接着Java虚拟机会从相应的class文件和jar文件中获取对应的字节码。Android应用虽然也使用Java语言,但是在编译成class文件后,还会通过DEX工具将所有的class文件转换成一个dex文件,Dalvik虚拟机再从中读取指令和数据。dex文件除了减少整体的文件尺寸和I/O操作次数,也提高了类的查找速度。

在这里插入图片描述五、Dalvik虚拟机特点

使用dex格式的字节码,不兼容Java字节码格式
代码密度小,运行效率高,节省资源
常量池只使用32位的索引
有内存限制
默认栈大小是12KB(3个页,每页4KB)
堆默认启动大小为2MB,默认最大值为16MB
堆支持的最小启动大小为1MB,支持的最大值为1024MB
堆和栈参数可以通过-Xms和-Xmx修改

此文不完整,为入门简介介绍,如果想深入了解请参考原文。

进入 Android Dalvik 虚拟机 进入 Android Dalvik 虚拟机,android dalvik介绍 Dalvik 虚拟机的特点——掌握 Android 程序的运行原理 Android 系统的架构采用分层思想,这样的好处是拥有减少各层之间的依赖性、便于独 立分发、容易收敛问题和错误等优点。Android 系统由 Linux 内核、函数库、Android 运行时、 应用程序框架以及应用程序组成。如图 3-4 的 Android 系统架构所示,Dalvik 虚拟机属于 Android 运行时环境,它与一些核心库共同承担 Android 应用程序的运行工作。 立即下载

相关推荐

如何设计ADAS系统功能状态机(一)

状态机模块在自动驾驶系统中扮演着关键的角色,它负责管理和控制各个功能的状态转换和行为执行。今天我们来聊聊如何设计自动驾驶系统的状态机。

supass2018的博客 1614

android 的User-Agen

userAgent::Dalvik/2.1.0 (Linux; U; Android 7.0; SM-G920F Build/NRD90M)

老汉带你推推推 1930

科研党必备:用MATLAB批量处理.mat文件数据的3种高效方法

本文为科研人员提供了使用MATLAB批量处理.mat文件数据的三种高效方法,涵盖智能数据加载、专业可视化与自动化报告生成。通过构建自动化框架、多维度数据画图策略及批量处理流程,帮助用户显著提升数据处理效率与图表专业性,解决海量实验数据的管理与分析难题。

weixin_29089057的博客 70

华为mate10 UA

Dalvik/2.1.0 (Linux; U; Android 9; ALP-AL00 Build/HUAWEIALP-AL00) "user-agent": "Mozilla/5.0 (Linux; Android 9; ALP-AL00 Build/HUAWEIALP-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Versi...

dianyin7770的博客 1289

量子计算入门指南:密度算符的核心概念与应用解析

本文深入解析了量子计算中密度算符的核心概念与应用。作为描述量子系统“状态的状态”的关键数学工具,密度算符能有效处理混合态与子系统描述,是理解量子噪声、量子纠错和开放系统演化的基石。文章通过对比纯态与混合态,阐释了密度矩阵的数学定义与物理意义,并结合代码示例演示了其在实际量子计算问题中的强大威力。

day7的博客 469

LLaMA-Factory微调教程5:多模态VLM模型对话

视觉-语言模型(VLM)概述与应用 视觉-语言模型(VLM)是一类结合视觉和语言信息的人工智能模型,旨在实现跨模态的理解与交互。其核心目标包括跨模态理解和生成能力,关键技术涉及模态表示与映射、多模态预训练以及跨模态交互机制。 典型VLM模型包括: CLIP:通过对比学习实现图像和文本的向量空间对齐 BLIP:结合自监督和弱监督学习提升语义对齐 ALBEF:基于BERT结构扩展跨模态注意力 DALL-E系列:基于文本生成图像的生成式模型 CLIP4Clip:扩展CLIP到视频领域 VLM在图像/视频检索、视觉

Cachel Wood的博客 1113

Dalvik 简介

Dalvik是Google公司自己设计用于Android平台的Java虚拟机。 Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为.dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。(dx 是一套工具,可以将 Java .c...

fcltctl的专栏 392

1.为什么要学习SIMULINK

用户也可以自定义和创建自己的模块,利用这些模块,用户可以创建层次化的系统模型,可以自上而下或自下而上地阅读模型,也就是说,用户可以查看最顶层的系统,然后通过双击模块进入下层的子系统查看模型,这不仅方便了工程人员的设计,而且可以使自己的模型方块图功能更清晰,结构更合理。此外,利用示波器模块或其他的显示模块,用户可以在仿真运行的同时观察仿真结果,而且还可以在仿真运行期间改变仿真参数,并同时观察改变后的仿真结果,最后的结果数据也可以输出到MATLAB工作区进行后续处理,或利用命令在图形窗口中绘制仿真曲线。

FPGA/MATLAB学习教程/源码/项目合作开发 1546

爬虫请求伪装成手机App:User-Agent + Header + TLS指纹

本文详细解析了如何将爬虫请求伪装成手机App的正常请求,以规避反爬系统检测。主要从三个维度展开:1)精准定制User-Agent,复刻目标App的UA格式;2)补全Header头信息,还原请求上下文环境;3)通过curl_cffi等工具模拟手机App特有的TLS指纹特征。文章还提供了Python实现示例,并建议采用动态UA池、随机请求间隔等进阶优化手段提升隐蔽性,同时强调必须遵守合规原则,在合法范围内使用爬虫技术。

weixin_41943766的博客 2608

大疆RoboMaster嵌入式面试,电机FOC调不出来当场走人

摘要:大疆RoboMaster嵌入式工程师面试以实战能力著称,重点考察FreeRTOS任务调度、FOC电机控制和CAN总线三大核心技能。FreeRTOS部分涉及优先级调度、栈溢出排查及信号量与互斥锁的区别;FOC控制要求现场编写电流环代码,并解释Clarke/Park变换原理;CAN总线则关注仲裁机制、CANopen协议应用及错误帧排查方法。面试强调工程实践,需具备STM32开发经验,建议搭建实际环境进行练习。该岗位被誉为"硬件版修罗场",充分体现大疆对实际开发能力的严格要求。

郑伟强dev的专栏 150

Android BLE扫描指南:解决设备发现问题

假设你正在开发一个MAUI应用,用于扫描并连接到BLE设备。你的代码在Windows上运行得很好,但在Android上却无法发现任何设备。尽管你已经在中声明了必要的权限,并且在运行时请求这些权限,扫描还是无法工作。

m0_62153576的博客 222

OKhttp设置UserAgent的那些事儿

首先科普一下,UserAgent中文名为用户代理,简称 UA,它是一个*特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。 Okhttp走的并不是原生的http请求,因此它在header里面并没有真正的User-Agent,而是“okhttp/版本号”这样的字符串,因为后台需要统计信息,要求传入自定义的User

vchao的博客 1万+

手把手教你学PCIE--系统内存管理:GART(Graphics Address Remapping Table)的典型用途详解

GART(图形地址重映射表)是GPU的核心组件,主要用于地址映射转换。其典型用途分为物理模式和虚拟模式两类:在物理模式下,GART将GPU虚拟地址映射到分散的物理内存,支持DMA连续访问非连续内存块,适用于GPU渲染纹理采样和AI推理数据搬运等场景;在虚拟模式下,GART配合IOMMU实现多级映射,将GPU虚拟地址转换为虚拟机物理地址再映射到宿主机物理地址,确保多租户隔离,应用于云服务器GPU共享和容器化AI训练等虚拟化环境。两种模式分别优化了高性能计算场景和虚拟化场景的需求。

MHD0815的博客 365

android的Dalvik虚拟机简介

Google于2007年底正式发布了Android SDK, 作为 Android系统的重要特性,Dalvik虚拟机也第一次进入了人们的视野。它对内存的高效使用,和在低速CPU上表现出的高性能,确实令人刮目相看。依赖于底层Posix兼容的操作系统,它可以简单的完成进程隔离和线程管理。每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释...

weixin_30911451的博客 252

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

ANDROID的DALVIK虚拟机简介

了解Android虚拟机的整体架构!

程序人生,奋斗人生! 2337

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Android Dalvik虚拟机简介

本文章编辑自:http://carvencao.blog.sohu.com/154325146.html       Java虚拟机(JVM)是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。它有自己完善的硬件架构(如处理器、堆栈、寄存器等),还具有相应的指令系统。其指令集基于栈架构,执行其特有的*.class文件格式.使用“Java虚拟机”程序就是为了支持与操作系统

Robin Hu的专栏 2481

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android的DALVIK虚拟机简介

[color=green][size=medium] Google于2007年底正式发布了Android SDK, 作为 Android系统的重要特性,Dalvik虚拟机也第一次进入了人们的视野。它对内存的高效使用,和在低速CPU上表现出的高性能,确实令人刮目相看。依赖于底层Posix兼容的操作系统,它可以简单的完成进程隔离和线程管理。每一个Android应用在底层都会对应一个独立的Dalv...

西瓜太甜 183

Android定制JVM—Dalvik虚拟机简介

Dalvik虚拟机是Google等厂商合作开发的Android系统专一的虚拟机,它是Android系统的核心组成部分之一。 Dalvik虚拟机支持已转换为.dex格式的java应用程序的运行。 .dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。    Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的

NewJerryj的专栏 6352

Android Protect-0.Dalvik语言基础简介

Dalvik语言基础简介

hgy413的专栏 873

面向Android上Dalvik运行时的C# 编译器dot42简介

Mono for Android最大的缺点是需要在Mono上面构建,这与Android预期的运行时完全不同。尽管能够直接访问完整的CLR的确有些优势,但是它与Android的Dalvik 运行时之间的封送调用(marshalling call)可能非常昂贵。那为什么不跳过IL代码直接生成Dex代码呢? 事实上这有点夸张。dot42编译器实际上并没有跳过IL。恰恰相反,它读取IL代码并将其转换

黄沙百战穿金甲,不破楼兰终不还。 1040

【编程语言】Android--Dalvik虚拟机简介

Java虚拟机(JVM)是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。它有自己完善的硬件架构(如处理器、堆栈、寄存器等),还具有相应的指令系统。使用“Java虚拟机”程序就是为了支持与操作系统无关、在任何系统中都可以运行的程序。   因此,我们不妨对Dalvik虚拟机作出这样的描述:  Dalvik虚拟机是Android程序的虚拟机,是Androi

省 983

android开发学习笔记(5)DalVik虚拟机简介

android开发之旅: 今天介绍一下android的DalVik虚拟机,目的是理解java应用程序的运行机理。 1.1  什么是DalVik虚拟机: google于2007年底发布了android sdk,作为android系统的重要特性,DalVik虚拟机也随之进入人们的视野。 DalVik虚拟机并不是一个java虚拟机,因为DalVik虚拟机不是按照java虚拟机的规范来实现的,这二

keep calm and carry on 1209
上一篇: 多益 2020 校招笔试 ( 信息安全工程师 )
下一篇: PE文件结构
(-: LYSM :-)
博客等级 码龄10年 428粉丝 273原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值