Friday, 23 January 2004

Comparing CLR, Mono, SSCLI and JAVA Performance

Eric Gunnerson links to a very old post by Werner Vogels titled Comparing CLR, Mono, SSCLI and JAVA Performance.

I'm sure I've seen that before. Maybe a different blogger (probably the prolific Robert Scoble) linked to it.

Anyway, it's encouraging that .NET is doing so well relative to Java considering that Java has had about six years more development. SSCLI is of course intended as a research implementation that's easier to understand, rather than a high-powered full implementation (and I suppose MS wouldn't want to give away too many secrets, either).

The exception-handling performance is a little concerning. Does the CLR really have to raise a Win32 structured exception to handle a managed exception, carrying with it a massive amount of overhead? IIRC, the Win32 function RaiseException is largely implemented in kernel mode, and requires a user-to-kernel-to-user mode transition to call each filter function for each of two passes. Ever since reading Chris Brumme's entry on the exception model, I've wondered whether it couldn't defer this operation until it actually hits some unmanaged code.

On XP and Server 2003, it could perhaps insert a vectored exception handler instead.

No comments: