/** * Walk the graph and call into the "visitor" * * @param root the roots of the objects (a shared graph will only be visited once) * @return the sum of all Visitor#visit returned values */ long walk(Object... root) { return walk(null, root); }
nullSafeAdd(toVisit, object); if (traversalDebugMessage != null && object != null) { traversalDebugMessage.append(object.getClass().getName()) if (!byPassIfFlyweight(ref) && shouldWalkClass(refClass)) { if (refClass.isArray() && !refClass.getComponentType().isPrimitive()) { for (int i = 0; i < Array.getLength(ref); i++) { nullSafeAdd(toVisit, Array.get(ref, i)); for (Field field : getFilteredFields(refClass)) { try { nullSafeAdd(toVisit, field.get(ref)); } catch (IllegalAccessException ex) { throw new RuntimeException(ex);
/** * Builds a new SizeOf that will filter fields according to the provided filter * * @param fieldFilter The filter to apply * @param caching whether to cache reflected fields * @param bypassFlyweight whether "Flyweight Objects" are to be ignored * @see org.ehcache.sizeof.filters.SizeOfFilter */ public SizeOf(SizeOfFilter fieldFilter, boolean caching, boolean bypassFlyweight) { ObjectGraphWalker.Visitor visitor; if (caching) { visitor = new CachingSizeOfVisitor(); } else { visitor = new SizeOfVisitor(); } this.walker = new ObjectGraphWalker(visitor, fieldFilter, bypassFlyweight); }
/** * Returns the filtered fields for a particular type * * @param refClass the type * @return A collection of fields to be visited */ private Collection<Field> getFilteredFields(Class<?> refClass) { SoftReference<Collection<Field>> ref = fieldCache.get(refClass); Collection<Field> fieldList = ref != null ? ref.get() : null; if (fieldList != null) { return fieldList; } else { Collection<Field> result; result = sizeOfFilter.filterFields(refClass, getAllFields(refClass)); if (USE_VERBOSE_DEBUG_LOGGING && LOG.isDebugEnabled()) { for (Field field : result) { if (Modifier.isTransient(field.getModifiers())) { LOG.debug("SizeOf engine walking transient field '{}' of class {}", field.getName(), refClass.getName()); } } } fieldCache.put(refClass, new SoftReference<Collection<Field>>(result)); return result; } }
nullSafeAdd(toVisit, object); if (traversalDebugMessage != null && object != null) { traversalDebugMessage.append(object.getClass().getName()) if (!byPassIfFlyweight(ref) && shouldWalkClass(refClass)) { if (refClass.isArray() && !refClass.getComponentType().isPrimitive()) { for (int i = 0; i < Array.getLength(ref); i++) { nullSafeAdd(toVisit, Array.get(ref, i)); for (Field field : getFilteredFields(refClass)) { try { nullSafeAdd(toVisit, field.get(ref)); } catch (IllegalAccessException ex) { throw new RuntimeException(ex);
/** * Builds a new SizeOf that will filter fields according to the provided filter * * @param fieldFilter The filter to apply * @param caching whether to cache reflected fields * @param bypassFlyweight whether "Flyweight Objects" are to be ignored * @see org.ehcache.sizeof.filters.SizeOfFilter */ public SizeOf(SizeOfFilter fieldFilter, boolean caching, boolean bypassFlyweight) { ObjectGraphWalker.Visitor visitor; if (caching) { visitor = new CachingSizeOfVisitor(); } else { visitor = new SizeOfVisitor(); } this.walker = new ObjectGraphWalker(visitor, fieldFilter, bypassFlyweight); }
/** * Returns the filtered fields for a particular type * * @param refClass the type * @return A collection of fields to be visited */ private Collection<Field> getFilteredFields(Class<?> refClass) { SoftReference<Collection<Field>> ref = fieldCache.get(refClass); Collection<Field> fieldList = ref != null ? ref.get() : null; if (fieldList != null) { return fieldList; } else { Collection<Field> result; result = sizeOfFilter.filterFields(refClass, getAllFields(refClass)); if (USE_VERBOSE_DEBUG_LOGGING && LOG.isDebugEnabled()) { for (Field field : result) { if (Modifier.isTransient(field.getModifiers())) { LOG.debug("SizeOf engine walking transient field '{}' of class {}", field.getName(), refClass.getName()); } } } fieldCache.put(refClass, new SoftReference<>(result)); return result; } }
/** * Walk the graph and call into the "visitor" * * @param root the roots of the objects (a shared graph will only be visited once) * @return the sum of all Visitor#visit returned values */ long walk(Object... root) { return walk(null, root); }
/** * Measures the size in memory (heap) of the objects passed in, walking their graph down * Any overlap of the graphs being passed in will be recognized and only measured once * * @param listener A listener to visited objects * @param obj the root objects of the graphs to measure * @return the total size in bytes for these objects * @see #sizeOf(Object) */ public long deepSizeOf(VisitorListener listener, Object... obj) { return walker.walk(listener, obj); }
/** * Measures the size in memory (heap) of the objects passed in, walking their graph down * Any overlap of the graphs being passed in will be recognized and only measured once * * @param listener A listener to visited objects * @param obj the root objects of the graphs to measure * @return the total size in bytes for these objects * @see #sizeOf(Object) */ public long deepSizeOf(VisitorListener listener, Object... obj) { return walker.walk(listener, obj); }
public long deepSizeOf(Object... obj) { return walker.walk(null, obj); }
public long deepSizeOf(Object... obj) { return walker.walk(null, obj); }