# Tuesday, March 16, 2004
« JDK 1.5 beta | Main | A Less Broken Snapshot? »
New Snapshot

Last week I said I'd go through a stabilization phase, but I couldn't resist the urge to implement some more stuff and fix various things. So this snapshot is a fairly big change again, but no major architectural overhaul like the pervious one.

What's new?

  • Merged with current Classpath cvs.
  • Support for JDK 1.5 style class literals (only for class files with version 49 or greater).
  • Removed signature decoding from ClassFile.cs (I once thought that it should live there, instead of in ClassLoaderWrapper, but that turned out not to be a good idea).
  • Added CoreClasses.cs to cache a few of the frequently used TypeWrappers (Object, Class, String and Throwable).
  • Fixed volatile long/double handling to use the (new in .NET 1.1) Thread.VolatileRead/VolatileWrite methods.
  • Changed type used in ImplementsAttribute to the ghost wrapper for ghosts.
  • Changed method name mangling for interface implementation stubs (shorter name and now uses a slash to make sure it doesn't clash with any Java method names).
  • Added support for Finalize/finalize method overriding when mixing Java and non-Java classes in the class hierarchy. I don't like this solution very much. The code is ugly and complicated.
  • Added special support for finalize method for .NET types that extend Java types.
  • Fixed handling of synchronized static methods. Previously, .NET MethodImplOptions.Synchronized flag was simply set, but this was incorrect because that causes the method to synchronize on the .NET Type object, instead of the Java Class object.
  • Fixed handling of instance calls on value types.
  • Fixed System.currentTimeMillis implementation to use DateTime.UtcNow instead of Environment.TickCount, to prevent overflow.
  • Changed System.setErr/setIn/setOut to use TypeWrapper based reflection instead of .NET reflection.
  • Changed handling of resources to use .NET resources instead of global fields, this allows resources to work in multi-module assemblies.
  • Changed URL format for assembly embedded resources from opaque to parseable, to facilitate parsing them as a URI.
  • Added support for passing ghost references to methods in map.xml instructions.
  • Fixed a regression introduced in the previous snapshot, that caused exception mapping not to be invoked for catch(Throwable).
  • Limited fixes to get AWT working again (after Classpath AWT changes).
  • Declared String.equals and String.compareTo(Object) in map.xml to make reflection appearance identical to JDK.
  • Implemented JDK 1.4 String methods that rely on regular expressions (Classpath now has java.util.regex.* support, although not 100% compatible with the JDK).
  • Minor performance improvement in String.hashCode implementation. Oddly enough, by doing the length check in the for condition, instead of manually hoisting it out of the loop. Apparantly the CLR JIT recognizes this pattern and optimizes it better.
  • Fixed Thread.join to work with non-Java created threads as well.
  • Fixed removal of non-Java created threads from ThreadGroup.
  • Fixed ServerSocket.accept() timeout support.
  • Fixed ikvmc handling of -reference assemblies (to handle the Load vs LoadFrom context issues).
  • Various comment fixes.

New snapshots: just the binaries and source plus binaries.

Tuesday, March 16, 2004 5:50:55 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [3] Tracked by:
"texas holdem poker online game" (texas holdem poker online game) [Trackback]

Thursday, March 18, 2004 9:31:23 PM (W. Europe Standard Time, UTC+01:00)
CoreClasses.cs seems to be missing from CVS.
Zoltan Varga
Friday, March 19, 2004 4:20:44 PM (W. Europe Standard Time, UTC+01:00)
Thanks. I'll fix it when I check my next change set.
Tuesday, July 22, 2008 1:28:15 AM (W. Europe Daylight Time, UTC+02:00)
Hi Jeroen,

I don't know if you have e-mail notifications for comments that happen for old posts but I will try anyway.

We were profiling IKVM performance and noticed that in some scenarios IKVM benchmark was much slower than identical code on Java and C#.

I've looked at MSIL bytecode and noticed extra operations that contributed to the slow down. It seems that any operations involving double numbers had extra 'volatile' ops.

Then I saw IKVMC patch that adds generator.Emit(OpCodes.Volatile) when accessing double and float types in compiler.cs.

Could you please provide more details why this patch is needed? Our benchmark seems to work fine and much faster if we get rid of this.

Best Regards,
Andy Malakov
Andy Malakov
Comments are closed.