Jörgen Sigvardsson wrote: So basically what you're saying is that .NET apps being JITed are compiled onload, as opposed to java which are JITed on the fly whenever it's gained enough statistics? Exactly. And I'm yet to see a so good JITter as the .NET's one. Even the Rotor's one is a very good one. If you don't know yet, Rotor is an open source .NET CLR made by Microsoft running on Windows, FreeBSD and Mac OS X. Some people hacked it so it compiles under Linux, too. When the first Java JITters started to be written, some people saw some design mistakes that were made when defining some Java bytecodes. So, since Java was not designed from the start with JIT in mind, some bytecodes are hard to be tightly optimized. The main design goal in Java bytecodes was small bytecode size (so applets loaded faster; this was a really important issue in the 14.4K modem days), small interpreter size (so it could be embedded) and fast interpretation (not fast JIT, do you see?) The inverse is not true with the .NET JIT. It's a much more modern design. If a assembly is 2K or 3K, it doesn't matter so much; the MS IL is actually very similar and fast to translate into a graph often made in the optimizing phase of a compiler; so, loading an assembly and optimizing it is very fast. And it was designed with Pentium 4, Athlon in mind. Processor scheduling and memory caches were taken account when designing the JIT and the GC. IMHO, the Java JVM design is starting to become obsolete, and it would be healthy if Sun made a review in some design decisions. Jörgen Sigvardsson wrote: Does ngen.exe work on all assemblies? Can I instruct the system to ngen assemblies automatically for me? Yes, it works. No, and often, it's not necessary nor efficient NGEN assemblies. Only in some cases, like the System.* namespaces, some heavily used libraries and command line utilities which potentially could be called several times in a row it would make a difference. As I've said, loading and optimizing an assembly is a extremely fast process. Actually, there are some poorly and some undocumented ways of timing this and, in Desktop Bob, a moderate size application, it is taking only 150ms. I see dumb people