review (S) for 6911204: generated adapters with large signatures can fill up the code cache

John Rose John.Rose at Sun.COM
Wed Jan 13 20:48:45 PST 2010

On Jan 13, 2010, at 4:09 PM, Tom Rodriguez wrote:


It looks good.

It would be good to include a comment about size statistics, so the future reader can get an idea about how common the compressed and uncompressed cases are.

You might put the union first, before _length:

+   union {
+     signed char  _compact[12];
+     intptr_t* _fingerprint;
+   } _value;
+   int _length; // A negative length indicates that the _value is a C
+                // heap allocated array.

That way on LP64 systems you won't get 4 dead bytes.

This expression gave me the willies, even though it's correct.  It's best to parenthesize such things routinely:
+       hash = hash << 7 ^ value(i);

If it were me, I'd compress the series of reg values down to a series of bytes using CompressedWriteStream::write_signed_int, and just do hashes and equality checks on the actual compressed bytes.  There'd be no need for value().  The bytes would never be decoded except for debugging routines like as_string.  The union trick would be the same, except that the pointer would point to an array of chars.  The actual equality comparisons could be done with memcmp.

But it doesn't make a big difference, since this isn't hot code.

-- John

More information about the hotspot-compiler-dev mailing list