1 /*
  2  * Copyright (c) 2020, 2022, Red Hat, Inc. All rights reserved.
  3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4  *
  5  * This code is free software; you can redistribute it and/or modify it
  6  * under the terms of the GNU General Public License version 2 only, as
  7  * published by the Free Software Foundation.
  8  *
  9  * This code is distributed in the hope that it will be useful, but WITHOUT
 10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 12  * version 2 for more details (a copy is included in the LICENSE file that
 13  * accompanied this code).
 14  *
 15  * You should have received a copy of the GNU General Public License version
 16  * 2 along with this work; if not, write to the Free Software Foundation,
 17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 18  *
 19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 20  * or visit www.oracle.com if you need additional information or have any
 21  * questions.
 22  */
 23 
 24 /*
 25  * @test
 26  * @bug 8253525
 27  * @summary Test for fInst.getObjectSize with 32-bit compressed oops
 28  * @library /test/lib
 29  *
 30  * @build jdk.test.whitebox.WhiteBox
 31  * @run build GetObjectSizeIntrinsicsTest
 32  * @run shell MakeJAR.sh basicAgent
 33  *
 34  * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox
 35  *
 36  * @run main/othervm -Xmx128m
 37  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
 38  *                   -Xint
 39  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
 40  *
 41  * @run main/othervm -Xmx128m
 42  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
 43  *                   -Xbatch -XX:TieredStopAtLevel=1
 44  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
 45  *
 46  * @run main/othervm -Xmx128m
 47  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
 48  *                   -Xbatch -XX:-TieredCompilation
 49  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
 50  */
 51 
 52 /*
 53  * @test
 54  * @summary Test for fInst.getObjectSize with zero-based compressed oops
 55  * @library /test/lib
 56  * @requires vm.bits == 64
 57  *
 58  * @build jdk.test.whitebox.WhiteBox
 59  * @run build GetObjectSizeIntrinsicsTest
 60  * @run shell MakeJAR.sh basicAgent
 61  *
 62  * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox
 63  *
 64  * @run main/othervm -Xmx4g
 65  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
 66  *                   -Xint
 67  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
 68  *
 69  * @run main/othervm -Xmx4g
 70  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
 71  *                   -Xbatch -XX:TieredStopAtLevel=1
 72  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
 73  *
 74  * @run main/othervm -Xmx4g
 75  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
 76  *                   -Xbatch -XX:-TieredCompilation
 77  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
 78  */
 79 
 80 /*
 81  * @test
 82  * @summary Test for fInst.getObjectSize without compressed oops
 83  * @library /test/lib
 84  * @requires vm.bits == 64
 85  *
 86  * @build jdk.test.whitebox.WhiteBox
 87  * @run build GetObjectSizeIntrinsicsTest
 88  * @run shell MakeJAR.sh basicAgent
 89  *
 90  * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox
 91  *
 92  * @run main/othervm -Xmx128m -XX:-UseCompressedOops
 93  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
 94  *                   -Xint
 95  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
 96  *
 97  * @run main/othervm -Xmx128m -XX:-UseCompressedOops
 98  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
 99  *                   -Xbatch -XX:TieredStopAtLevel=1
100  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
101  *
102  * @run main/othervm -Xmx128m -XX:-UseCompressedOops
103  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
104  *                   -Xbatch -XX:-TieredCompilation
105  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
106  */
107 
108 /*
109  * @test
110  * @summary Test for fInst.getObjectSize with 32-bit compressed oops
111  * @library /test/lib
112  * @requires vm.debug
113  *
114  * @build jdk.test.whitebox.WhiteBox
115  * @run build GetObjectSizeIntrinsicsTest
116  * @run shell MakeJAR.sh basicAgent
117  *
118  * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox
119  *
120  * @run main/othervm -Xmx128m
121  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
122  *                   -XX:FastAllocateSizeLimit=0
123  *                   -Xint
124  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
125  *
126  * @run main/othervm -Xmx128m
127  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
128  *                   -XX:FastAllocateSizeLimit=0
129  *                   -Xbatch -XX:TieredStopAtLevel=1
130  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
131  *
132  * @run main/othervm -Xmx128m
133  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
134  *                   -XX:FastAllocateSizeLimit=0
135  *                   -Xbatch -XX:-TieredCompilation
136  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
137  */
138 
139 /*
140  * @test
141  * @summary Test for fInst.getObjectSize with zero-based compressed oops
142  * @library /test/lib
143  * @requires vm.bits == 64
144  * @requires vm.debug
145  *
146  * @build jdk.test.whitebox.WhiteBox
147  * @run build GetObjectSizeIntrinsicsTest
148  * @run shell MakeJAR.sh basicAgent
149  *
150  * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox
151  *
152  * @run main/othervm -Xmx4g
153  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
154  *                   -XX:FastAllocateSizeLimit=0
155  *                   -Xint
156  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
157  *
158  * @run main/othervm -Xmx4g
159  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
160  *                   -XX:FastAllocateSizeLimit=0
161  *                   -Xbatch -XX:TieredStopAtLevel=1
162  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
163  *
164  * @run main/othervm -Xmx4g
165  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
166  *                   -XX:FastAllocateSizeLimit=0
167  *                   -Xbatch -XX:-TieredCompilation
168  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
169  */
170 
171 /*
172  * @test
173  * @summary Test for fInst.getObjectSize without compressed oops
174  * @library /test/lib
175  * @requires vm.bits == 64
176  * @requires vm.debug
177  *
178  * @build jdk.test.whitebox.WhiteBox
179  * @run build GetObjectSizeIntrinsicsTest
180  * @run shell MakeJAR.sh basicAgent
181  *
182  * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox
183  *
184  * @run main/othervm -Xmx128m -XX:-UseCompressedOops
185  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
186  *                   -XX:FastAllocateSizeLimit=0
187  *                   -Xint
188  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
189  *
190  * @run main/othervm -Xmx128m -XX:-UseCompressedOops
191  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
192  *                   -XX:FastAllocateSizeLimit=0
193  *                   -Xbatch -XX:TieredStopAtLevel=1
194  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
195  *
196  * @run main/othervm -Xmx128m -XX:-UseCompressedOops
197  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
198  *                   -XX:FastAllocateSizeLimit=0
199  *                   -Xbatch -XX:-TieredCompilation
200  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
201  */
202 
203 /*
204  * @test
205  * @summary Test for fInst.getObjectSize with 32-bit compressed oops
206  * @library /test/lib
207  * @requires vm.bits == 64
208  * @requires vm.debug
209  *
210  * @build jdk.test.whitebox.WhiteBox
211  * @run build GetObjectSizeIntrinsicsTest
212  * @run shell MakeJAR.sh basicAgent
213  *
214  * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox
215  *
216  * @run main/othervm -Xmx128m
217  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
218  *                   -XX:ObjectAlignmentInBytes=32
219  *                   -Xint
220  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
221  *
222  * @run main/othervm -Xmx128m
223  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
224  *                   -XX:ObjectAlignmentInBytes=32
225  *                   -Xbatch -XX:TieredStopAtLevel=1
226  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
227  *
228  * @run main/othervm -Xmx128m
229  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
230  *                   -XX:ObjectAlignmentInBytes=32
231  *                   -Xbatch -XX:-TieredCompilation
232  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
233  */
234 
235 /*
236  * @test
237  * @summary Test for fInst.getObjectSize with zero-based compressed oops
238  * @library /test/lib
239  * @requires vm.bits == 64
240  * @requires vm.debug
241  *
242  * @build jdk.test.whitebox.WhiteBox
243  * @run build GetObjectSizeIntrinsicsTest
244  * @run shell MakeJAR.sh basicAgent
245  *
246  * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox
247  *
248  * @run main/othervm -Xmx4g
249  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
250  *                   -XX:ObjectAlignmentInBytes=32
251  *                   -Xint
252  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
253  *
254  * @run main/othervm -Xmx4g
255  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
256  *                   -XX:ObjectAlignmentInBytes=32
257  *                   -Xbatch -XX:TieredStopAtLevel=1
258  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
259  *
260  * @run main/othervm -Xmx4g
261  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
262  *                   -XX:ObjectAlignmentInBytes=32
263  *                   -Xbatch -XX:-TieredCompilation
264  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest
265  */
266 
267 /*
268  * @test
269  * @summary Test for fInst.getObjectSize with large arrays
270  * @library /test/lib
271  * @requires vm.bits == 64
272  * @requires vm.debug
273  * @requires os.maxMemory >= 10G
274  *
275  * @build jdk.test.whitebox.WhiteBox
276  * @run build GetObjectSizeIntrinsicsTest
277  * @run shell MakeJAR.sh basicAgent
278  *
279  * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox
280  *
281  * @run main/othervm/timeout=300 -Xmx8g
282  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
283  *                   -Xint
284  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest large
285  *
286  * @run main/othervm/timeout=240 -Xmx8g
287  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
288  *                   -Xbatch -XX:TieredStopAtLevel=1
289  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest large
290  *
291  * @run main/othervm/timeout=180 -Xmx8g
292  *                   -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:+WhiteBoxAPI -Xbootclasspath/a:.
293  *                   -Xbatch -XX:-TieredCompilation
294  *                   -javaagent:basicAgent.jar GetObjectSizeIntrinsicsTest GetObjectSizeIntrinsicsTest large
295  */
296 
297 import java.util.*;
298 
299 import jdk.test.lib.Platform;
300 import jdk.test.whitebox.WhiteBox;
301 
302 public class GetObjectSizeIntrinsicsTest extends ASimpleInstrumentationTestCase {
303 
304     static final Boolean COMPRESSED_OOPS = WhiteBox.getWhiteBox().getBooleanVMFlag("UseCompressedOops");
305     static final long REF_SIZE = (COMPRESSED_OOPS == null || COMPRESSED_OOPS == true) ? 4 : 8;
306 
307     static final Long align = WhiteBox.getWhiteBox().getIntxVMFlag("ObjectAlignmentInBytes");
308     static final int OBJ_ALIGN = (align == null ? 8 : align.intValue());
309 
310     static final int SMALL_ARRAY_SIZE = 1024;
311 
312     // These should overflow 4G size boundary
313     static final int LARGE_INT_ARRAY_SIZE = 1024*1024*1024 + 1024;
314     static final int LARGE_OBJ_ARRAY_SIZE = (4096/(int)REF_SIZE)*1024*1024 + 1024;
315 
316     final String mode;
317 
318     public GetObjectSizeIntrinsicsTest(String name, String mode) {
319         super(name);
320         this.mode = mode;
321     }
322 
323     public static void main(String[] args)throws Throwable {
324         new GetObjectSizeIntrinsicsTest(args[0], (args.length >= 2 ? args[1] : "")).runTest();
325     }
326 
327     public static final int ITERS = 200_000;
328 
329     public static void assertEquals(long expected, long actual) {
330         if (expected != actual) {
331             throw new IllegalStateException(
332                "Error: expected: " + expected + " (" + Long.toHexString(expected) +
333                 "), actual: " + actual + " (" + Long.toHexString(actual) + ")");
334         }
335     }
336 
337     public static void assertNotEquals(long notExpected, long actual) {
338         if (notExpected == actual) {
339             throw new IllegalStateException(
340                "Error: not expected: " + notExpected + " (" + Long.toHexString(notExpected) +
341                 "), actual: " + actual + " (" + Long.toHexString(actual) + ")");
342         }
343     }
344 
345     public static void assertFail() {
346         throw new IllegalStateException("Should not be here");
347     }
348 
349     protected final void doRunTest() throws Throwable {
350         testSize_newObject();
351         testSize_localObject();
352         testSize_fieldObject();
353 
354         testSize_newSmallIntArray();
355         testSize_localSmallIntArray();
356         testSize_fieldSmallIntArray();
357 
358         testSize_newSmallObjArray();
359         testSize_localSmallObjArray();
360         testSize_fieldSmallObjArray();
361 
362         if (mode.equals("large")) {
363             testSize_localLargeIntArray();
364             testSize_localLargeObjArray();
365         }
366 
367         testNulls();
368     }
369 
370     private static long roundUp(long v, long a) {
371         return (v + a - 1) / a * a;
372     }
373 
374     private void testSize_newObject() {
375         long expected = roundUp(Platform.is64bit() ? 16 : 8, OBJ_ALIGN);
376         for (int c = 0; c < ITERS; c++) {
377             assertEquals(expected, fInst.getObjectSize(new Object()));
378         }
379     }
380 
381     private void testSize_localObject() {
382         long expected = roundUp(Platform.is64bit() ? 16 : 8, OBJ_ALIGN);
383         Object o = new Object();
384         for (int c = 0; c < ITERS; c++) {
385             assertEquals(expected, fInst.getObjectSize(o));
386         }
387     }
388 
389     static Object staticO = new Object();
390 
391     private void testSize_fieldObject() {
392         long expected = roundUp(Platform.is64bit() ? 16 : 8, OBJ_ALIGN);
393         for (int c = 0; c < ITERS; c++) {
394             assertEquals(expected, fInst.getObjectSize(staticO));
395         }
396     }
397 
398     private void testSize_newSmallIntArray() {
399         long expected = roundUp(4L*SMALL_ARRAY_SIZE + 16, OBJ_ALIGN);
400         for (int c = 0; c < ITERS; c++) {
401             assertEquals(expected, fInst.getObjectSize(new int[SMALL_ARRAY_SIZE]));
402         }
403     }
404 
405     private void testSize_localSmallIntArray() {
406         int[] arr = new int[SMALL_ARRAY_SIZE];
407         long expected = roundUp(4L*SMALL_ARRAY_SIZE + 16, OBJ_ALIGN);
408         for (int c = 0; c < ITERS; c++) {
409             assertEquals(expected, fInst.getObjectSize(arr));
410         }
411     }
412 
413     static int[] smallArr = new int[SMALL_ARRAY_SIZE];
414 
415     private void testSize_fieldSmallIntArray() {
416         long expected = roundUp(4L*SMALL_ARRAY_SIZE + 16, OBJ_ALIGN);
417         for (int c = 0; c < ITERS; c++) {
418             assertEquals(expected, fInst.getObjectSize(smallArr));
419         }
420     }
421 
422     private void testSize_newSmallObjArray() {
423         long expected = roundUp(REF_SIZE*SMALL_ARRAY_SIZE + 16, OBJ_ALIGN);
424         for (int c = 0; c < ITERS; c++) {
425             assertEquals(expected, fInst.getObjectSize(new Object[SMALL_ARRAY_SIZE]));
426         }
427     }
428 
429     private void testSize_localSmallObjArray() {
430         Object[] arr = new Object[SMALL_ARRAY_SIZE];
431         long expected = roundUp(REF_SIZE*SMALL_ARRAY_SIZE + 16, OBJ_ALIGN);
432         for (int c = 0; c < ITERS; c++) {
433             assertEquals(expected, fInst.getObjectSize(arr));
434         }
435     }
436 
437     static Object[] smallObjArr = new Object[SMALL_ARRAY_SIZE];
438 
439     private void testSize_fieldSmallObjArray() {
440         long expected = roundUp(REF_SIZE*SMALL_ARRAY_SIZE + 16, OBJ_ALIGN);
441         for (int c = 0; c < ITERS; c++) {
442             assertEquals(expected, fInst.getObjectSize(smallObjArr));
443         }
444     }
445 
446     private void testSize_localLargeIntArray() {
447         int[] arr = new int[LARGE_INT_ARRAY_SIZE];
448         long expected = roundUp(4L*LARGE_INT_ARRAY_SIZE + 16, OBJ_ALIGN);
449         for (int c = 0; c < ITERS; c++) {
450             assertEquals(expected, fInst.getObjectSize(arr));
451         }
452     }
453 
454     private void testSize_localLargeObjArray() {
455         Object[] arr = new Object[LARGE_OBJ_ARRAY_SIZE];
456         long expected = roundUp(REF_SIZE*LARGE_OBJ_ARRAY_SIZE + 16, OBJ_ALIGN);
457         for (int c = 0; c < ITERS; c++) {
458             assertEquals(expected, fInst.getObjectSize(arr));
459         }
460     }
461 
462     private void testNulls() {
463         for (int c = 0; c < ITERS; c++) {
464             try {
465                 fInst.getObjectSize(null);
466                 assertFail();
467             } catch (NullPointerException e) {
468                 // expected
469             }
470         }
471     }
472 
473 }