If you have heard much about Google’s mobile operating system, Android, or have been following the recent Oracle lawsuit against Google, you have probably encountered the term “Dalvik”. If Android is “Java based”, what exactly is Dalvik and what does it do?
To understand Dalvik, you must first understand that Android is not Java. Android being “Java based” is a great oversimplification that many in the media and tech news have used to avoid getting too deep into the details. However, Android has never claimed that it was 100% compatible with Java. Java syntax is used to create the source code for Android applications. It is then compiled into Java bytecode.
For those of you not familiar with Java, bytecode is a type of “virtual” machine code. Java programs are turned into bytecode which is then run on a Java virtual machine (VM). The virtual machine is what allows Java programs to run on diverse platforms. It interprets the bytecode and adjusts for the actual hardware.
Android programs take an additional step though. The Java bytecode is converted into Dalvik bytecode. This is because Android does not have a Java virtual machine. Dalvik replaces the Java VM on the Android platform. Dalvik differs from the Java virtual machine in a number of ways. Many of these differences are necessary because mobile phones typically have lower memory and less powerful hardware than the platforms that Java typically runs on.
The Dalvik machine is register-based rather than stack-based like the Java virtual machine. In a stack based machine, the computer’s memory forms a stack. Instructions are taken from the top of the stack and moved into memory for execution. Register based systems use a series of memory registers rather than a stack. By being a register based machine, Dalvik can get better performance from a limited memory architecture.
When you run more than one Java program at a time, each program starts its own virtual machine. Parts of the VM are read-only but each Java VM has its own copy of those read-only portions. To optimize the low memory environment of most mobile devices, Dalvik has been designed to share a single copy of the read-only parts of the virtual machine. When your Android phone runs more than one application at a time, each application runs in its own Dalvik virtual machine. However, all of those Dalvik virtual machines share a single copy of the read-only portions. This greatly reduces memory consumption.
You may also have heard that Dalvik is a clean-room implementation. What this means is that the developers who wrote the Dalvik VM did it without looking at the source code for the Java virtual machine. Clean room implementation is often done to protect against copyright lawsuits. This is because one can be sure that the developers independently arrived at their solution and did not copy it (albeit with modification) from a similar system.
Dalvik is an important piece of technology. It is the core of Android and provides a very efficient and low memory virtual machine. While Java syntax and Java source code can be used to create Dalvik byte code, it is important to understand that Dalvik is not a Java virtual machine and does not run Java code. It runs its own bytecode which can be produced from Java source code. This is an important distinction, especially in light of Oracle’s recent lawsuit against Android. Would you like to learn beyond this article? Check out our Android training course offering. You’ll be sure to find a course you are looking for.
Help us spread the word!
If you liked this article, consider enrolling in one of these related courses:
|May 16-17||Advanced Android|
|May 22-24||Java for Android|
|May 23-26||Android Bootcamp|
|- Classroom - Online|