From 01adad8899f027913e2b4a579262b2237e460037 Mon Sep 17 00:00:00 2001 From: Uwe Schindler Date: Sun, 13 Sep 2015 01:45:37 +0000 Subject: [PATCH] LUCENE-6795: Improve RamUsageTester in trunk git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1702693 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/lucene/util/RamUsageTester.java | 46 ++++++++++--------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/lucene/test-framework/src/java/org/apache/lucene/util/RamUsageTester.java b/lucene/test-framework/src/java/org/apache/lucene/util/RamUsageTester.java index 561f258c0b8..5da98d1cdf5 100644 --- a/lucene/test-framework/src/java/org/apache/lucene/util/RamUsageTester.java +++ b/lucene/test-framework/src/java/org/apache/lucene/util/RamUsageTester.java @@ -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 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 act = () -> { f.setAccessible(true); return f; }; - referenceFields.add(AccessController.doPrivileged(act)); + return AccessController.doPrivileged((PrivilegedAction) () -> { + ClassCache cachedInfo; + long shallowInstanceSize = RamUsageEstimator.NUM_BYTES_OBJECT_HEADER; + final ArrayList 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; + }); } }