Saturday, May 29, 2010

Clash of the Titans, C++ vs Java!

As a software engineer, the mind is trained to seek optimizations in every aspect of development, and ooze out every bit of available cpu resource to deliver a performing application. This begins not only in designing the algorithm or coming out with efficient and robust architecture, but right onto the choice of programming language. Most of us, as we spend years in our jobs - tend to be proficient in at least one of these.

Recently, I spent some time to check on the performance (not a very detailed study) of the various programming languages. One, by researching on the internet; Two, by developing small programs and benchmarking. The legacy languages - be it ASM or C still rule in terms of performance. But these are definitely ruled out for enterprise applications due to the complexity in development, maintainability, need for object orientation and interoperability. They still will win for mission critical or real-time systems, which need performance over these parameters. There were languages i briefly read about, including other performance comparisons on the internet. These include Python, PHP, Perl and Ruby.

Considering all aspects and needs of current enterprise development, it is C++ and Java which outscore the other in terms of speed. According to other comparisons [Google for 'Performance of Programming Languages'] spread over the net, they clearly outshine others in all speed benchmarks. So much for my blog title :-)

So when these titans are pit against each other in real time, considering all aspects of memory and execution time - Java is floored. Though I have spent last 7 years of my life coding and perfecting my Java and J2EE skill - I suddenly feel... Ahem, Slow! One of the problem statements to verify this is given below (alongwith the associated code) and the associated execution parameters.


[Disclaimer: Problem Statement given below is the property of www.codechef.com]
In Byteland they have a very strange monetary system. Each Bytelandian gold coin has an integer number written on it. A coin n can be exchanged in a bank into three coins: n/2, n/3 and n/4. But these numbers are all rounded down (the banks have to make a profit). You can also sell Bytelandian coins for American dollars. The exchange rate is 1:1. But you can not buy Bytelandian coins. You have one gold coin. What is the maximum amount of American dollars you can get for it?

Input
The input will contain several test cases (not more than 10). Each testcase is a single line with a number n, 0 <= n <= 1 000 000 000. It is the number written on your coin.


JAVA SOLUTION

C++ SOLUTION

RESULTS

TIME

MEM

LANG

0.00

2.8M

C++ 4.3.2

0.26

218.3M

JAVA



I am sure these results will continue to be remain in the same ratio (with slight variations for other or benchmark problems) - even with the most optimized java code.