[ https://issues.apache.org/jira/browse/LUCENE-3867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13235494#comment-13235494 ]
Dawid Weiss commented on LUCENE-3867: ------------------------------------- I've been experimenting a bit with the new code. Field offsets for three classes in a hierarchy with unalignable fields (byte, long combinations at all levels). Note unaligned reordering of byte field in JRockit - nice. {noformat} JVM: [JVM: HotSpot, Sun Microsystems Inc., 1.6.0_31] (compressed OOPs) @12 4 Super.superByte @16 8 Super.subLong @24 8 Sub.subLong @32 4 Sub.subByte @36 4 SubSub.subSubByte @40 8 SubSub.subSubLong @48 sizeOf(SubSub.class instance) JVM: [JVM: HotSpot, Sun Microsystems Inc., 1.6.0_31] (normal OOPs) @16 8 Super.subLong @24 8 Super.superByte @32 8 Sub.subLong @40 8 Sub.subByte @48 8 SubSub.subSubLong @56 8 SubSub.subSubByte @64 sizeOf(SubSub.class instance) JVM: [JVM: J9, IBM Corporation, 1.6.0] @24 8 Super.subLong @32 4 Super.superByte @36 4 Sub.subByte @40 8 Sub.subLong @48 8 SubSub.subSubLong @56 8 SubSub.subSubByte @64 sizeOf(SubSub.class instance) JVM: [JVM: JRockit, Oracle Corporation, 1.6.0_26] (64-bit JVM!) @ 8 8 Super.subLong @16 1 Super.superByte @17 7 Sub.subByte @24 8 Sub.subLong @32 8 SubSub.subSubLong @40 8 SubSub.subSubByte @48 sizeOf(SubSub.class instance) {noformat} > RamUsageEstimator.NUM_BYTES_ARRAY_HEADER and other constants are incorrect > -------------------------------------------------------------------------- > > Key: LUCENE-3867 > URL: https://issues.apache.org/jira/browse/LUCENE-3867 > Project: Lucene - Java > Issue Type: Bug > Components: core/index > Reporter: Shai Erera > Assignee: Uwe Schindler > Priority: Trivial > Fix For: 3.6, 4.0 > > Attachments: LUCENE-3867-3.x.patch, LUCENE-3867-compressedOops.patch, > LUCENE-3867.patch, LUCENE-3867.patch, LUCENE-3867.patch, LUCENE-3867.patch, > LUCENE-3867.patch, LUCENE-3867.patch, LUCENE-3867.patch, LUCENE-3867.patch, > LUCENE-3867.patch, LUCENE-3867.patch, LUCENE-3867.patch, LUCENE-3867.patch, > LUCENE-3867.patch, LUCENE-3867.patch, LUCENE-3867.patch, LUCENE-3867.patch, > LUCENE-3867.patch > > > RamUsageEstimator.NUM_BYTES_ARRAY_HEADER is computed like that: > NUM_BYTES_OBJECT_HEADER + NUM_BYTES_INT + NUM_BYTES_OBJECT_REF. The > NUM_BYTES_OBJECT_REF part should not be included, at least not according to > this page: http://www.javamex.com/tutorials/memory/array_memory_usage.shtml > {quote} > A single-dimension array is a single object. As expected, the array has the > usual object header. However, this object head is 12 bytes to accommodate a > four-byte array length. Then comes the actual array data which, as you might > expect, consists of the number of elements multiplied by the number of bytes > required for one element, depending on its type. The memory usage for one > element is 4 bytes for an object reference ... > {quote} > While on it, I wrote a sizeOf(String) impl, and I wonder how do people feel > about including such helper methods in RUE, as static, stateless, methods? > It's not perfect, there's some room for improvement I'm sure, here it is: > {code} > /** > * Computes the approximate size of a String object. Note that if this > object > * is also referenced by another object, you should add > * {@link RamUsageEstimator#NUM_BYTES_OBJECT_REF} to the result of this > * method. > */ > public static int sizeOf(String str) { > return 2 * str.length() + 6 // chars + additional safeness for > arrays alignment > + 3 * RamUsageEstimator.NUM_BYTES_INT // String > maintains 3 integers > + RamUsageEstimator.NUM_BYTES_ARRAY_HEADER // > char[] array > + RamUsageEstimator.NUM_BYTES_OBJECT_HEADER; // > String object > } > {code} > If people are not against it, I'd like to also add sizeOf(int[] / byte[] / > long[] / double[] ... and String[]). -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org