Class AllocationInstrumenter

  • All Implemented Interfaces:
    java.lang.instrument.ClassFileTransformer

    public class AllocationInstrumenter
    extends java.lang.Object
    implements java.lang.instrument.ClassFileTransformer
    Instruments bytecodes that allocate heap memory to call a recording hook. This will add a static invocation to a recorder function to any bytecode that looks like it will be allocating heap memory allowing users to implement heap profiling schemes.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      static byte[] instrument​(byte[] originalBytes, java.lang.ClassLoader loader)  
      static byte[] instrument​(byte[] originalBytes, java.lang.String recorderClass, java.lang.String recorderMethod, java.lang.ClassLoader loader)
      Given the bytes representing a class, go through all the bytecode in it and instrument any occurrences of new/newarray/anewarray/multianewarray with pre- and post-allocation hooks.
      static void premain​(java.lang.String agentArgs, java.lang.instrument.Instrumentation inst)  
      byte[] transform​(java.lang.ClassLoader loader, java.lang.String className, java.lang.Class<?> classBeingRedefined, java.security.ProtectionDomain protectionDomain, byte[] origBytes)  
      • Methods inherited from class java.lang.Object

        equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • Methods inherited from interface java.lang.instrument.ClassFileTransformer

        transform
    • Method Detail

      • premain

        public static void premain​(java.lang.String agentArgs,
                                   java.lang.instrument.Instrumentation inst)
      • transform

        public byte[] transform​(java.lang.ClassLoader loader,
                                java.lang.String className,
                                java.lang.Class<?> classBeingRedefined,
                                java.security.ProtectionDomain protectionDomain,
                                byte[] origBytes)
        Specified by:
        transform in interface java.lang.instrument.ClassFileTransformer
      • instrument

        public static byte[] instrument​(byte[] originalBytes,
                                        java.lang.String recorderClass,
                                        java.lang.String recorderMethod,
                                        java.lang.ClassLoader loader)
        Given the bytes representing a class, go through all the bytecode in it and instrument any occurrences of new/newarray/anewarray/multianewarray with pre- and post-allocation hooks. Even more fun, intercept calls to the reflection API's Array.newInstance() and instrument those too.
        Parameters:
        originalBytes - the original byte[] code.
        recorderClass - the String internal name of the class containing the recorder method to run.
        recorderMethod - the String name of the recorder method to run.
        loader - the ClassLoader for this class.
        Returns:
        the instrumented byte[] code.