Dalvik virtual machine
Encyclopedia
Dalvik is the process virtual machine (VM) in Google's
Android operating system. It is the software that runs the app
s on Android phones. Dalvik is thus an integral part of Android, which is typically used on mobile devices such as mobile phone
s, tablet computer
s and netbook
s. Programs are commonly written in a dialect of Java and compiled to bytecode
. Then they are converted from Java Virtual Machine
-compatible .class files to Dalvik-compatible .dex (Dalvik Executable) files before installation on a device. The compact Dalvik Executable format is designed to be suitable for systems that are constrained in terms of memory and processor
speed.
Dalvik is open-source software
. It was originally written by Dan Bornstein, who named it after the fishing village of Dalvík
in Eyjafjörður
, Iceland
, where some of his ancestors lived.
, which are stack machine
s, the Dalvik VM is a register-based architecture
.
A tool called dx is used to convert some (but not all) Java .class
files into the .dex format. Multiple classes
are included in a single .dex file. Duplicate strings
and other constants used in multiple class files are included only once in the .dex output to conserve space. Java bytecode
is also converted into an alternative instruction set
used by the Dalvik VM. An uncompressed .dex file is typically a few percent smaller in size than a compressed
.jar
(Java Archive) derived from the same .class files.
The Dalvik executables may be modified again when installed onto a mobile device. In order to gain further optimizations
, byte order
may be swapped in certain data, simple data structure
s and function libraries may be linked inline
, and empty class objects may be short-circuited, for example.
As of Android 2.2, Dalvik has a just-in-time compiler
.
Being optimized for low memory requirements, Dalvik has some specific characteristics that differentiate it from other standard VMs:
Moreover, according to Google, Dalvik has been designed so that a device can run multiple instances of the VM efficiently.
s versus register
-based approaches is a subject of ongoing debate.
Generally, stack-based machines must use instructions to load data on the stack and manipulate that data, and, thus, require more instructions than register machines to implement the same high level code
, but the instructions in a register machine must encode the source and destination registers and, therefore, tend to be larger. This difference is primarily of importance to VM interpreters for which opcode
dispatch tends to be expensive along with other factors similarly relevant to just-in-time compilation
.
However, tests performed on ARM
devices by Oracle
with standard non graphic Java benchmarks on both Android 2.2 and Java SE embedded (both based on Java SE 6) showed that Android 2.2 was 2 to 3 times slower than Java SE embedded.
profiles (e.g., Java ME classes, AWT
or Swing
are not supported). Instead it uses its own library built on a subset of the Apache Harmony
Java implementation.
implementation rather than a development on top of a standard Java runtime, which would mean it might not inherit copyright-based license restrictions from either the standard-edition or open-source-edition Java runtimes.. However, the fact that Google's implementation of the Java runtime is clean-room is disputed by Oracle
and some reviewers.
Dalvik is published under the terms of the Apache License
2.0.
On 12 August 2010, Oracle
, which acquired Sun Microsystems
in April 2009 and therefore owns the rights to Java, sued Google over claimed infringement of copyrights and patents. In developing Android, it is alleged that Google knowingly, directly and repeatedly infringed Oracle's Java-related intellectual property.
Specifically the patent infringement claim references seven patents including "Method And Apparatus For Preprocessing And Packaging Class Files", and "Interpreting Functions Utilizing A Hybrid Of Virtual And Native Machine Instructions".
It also references "Method And Apparatus For Resolving Data References In Generated Code".
Google
Google Inc. is an American multinational public corporation invested in Internet search, cloud computing, and advertising technologies. Google hosts and develops a number of Internet-based services and products, and generates profit primarily from advertising through its AdWords program...
Android operating system. It is the software that runs the app
Android Market
Android Market is an online software store developed by Google for Android OS devices. Its gateway is an application program called "Market", preinstalled on most Android devices, allows users to browse and download mobile apps published by third-party developers...
s on Android phones. Dalvik is thus an integral part of Android, which is typically used on mobile devices such as mobile phone
Mobile phone
A mobile phone is a device which can make and receive telephone calls over a radio link whilst moving around a wide geographic area. It does so by connecting to a cellular network provided by a mobile network operator...
s, tablet computer
Tablet computer
A tablet computer, or simply tablet, is a complete mobile computer, larger than a mobile phone or personal digital assistant, integrated into a flat touch screen and primarily operated by touching the screen...
s and netbook
Netbook
Netbooks are a category of small, lightweight, legacy-free, and inexpensive laptop computers.At their inception in late 2007 as smaller notebooks optimized for low weight and low cost — netbooks omitted certain features , featured smaller screens and keyboards, and offered reduced computing...
s. Programs are commonly written in a dialect of Java and compiled to bytecode
Java bytecode
Java bytecode is the form of instructions that the Java virtual machine executes. Each bytecode opcode is one byte in length, although some require parameters, resulting in some multi-byte instructions. Not all of the possible 256 opcodes are used. 51 are reserved for future use...
. Then they are converted from Java Virtual Machine
Java Virtual Machine
A Java virtual machine is a virtual machine capable of executing Java bytecode. It is the code execution component of the Java software platform. Sun Microsystems stated that there are over 4.5 billion JVM-enabled devices.-Overview:...
-compatible .class files to Dalvik-compatible .dex (Dalvik Executable) files before installation on a device. The compact Dalvik Executable format is designed to be suitable for systems that are constrained in terms of memory and processor
Central processing unit
The central processing unit is the portion of a computer system that carries out the instructions of a computer program, to perform the basic arithmetical, logical, and input/output operations of the system. The CPU plays a role somewhat analogous to the brain in the computer. The term has been in...
speed.
Dalvik is open-source software
Open-source license
An open-source license is a copyright license for computer software that makes the source code available for everyone to use. This allows end users to review and modify the source code for their own customization and/or troubleshooting needs...
. It was originally written by Dan Bornstein, who named it after the fishing village of Dalvík
Dalvík
Dalvíkurbyggð is a municipality in the north of Iceland.The population of the municipality is about 2,000- History :The municipality of Dalvíkurbyggð was formed in 1998 by the merger of three districts of outer Eyjafjörður: the town of Dalvík and the rural districts of Svarfaðardalur and Árskógur...
in Eyjafjörður
Eyjafjörður
Eyjafjörður is the longest fjord in central northern Iceland. It is located in the second most populous region of Iceland.-Physical geography:...
, Iceland
Iceland
Iceland , described as the Republic of Iceland, is a Nordic and European island country in the North Atlantic Ocean, on the Mid-Atlantic Ridge. Iceland also refers to the main island of the country, which contains almost all the population and almost all the land area. The country has a population...
, where some of his ancestors lived.
Architecture
Unlike Java VMsJava Virtual Machine
A Java virtual machine is a virtual machine capable of executing Java bytecode. It is the code execution component of the Java software platform. Sun Microsystems stated that there are over 4.5 billion JVM-enabled devices.-Overview:...
, which are stack machine
Stack machine
A stack machine may be* A real or emulated computer that evaluates each sub-expression of a program statement via a pushdown data stack and uses a reverse Polish notation instruction set....
s, the Dalvik VM is a register-based architecture
Register machine
In mathematical logic and theoretical computer science a register machine is a generic class of abstract machines used in a manner similar to a Turing machine...
.
A tool called dx is used to convert some (but not all) Java .class
Class (file format)
In the Java programming language, source files are compiled into machine-readable class files which have a .class extension. Since Java is a platform-independent language, source code is compiled into an output file known as bytecode, which it stores in a .class file. If a source file has more...
files into the .dex format. Multiple classes
Class (computer science)
In object-oriented programming, a class is a construct that is used as a blueprint to create instances of itself – referred to as class instances, class objects, instance objects or simply objects. A class defines constituent members which enable these class instances to have state and behavior...
are included in a single .dex file. Duplicate strings
String (computer science)
In formal languages, which are used in mathematical logic and theoretical computer science, a string is a finite sequence of symbols that are chosen from a set or alphabet....
and other constants used in multiple class files are included only once in the .dex output to conserve space. Java bytecode
Bytecode
Bytecode, also known as p-code , is a term which has been used to denote various forms of instruction sets designed for efficient execution by a software interpreter as well as being suitable for further compilation into machine code...
is also converted into an alternative instruction set
Instruction set
An instruction set, or instruction set architecture , is the part of the computer architecture related to programming, including the native data types, instructions, registers, addressing modes, memory architecture, interrupt and exception handling, and external I/O...
used by the Dalvik VM. An uncompressed .dex file is typically a few percent smaller in size than a compressed
Data compression
In computer science and information theory, data compression, source coding or bit-rate reduction is the process of encoding information using fewer bits than the original representation would use....
.jar
JAR (file format)
In software, JAR is an archive file format typically used to aggregate many Java class files and associated metadata and resources into one file to distribute application software or libraries on the Java platform.JAR files are built on the ZIP file format and have the .jar file extension...
(Java Archive) derived from the same .class files.
The Dalvik executables may be modified again when installed onto a mobile device. In order to gain further optimizations
Optimization (computer science)
In computer science, program optimization or software optimization is the process of modifying a software system to make some aspect of it work more efficiently or use fewer resources...
, byte order
Endianness
In computing, the term endian or endianness refers to the ordering of individually addressable sub-components within the representation of a larger data item as stored in external memory . Each sub-component in the representation has a unique degree of significance, like the place value of digits...
may be swapped in certain data, simple data structure
Data structure
In computer science, a data structure is a particular way of storing and organizing data in a computer so that it can be used efficiently.Different kinds of data structures are suited to different kinds of applications, and some are highly specialized to specific tasks...
s and function libraries may be linked inline
Inline function
In various versions of the C and C++ programming languages, an inline function is a function upon which the compiler has been requested to perform inline expansion...
, and empty class objects may be short-circuited, for example.
As of Android 2.2, Dalvik has a just-in-time compiler
Just-in-time compilation
In computing, just-in-time compilation , also known as dynamic translation, is a method to improve the runtime performance of computer programs. Historically, computer programs had two modes of runtime operation, either interpreted or static compilation...
.
Being optimized for low memory requirements, Dalvik has some specific characteristics that differentiate it from other standard VMs:
- The VM was slimmed down to use less space
- The constant pool has been modified to use only 32-bit32-bitThe range of integer values that can be stored in 32 bits is 0 through 4,294,967,295. Hence, a processor with 32-bit memory addresses can directly access 4 GB of byte-addressable memory....
indices to simplify the interpreterInterpreter (computing)In computer science, an interpreter normally means a computer program that executes, i.e. performs, instructions written in a programming language... - Standard Java bytecodeJava bytecodeJava bytecode is the form of instructions that the Java virtual machine executes. Each bytecode opcode is one byte in length, although some require parameters, resulting in some multi-byte instructions. Not all of the possible 256 opcodes are used. 51 are reserved for future use...
executes 8-bit stack instructions. Local variables must be copied to or from the operand stack by separate instructions. Dalvik instead uses its own 16-bit instruction set that works directly on local variables. The local variable is commonly picked by a 4-bit 'virtual register' field. This lowers Dalvik's instruction count and raises its interpreter speed.
Moreover, according to Google, Dalvik has been designed so that a device can run multiple instances of the VM efficiently.
Performance
The relative merits of stack machineStack machine
A stack machine may be* A real or emulated computer that evaluates each sub-expression of a program statement via a pushdown data stack and uses a reverse Polish notation instruction set....
s versus register
Register machine
In mathematical logic and theoretical computer science a register machine is a generic class of abstract machines used in a manner similar to a Turing machine...
-based approaches is a subject of ongoing debate.
Generally, stack-based machines must use instructions to load data on the stack and manipulate that data, and, thus, require more instructions than register machines to implement the same high level code
High-level programming language
A high-level programming language is a programming language with strong abstraction from the details of the computer. In comparison to low-level programming languages, it may use natural language elements, be easier to use, or be from the specification of the program, making the process of...
, but the instructions in a register machine must encode the source and destination registers and, therefore, tend to be larger. This difference is primarily of importance to VM interpreters for which opcode
Opcode
In computer science engineering, an opcode is the portion of a machine language instruction that specifies the operation to be performed. Their specification and format are laid out in the instruction set architecture of the processor in question...
dispatch tends to be expensive along with other factors similarly relevant to just-in-time compilation
Just-in-time compilation
In computing, just-in-time compilation , also known as dynamic translation, is a method to improve the runtime performance of computer programs. Historically, computer programs had two modes of runtime operation, either interpreted or static compilation...
.
However, tests performed on ARM
ARM architecture
ARM is a 32-bit reduced instruction set computer instruction set architecture developed by ARM Holdings. It was named the Advanced RISC Machine, and before that, the Acorn RISC Machine. The ARM architecture is the most widely used 32-bit ISA in numbers produced...
devices by Oracle
Oracle Corporation
Oracle Corporation is an American multinational computer technology corporation that specializes in developing and marketing hardware systems and enterprise software products – particularly database management systems...
with standard non graphic Java benchmarks on both Android 2.2 and Java SE embedded (both based on Java SE 6) showed that Android 2.2 was 2 to 3 times slower than Java SE embedded.
Class library
Dalvik does not align to Java SE nor Java ME class libraryJava Class Library
The Java Class Library is a set of dynamically loadable libraries that Java applications can call at run time. Because the Java Platform is not dependent on any specific operating system, applications cannot rely on any of the existing libraries...
profiles (e.g., Java ME classes, AWT
Abstract Window Toolkit
The Abstract Window Toolkit is Java's original platform-independent windowing, graphics, and user-interface widget toolkit. The AWT is now part of the Java Foundation Classes — the standard API for providing a graphical user interface for a Java program.AWT is also the GUI toolkit for a...
or Swing
Swing (Java)
Swing is the primary Java GUI widget toolkit. It is part of Oracle's Java Foundation Classes — an API for providing a graphical user interface for Java programs....
are not supported). Instead it uses its own library built on a subset of the Apache Harmony
Apache Harmony
Apache Harmony was an open source, free Java implementation, developed by the Apache Software Foundation. It was announced in early May 2005 and on October 25, 2006, the Board of Directors voted to make Apache Harmony a top-level project...
Java implementation.
Licensing and patents
Dalvik is claimed by Google to be a clean-roomClean room design
Clean room design is the method of copying a design by reverse engineering and then recreating it without infringing any of the copyrights and trade secrets associated with the original design. Clean room design is useful as a defense against copyright and trade secret infringement because it...
implementation rather than a development on top of a standard Java runtime, which would mean it might not inherit copyright-based license restrictions from either the standard-edition or open-source-edition Java runtimes.. However, the fact that Google's implementation of the Java runtime is clean-room is disputed by Oracle
Oracle Corporation
Oracle Corporation is an American multinational computer technology corporation that specializes in developing and marketing hardware systems and enterprise software products – particularly database management systems...
and some reviewers.
Dalvik is published under the terms of the Apache License
Apache License
The Apache License is a copyfree free software license authored by the Apache Software Foundation . The Apache License requires preservation of the copyright notice and disclaimer....
2.0.
On 12 August 2010, Oracle
Oracle Corporation
Oracle Corporation is an American multinational computer technology corporation that specializes in developing and marketing hardware systems and enterprise software products – particularly database management systems...
, which acquired Sun Microsystems
Sun Microsystems
Sun Microsystems, Inc. was a company that sold :computers, computer components, :computer software, and :information technology services. Sun was founded on February 24, 1982...
in April 2009 and therefore owns the rights to Java, sued Google over claimed infringement of copyrights and patents. In developing Android, it is alleged that Google knowingly, directly and repeatedly infringed Oracle's Java-related intellectual property.
Specifically the patent infringement claim references seven patents including "Method And Apparatus For Preprocessing And Packaging Class Files", and "Interpreting Functions Utilizing A Hybrid Of Virtual And Native Machine Instructions".
It also references "Method And Apparatus For Resolving Data References In Generated Code".
On non-Android platforms
In 2011, the software company Myriad Group announced "Alien Dalvik", a port of the Dalvik virtual machine to platforms other than Android.See also
- Application virtualizationApplication VirtualizationApplication virtualization is an umbrella term that describes software technologies that improve portability, manageability and compatibility of applications by encapsulating them from the underlying operating system on which they are executed. A fully virtualized application is not installed in...
- Comparison of application virtual machinesComparison of Application Virtual MachinesThis article lists some software virtual machines that are typically used for allowing application bytecode to be portably run on many different computer architectures and operating systems. The application is usually run on the computer using an interpreter or just-in-time compilation...
- Comparison of Java and Android APIComparison of Java and Android APIThis article compare the Java and Android API and virtual machine machines.While most Android applications are written in Java, there are many differences between the java API and the Android API, and Android does not use a Java Virtual Machine but another one called Dalvik.-Virtual machine:There...
- Dalvik Turbo virtual machineDalvik Turbo virtual machineDalvik Turbo is an alternative to Google's implementation of the Dalvik virtual machine that runs on the Android operating system and other platforms...
External links
- http://code.google.com/p/dalvik/
- Detailed Dalvik specifications documents
- Dex File Format
- Dalvik VM OpCodes
- Dalvik VM Internals - Presentation from Google I/O 2008, by Dan Bornstein
- Android-dalvik-vm-on-java is an ongoing project aims to develop a pure Java implementation of the Android's Dalvik virtual machine.
- Oracle v Google Copyright Claims Decompiled