Daneel: The difference between Java and Dalvik

Those of you who kept following IcedRobot might have seen that quite some work went into Daneel over the past months. He1 is in charge of parsing Android applications containing code intended to run on a Dalvik VM and transforming this code into something which can run on any underlying Java VM. So he is a VM compatible with Dalvik on top of a Java VM, or at least that’s what he wants to become.

So Daneel is multilingual in a strange way, he can read and understand Dalvik bytecode, but he only speaks and writes Java bytecode. To understand how he can do that we have to look at the differences between those two dialects.

Registers vs. Stack: We know Dalvik bytecode uses a register-machine, and Java bytecode uses a stack-machine. But each method frame on that stack-machine not only has an operand stack, it also has an array of local variables. Unfortunately this distinction is lost in our register-machine. To understand what this means, let us look at a full Java-Dalvik-Daneel round-trip for a simple method like the following.

public static int addConst(int val) {
   return val + 123456;
}

The first stop on our round-trip is the Java bytecode. So after we push this snippet through javac we get the following code which makes use of both, an operand stack and local variables.

public static int addConst(int);
  [max_stack=2, max_locals=1, args_size=1]
   0: iload_0
   1: ldc #int 123456
   3: iadd
   4: ireturn

The second stop takes us to the Dalvik bytecode. We push the above code through the dx tool and are left with the following code. Note that the distinction between the operand stack and local variables is lost completely, everything is stored in registers.

public static int addConst(int);
  [regs=2, ins=1, outs=0]
   0: const v0, #0x1E240
   1: add-int/2addr v0, v1
   2: return v0

The third and last step is Daneel reading the Dalvik bytecode and trying to reproduce sane Java bytecode again. The following is what he spits out after chewing on the input for a bit.

public static int addConst(int);
  [max_stack=2, max_locals=2, args_size=1]
   0: ldc #int 123456
   1: istore_1
   2: iload_1
   3: iload_0
   4: iadd
   5: istore_1
   6: iload_1
   7: ireturn

The observant reader will notice the vast difference between what we had at the beginning of our round-trip and what we ended up with. Daneel maps each Dalvik register to a Java local variable. Fortunately any decent Java VM will optimize away the unnecessary load and store instructions and we can achieve acceptable performance with this naive approach already.

Untyped Instructions: Another big difference might not be that obvious at first glance. Notice how the instruction at label 0 in the above Dalvik bytecode (the second stop on our round-trip) accesses register v0 without specifying the exact type of that register? The only thing Daneel can determine at that point in the code is that it’s a 32-bit value we are dealing with, it could be an int or a float value. For zero-constants it could even be a null reference we are dealing with. The exact type of that register is not revealed before the instruction at label 1, where v0 is read again by a typed instruction. It’s at that point that we learn the exact type of that register.

So Daneel has to keep track of all register types while iterating through the instruction stream to determine the exact types and decide which Java bytecode instructions to emit. I intend to write a separate article about how this is done by Daneel in the following days, so stay tuned.

Disclaimer: This is a technical description of just two major differences between Dalvik bytecode and Java bytecode. All political discussions about differences or similarities between Dalvik and Java in general are outside the scope of this article and I won’t comment on them.

1 Yes, Daneel is male. His girlfriend is called Ika. Together they love to drink iced tea because they try to get off caffeine. They even have a butler working for them who is called Jenkins, a very lazy guy who regularly was seen to crash during work.

Glad to visit this great

Glad to visit this great blog. keep on posting.

Interesting blog! Keep on

Interesting blog! Keep on posting.

Thank you for such a

Thank you for such a fantastic blog.

Thank you so much for sharing

Thank you so much for sharing a great blog.

Looking forward to seeing

Looking forward to seeing more informative articles on this site.

It's great to see an

It's great to see an informative content here.

Glad I came here! Thanks for

Glad I came here! Thanks for updating this article. Thanks! https://www.insulationcoquitlam.com

Nice! I really enjoy the

Nice! I really enjoy the article post. Much thanks again.

I had learned a lot from this

I had learned a lot from this blog. Thank you for sharing.

I became up until now started

I became up until now started out getting some site, online people today manufacture listed here has provided absolutely everyone hugely. Have fun here ideal for your complete present-day period & give good results.

Thanks for sharing this

Thanks for sharing this important info, glad to visit this site.

hi ms marietta, is there

hi ms marietta, is there anyway we can reach out to you to help? cause we really know you might be needing our services badly.

Great share! Looking forward

Great share! Looking forward to seeing more posts here.

Dalvik was a defunct process

Dalvik was a defunct process virtual machine (VM) in the Android OS that ran specifically designed Android apps. Although it is no longer utilized during runtime in more recent versions of Android, Dalvik bytecode format is still used as a distribution format. Dalvik is a Linux operating system that runs on top of Android.

