 
     public static function dumpDisplayTree(container:DisplayObjectContainer, maxDepth:int = 0):String
     {
-        return new DisplayTreeDumper().dump(container, maxDepth);
+        return getDisplayTreeDumper().dump(container, maxDepth);
+    }
+
+    private static var _displayTreeDumper:DisplayTreeDumper;
+
+    private static function getDisplayTreeDumper():DisplayTreeDumper
+    {
+        if (!_displayTreeDumper)
+        {
+            _displayTreeDumper = new DisplayTreeDumper();
+        }
+        return _displayTreeDumper;
     }
 
 
     public static function dumpObject(root:*, maxDepth:int = 3):String
     {
-        return new ObjectDumper().dump(root, maxDepth);
+        return getObjectDumper().dump(root, maxDepth);
+    }
+
+    private static var _objectDumper:ObjectDumper;
+
+    private static function getObjectDumper():ObjectDumper
+    {
+        if (!_objectDumper)
+        {
+            _objectDumper = new ObjectDumper();
+        }
+        return _objectDumper;
     }
 
 

                endOfLine = byteArray.length;
            }

            valueBuffer = [ ];
            charCodeBuffer = [ ];

            lineBuffer[0] = StringUtil.padLeft(
                    byteIndex.toString(16).toUpperCase(),
                    8, "0");

            for (; byteIndex < endOfLine; byteIndex++)
            {
                byte = byteArray[byteIndex];

                valueString = byte.toString(16).toUpperCase();
                valueBuffer.push(byte < 0x10 ? ("0" + valueString) : valueString);

                if ((byte >= 0x20 && byte <= 0x7E) ||
                        (byte >= 0xA0 && byte <= 0xAC) ||

        var byteIndex:uint;
        var endOfLine:uint;

        var outputBuffer:StringBuilder = new StringBuilder();

        var valueString:String;
        var valueBuffer:StringBuilder = new StringBuilder();
        var valueBufferLength:uint = (bytesPerLine * 3);

        var charCodeBuffer:Array;
        var nonPrintingCharCode:uint;
