Class MemoryAssert

  • public class MemoryAssert
    extends Object
    Static utility methods for verifying heap memory usage. Uses the INSANE library to traverse the heap from within your test.

    Object sizes are in an idealized JVM in which pointers are 4 bytes (realistic even for modern 64-bit JVMs in which -XX:+UseCompressedOops is the default) but objects are aligned on 8-byte boundaries (so dropping an int field does not always save memory).

    import static org.jvnet.hudson.test.MemoryAssert.*; to use.

    • Method Detail

      • assertHeapUsage

        public static void assertHeapUsage​(Object o,
                                           int max)
                                    throws Exception
        Verifies that an object and its transitive reference graph occupy at most a predetermined amount of memory. The referents of WeakReference and the like are ignored.

        To use, run your test for the first time with max of 0; when it fails, use the reported actual size as your assertion maximum. When improving memory usage, run again with 0 and tighten the test to both demonstrate your improvement quantitatively and prevent regressions.

        o - the object to measure
        max - the maximum desired memory usage (in bytes)
      • increasedMemory

        public static List<MemoryAssert.HistogramElement> increasedMemory​(Callable<Void> callable,
                                                                          org.netbeans.insane.scanner.Filter... filters)
                                                                   throws Exception
        Counts how much more memory is held in Jenkins by doing some operation.
        callable - an action
        filters - things to exclude
        a histogram of the heap delta after running the operation
      • assertGC

        public static void assertGC​(WeakReference<?> reference,
                                    boolean allowSoft)
        Forces GC by causing an OOM and then verifies the given WeakReference has been garbage collected.
        reference - object used to verify garbage collection.
        allowSoft - if true, pass even if SoftReferences apparently needed to be cleared by forcing an OutOfMemoryError; if false, fail in such a case (though the failure will be slow)