Great sharing

A virtual machine called the

A virtual machine called the DVM is used to execute Android apps. Dalvik bytecode, which is translated from Java applications, is executed by the DVM. The DVM is not a JVM, as should be noted. One of the primary design tenets of the DVM is that it should load faster than any JVM and work on mobile devices with less RAM.

It's great to know their

It's great to know their differences. Great share!

Thanks for sharing this

Thanks for sharing this information.

The main difference between

The main difference between Java and Dalvik is that Java is a full-fledged programming language while Dalvik is a VM. Therefore, Java code needs to be compiled into Dalvik bytecode before it can run on an Android device.

Awesome post, I am definitely

Awesome post, I am definitely going to follow your blog.

This is very informative.

This is very informative. Thanks for sharing this information. It is very helpful.

It's indeed informative.

It's indeed informative.

Glad to check this. Thanks

Glad to check this. Thanks for the info.

Same here. I learn something

Same here. I learn something new today. Thank you for sharing this. Also, contact us if you're from Scottsdale looking for inflatable party rentals.

I’ve been visiting your blog

I’ve been visiting your blog for a while now and I always find a gem in your new posts. Thanks for your usual wonderful effort.

Spaustuve Kaune iPRINT. Viena

Spaustuve Kaune iPRINT. Viena geriausių spaustuvių Kauno rajone ir galbūt Lietuvoje. Koybiška spauda greitai ir pigiai. <a href="https://iprint.lt/">Spaustuve</a>

I don't really get what you

I don't really get what you mean. I hope that's important info you're sharing. Anyway, if you need air duct cleaners to take care of your air duct cleaning needs in Surprise, get the guys from https://www.airanddryerventcleaningsurprise.com for quality services at rates you can afford.

Thank you so much for sharing

Thank you so much for sharing this one!

Batu spinteles yra

Batu spinteles yra reikalingos kiekviename prieskambaryje. PALPAL Baldai siulo kokybiskas batu spinteles jusu namams

What language are you using?

What language are you using? Is that Indonesian? Anyway, which do you prefer, Java or Dalvik, for me I'd go for java. By the way, if you're looking for quality air duct cleaning, refer it to https://www.airanddryerventcleaningphoenix.com when you're in Phoenix, AZ.

An interesting discussion on

An interesting discussion on the difference between Java and Dalvik. Quite educating. Thanks for sharing.

I totally agree with your

I totally agree with your statement but to be honest, I'm not familiar with Dalvik.

This post gives another level

This post gives another level of information, Keep it up!

-Grant

hi grant. your plumbing

hi grant. your plumbing business is thriving. can you help support us also?

Thanks for sharing too. I

Thanks for sharing too. I really like this post, it's easy to understand.

I learn so much. I think Java

I learn so much. I think Java is better and hope to be good at it.

I really learned a lot from

I really learned a lot from this article. I agree with you it is interesting. Thank you for sharing.
https://www.carpetcleaning-redding.com/

Great work. Thanks for a very

Great work. Thanks for a very specific explanation.
https://www.drywallchico.com/

Thanks you for the nice post,

Thanks you for the nice post, This benefit a lot

An interesting discussion on

An interesting discussion on the difference between Java and Dalvik. Quite educating. Thanks for sharing. [url=https://www.bedford-flooring.co.uk] Bedford flooring [/url]

Very interesting discussion

Very interesting discussion on the difference between Java and Dalvik, I have really learned a lot all thanks to you. Please keep us updated.

Thank you for sharing! Such

Thank you for sharing! Such great content, glad I found this blog!!

Very interesting discussion

Very interesting discussion on the difference between Java and Dalvik, I have really learned a lot all thanks to you. Please keep us updated

You wrote well and the

You wrote well and the content is very informative. Mind, if I share my website, feel free to click the link https://www.goidahoinsurance.com/life-insurance-boise to learn more about our insurance services.

This is a great site

This is a great site

There is such great

There is such great information on this site

This is a great post, the

This is a great post, the differences of each one have their own functions. Visit now this site here https://www.a1treeservicespokane.com/

Yes, I completely agree.

Yes, I completely agree. However, I like Java better than Dalvik.

Regards,

Jack | Tree Care Specialist @ https://www.treeremovalservicechandler.com/

Thanks for posting this

Thanks for posting this article on the difference between Java and Dalvik. It's very informative and helpful. Some persons think they are similar, but article really highlights the difference in their features. Great work
Cheers
https://www.derbyroofers.co.uk

This is great content, thanks

This is great content, thanks for sharing the differences as programming languages become more abundant it's important to know how they differ. https://www.roofingthunderbay.com/