You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2015/09/13 03:45:38 UTC

svn commit: r1702693 - /lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/util/RamUsageTester.java

Author: uschindler
Date: Sun Sep 13 01:45:37 2015
New Revision: 1702693

URL: http://svn.apache.org/r1702693
Log:
LUCENE-6795: Improve RamUsageTester in trunk

Modified:
    lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/util/RamUsageTester.java

Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/util/RamUsageTester.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/util/RamUsageTester.java?rev=1702693&r1=1702692&r2=1702693&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/util/RamUsageTester.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/util/RamUsageTester.java Sun Sep 13 01:45:37 2015
@@ -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;
+    });
   }
 
 }