Question: i know that java programs are first compiled and a bytecode is generated which is platform independent. But my question is why is this bytecode interpreted in the next stage and not compiled even though compilation is faster than interpretation in general??

Answer: 
The Java bytecode normally *is* compiled via [Just-In-Time (JIT) compilation](http://en.wikipedia.org/wiki/Just-in-time_compilation).

So you still end up with fully compiled native code being executed, the only difference is that this native code is generated by the JVM at runtime, rather than being statically generated at the time the source code is compiled (as would happen with C/C++).

This gives Java two big advantages:

* By delaying the compilation until runtime, the bytecode remains fully portable across platforms
* In some cases the JIT compiler can actually generate more optimised native code because it is able to exploit statistics gathered by examining the execution parths of the code at runtime.

The downside, of course, is that the JIT compiler needs to do it's work at application start-up, which explains why JVM applications can have a slightly long start-up time compared to natively compiled apps.
The JVM uses **Just in time compilation** <http://en.wikipedia.org/wiki/Just-in-time_compilation>, so it's much faster than pure interpretation.