mirror of https://github.com/apache/lucene.git
LUCENE-6795: Improve RamUsageTester in trunk
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1702693 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
b8a213ccf7
commit
01adad8899
|
@ -188,31 +188,33 @@ public final class RamUsageTester {
|
|||
*/
|
||||
@SuppressForbidden(reason = "We need to access private fields of measured objects.")
|
||||
private static ClassCache createCacheEntry(final Class<?> clazz) {
|
||||
ClassCache cachedInfo;
|
||||
long shallowInstanceSize = RamUsageEstimator.NUM_BYTES_OBJECT_HEADER;
|
||||
final ArrayList<Field> referenceFields = new ArrayList<>(32);
|
||||
for (Class<?> c = clazz; c != null; c = c.getSuperclass()) {
|
||||
if (c == Class.class) {
|
||||
// prevent inspection of Class' fields, throws SecurityException in Java 9!
|
||||
continue;
|
||||
}
|
||||
final Field[] fields = c.getDeclaredFields();
|
||||
for (final Field f : fields) {
|
||||
if (!Modifier.isStatic(f.getModifiers())) {
|
||||
shallowInstanceSize = RamUsageEstimator.adjustForField(shallowInstanceSize, f);
|
||||
|
||||
if (!f.getType().isPrimitive()) {
|
||||
final PrivilegedAction<Field> act = () -> { f.setAccessible(true); return f; };
|
||||
referenceFields.add(AccessController.doPrivileged(act));
|
||||
return AccessController.doPrivileged((PrivilegedAction<ClassCache>) () -> {
|
||||
ClassCache cachedInfo;
|
||||
long shallowInstanceSize = RamUsageEstimator.NUM_BYTES_OBJECT_HEADER;
|
||||
final ArrayList<Field> referenceFields = new ArrayList<>(32);
|
||||
for (Class<?> c = clazz; c != null; c = c.getSuperclass()) {
|
||||
if (c == Class.class) {
|
||||
// prevent inspection of Class' fields, throws SecurityException in Java 9!
|
||||
continue;
|
||||
}
|
||||
final Field[] fields = c.getDeclaredFields();
|
||||
for (final Field f : fields) {
|
||||
if (!Modifier.isStatic(f.getModifiers())) {
|
||||
shallowInstanceSize = RamUsageEstimator.adjustForField(shallowInstanceSize, f);
|
||||
|
||||
if (!f.getType().isPrimitive()) {
|
||||
f.setAccessible(true);
|
||||
referenceFields.add(f);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cachedInfo = new ClassCache(
|
||||
RamUsageEstimator.alignObjectSize(shallowInstanceSize),
|
||||
referenceFields.toArray(new Field[referenceFields.size()]));
|
||||
return cachedInfo;
|
||||
|
||||
cachedInfo = new ClassCache(
|
||||
RamUsageEstimator.alignObjectSize(shallowInstanceSize),
|
||||
referenceFields.toArray(new Field[referenceFields.size()]));
|
||||
return cachedInfo;
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue