[ https://issues.apache.org/jira/browse/HBASE-17896?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15962575#comment-15962575 ]
Yu Li commented on HBASE-17896: ------------------------------- It seems to me we should also update the DEEP_OVERHEAD after HBASE-17081 splits {{size}} into {{dataSize}} and {{heapSize}} {code} public final static long DEEP_OVERHEAD = FIXED_OVERHEAD + ClassSize.ATOMIC_REFERENCE - + ClassSize.CELL_SET + ClassSize.ATOMIC_LONG + ClassSize.TIMERANGE_TRACKER; + + ClassSize.CELL_SET + 2 * ClassSize.ATOMIC_LONG + ClassSize.TIMERANGE_TRACKER; {code} and relatively, we should update the test case in TestHeapSize {noformat} --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/TestHeapSize.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/TestHeapSize.java @@ -344,7 +344,7 @@ public class TestHeapSize { cl = Segment.class; actual = Segment.DEEP_OVERHEAD; expected = ClassSize.estimateBase(cl, false); - expected += ClassSize.estimateBase(AtomicLong.class, false); + expected += 2 * ClassSize.estimateBase(AtomicLong.class, false); expected += ClassSize.estimateBase(AtomicReference.class, false); expected += ClassSize.estimateBase(CellSet.class, false); expected += ClassSize.estimateBase(TimeRangeTracker.class, false); @@ -361,7 +361,7 @@ public class TestHeapSize { cl = MutableSegment.class; actual = MutableSegment.DEEP_OVERHEAD; expected = ClassSize.estimateBase(cl, false); - expected += ClassSize.estimateBase(AtomicLong.class, false); + expected += 2 * ClassSize.estimateBase(AtomicLong.class, false); expected += ClassSize.estimateBase(AtomicReference.class, false); expected += ClassSize.estimateBase(CellSet.class, false); expected += ClassSize.estimateBase(TimeRangeTracker.class, false); @@ -380,7 +380,7 @@ public class TestHeapSize { cl = ImmutableSegment.class; actual = ImmutableSegment.DEEP_OVERHEAD_CSLM; expected = ClassSize.estimateBase(cl, false); - expected += ClassSize.estimateBase(AtomicLong.class, false); + expected += 2 * ClassSize.estimateBase(AtomicLong.class, false); expected += ClassSize.estimateBase(AtomicReference.class, false); expected += ClassSize.estimateBase(CellSet.class, false); expected += ClassSize.estimateBase(TimeRangeTracker.class, false); @@ -398,7 +398,7 @@ public class TestHeapSize { } actual = ImmutableSegment.DEEP_OVERHEAD_CAM; expected = ClassSize.estimateBase(cl, false); - expected += ClassSize.estimateBase(AtomicLong.class, false); + expected += 2 * ClassSize.estimateBase(AtomicLong.class, false); expected += ClassSize.estimateBase(AtomicReference.class, false); expected += ClassSize.estimateBase(CellSet.class, false); expected += ClassSize.estimateBase(TimeRangeTracker.class, false); {noformat} Actually it confuses me why we should check {{DEAP_OVERHEAD}} for memstore and segment while all others (HStore, HRegion, etc.) only check {{FIXED_OVERHEAD}}, could you explain here sir [~anoop.hbase]? Thanks. And mind explain the below change [~chia7712]? Thanks. {code} - assertEquals(ClassSize.OBJECT + 4, ClassSize.ARRAY); + if (ClassSize.useUnsafeLayout()) { + assertEquals(ClassSize.OBJECT + 4, ClassSize.ARRAY); + } else { + assertEquals(ClassSize.OBJECT + 8, ClassSize.ARRAY); + } {code} > The FIXED_OVERHEAD of Segment is incorrect > ------------------------------------------ > > Key: HBASE-17896 > URL: https://issues.apache.org/jira/browse/HBASE-17896 > Project: HBase > Issue Type: Sub-task > Affects Versions: 2.0.0 > Reporter: Chia-Ping Tsai > Assignee: Chia-Ping Tsai > Priority: Minor > Fix For: 2.0.0 > > Attachments: HBASE-17896.v0.patch > > > {noformat} > 5 * ClassSize.REFERENCE // cellSet, comparator, memStoreLAB, size, > timeRangeTracker > {noformat} > In fact, the Segment has 6 references. > # cellSet > # comparator > # memStoreLAB > # dataSize > # heapSize > # timeRangeTracker -- This message was sent by Atlassian JIRA (v6.3.15#6346)