public DefaultSizeOfEngine(long maxObjectGraphSize, long maxObjectSize) { this.maxObjectGraphSize = maxObjectGraphSize; this.maxObjectSize = maxObjectSize; this.sizeOf = SizeOf.newInstance(new SizeOfFilterSource(true).getFilters()); this.onHeapKeyOffset = sizeOf.deepSizeOf(new CopiedOnHeapKey<>(new Object(), new IdentityCopier<>())); this.chmTreeBinOffset = sizeOf.deepSizeOf(ConcurrentHashMap.FAKE_TREE_BIN); }
@Override public <K, V> long sizeof(K key, Store.ValueHolder<V> holder) throws LimitExceededException { try { return sizeOf.deepSizeOf(new EhcacheVisitorListener(maxObjectGraphSize, maxObjectSize), key, holder) + this.chmTreeBinOffset + this.onHeapKeyOffset; } catch (VisitorListenerException e) { throw new LimitExceededException(e.getMessage()); } }
@Test public void testCompute() throws StoreAccessException { OnHeapStoreForTests<String, String> store = newStore(); store.getAndCompute(KEY, (a, b) -> VALUE); assertThat(store.getCurrentUsageInBytes(), is(SIZE_OF_KEY_VALUE_PAIR)); final String replace = "Replace the original value"; long delta = SIZEOF.deepSizeOf(replace) - SIZEOF.deepSizeOf(VALUE); store.getAndCompute(KEY, (a, b) -> replace); assertThat(store.getCurrentUsageInBytes(), is(SIZE_OF_KEY_VALUE_PAIR + delta)); }
@Test public void testPutUpdate() throws StoreAccessException { OnHeapStoreForTests<String, String> store = newStore(); store.put(KEY, VALUE); String otherValue = "otherValue"; store.put(KEY, otherValue); long delta = SIZEOF.deepSizeOf(otherValue) - SIZEOF.deepSizeOf(VALUE); assertThat(store.getCurrentUsageInBytes(), is(SIZE_OF_KEY_VALUE_PAIR + delta)); }
@Test public void testReplace() throws StoreAccessException { OnHeapStoreForTests<String, String> store = newStore(); store.put(KEY, VALUE); long beforeReplace = store.getCurrentUsageInBytes(); store.replace("Another Key", "Another Value"); assertThat(store.getCurrentUsageInBytes(), is(beforeReplace)); String toReplace = "Replaced Value"; store.replace(KEY, toReplace); long delta = SIZEOF.deepSizeOf(toReplace) - SIZEOF.deepSizeOf(VALUE); long afterReplace = store.getCurrentUsageInBytes(); assertThat(afterReplace - beforeReplace, is(delta)); //when delta is negative store.replace(KEY, VALUE); assertThat(afterReplace - store.getCurrentUsageInBytes(), is(delta)); }
@Test public void testReplaceThreeArg() throws StoreAccessException { OnHeapStoreForTests<String, String> store = newStore(); store.put(KEY, VALUE); long beforeReplace = store.getCurrentUsageInBytes(); store.replace(KEY, "Another Value", VALUE); assertThat(store.getCurrentUsageInBytes(), is(beforeReplace)); String toReplace = "Replaced Value"; store.replace(KEY, VALUE, toReplace); long delta = SIZEOF.deepSizeOf(toReplace) - SIZEOF.deepSizeOf(VALUE); long afterReplace = store.getCurrentUsageInBytes(); assertThat(afterReplace - beforeReplace, is(delta)); //when delta is negative store.replace(KEY, toReplace, VALUE); assertThat(afterReplace - store.getCurrentUsageInBytes(), is(delta)); }
@Override public Long getValue() { final Object objectOfInterest = toBeMeasuredObject.get(); return (objectOfInterest != null) ? sizeOf.deepSizeOf(objectOfInterest) : 0L; } };
public DefaultSizeOfEngine(long maxObjectGraphSize, long maxObjectSize) { this.maxObjectGraphSize = maxObjectGraphSize; this.maxObjectSize = maxObjectSize; this.sizeOf = SizeOf.newInstance(new SizeOfFilterSource(true).getFilters()); this.onHeapKeyOffset = sizeOf.deepSizeOf(new CopiedOnHeapKey<>(new Object(), new IdentityCopier<>())); this.chmTreeBinOffset = sizeOf.deepSizeOf(ConcurrentHashMap.FAKE_TREE_BIN); }
@Override public <K, V> long sizeof(K key, Store.ValueHolder<V> holder) throws LimitExceededException { try { return sizeOf.deepSizeOf(new EhcacheVisitorListener(maxObjectGraphSize, maxObjectSize), key, holder) + this.chmTreeBinOffset + this.onHeapKeyOffset; } catch (VisitorListenerException e) { throw new LimitExceededException(e.getMessage()); } }
long sizeAfterCreation = sizeOf.deepSizeOf(table); rt.getGarbageCollector().runRuntimeGC(); assertThat(sizeAfterCreation).isLessThanOrEqualTo(sizeOf.deepSizeOf(table)); long sizeOfTableAfterWrite = sizeOf.deepSizeOf(table); rt.getParameters().setRuntimeGCPeriod(Duration.ofMinutes(0)); rt.getGarbageCollector().runRuntimeGC(); long sizeOfTableAfterGc = sizeOf.deepSizeOf(table); final int numOfSetsStreamSets = 3; assertThat(sizeOfTableAfterGc)