[ https://issues.apache.org/jira/browse/LUCENE-3867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13232024#comment-13232024 ]
Uwe Schindler commented on LUCENE-3867: --------------------------------------- bq. Reflection don't need to cost you much if you make a cache along the way. Retrieving an object's class is virtually zero cost so this would make it very efficient and the number of classes in the system is much smaller than the number of objects so it shouldn't be a problem. Would be like the reflection cache in AttributeSource :-) But yes I was also thinking about a second IdentityHashMap<Class<?>,Long> along the way. bq. I can't imagine a situation where this wouldn't be the case although an assertion here would be nice just to make sure we're not assuming something that isn't true. Thats already checked in the test, who has 2 subclasses, one with no additional fields (size must be identical) and one with 2 more fields (should be >=). > 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: Shai Erera > Priority: Trivial > Fix For: 3.6, 4.0 > > Attachments: 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 > > > 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