AHAT - Android Heap Analysis Tool

Usage:
  java -jar ahat.jar [OPTIONS] FILE
    Launch an http server for viewing the given Android heap dump FILE.

  OPTIONS:
    -p <port>
       Serve pages on the given port. Defaults to 7100.
    --proguard-map FILE
       Use the proguard map FILE to deobfuscate the heap dump.
    --baseline FILE
       Diff the heap dump against the given baseline heap dump FILE.
    --baseline-proguard-map FILE
       Use the proguard map FILE to deobfuscate the baseline heap dump.
    --retained [strong | soft | finalizer | weak | phantom | unreachable]
       The weakest reachability of instances to treat as retained.
       Defaults to soft

TODO:
 * Add a user guide.
 * Dim 'image' and 'zygote' heap sizes slightly? Why do we even show these?
 * Let user re-sort sites objects info by clicking column headers.
 * Let user re-sort "Objects" list.
 * Show site context and heap and class filter in "Objects" view?
 * Have a menu at the top of an object view with links to the sections?
 * Include ahat version and hprof file in the menu at the top of the page?
 * Heaped Table
   - Make sortable by clicking on headers.
 * For HeapTable with single heap shown, the heap name isn't centered?
 * Consistently document functions.
 * Show version number with --version.
 * Show somewhere where to send bugs.
 * Include a link to /objects in the overview and menu?
 * Turn on LOCAL_JAVACFLAGS := -Xlint:unchecked -Werror

 * [low priority] by site allocations won't line up if the stack has been
   truncated. Is there any way to manually line them up in that case?

Things to Test:
 * That we can open a hprof without an 'app' heap and show a tabulation of
   objects normally sorted by 'app' heap by default.
 * Visit /objects without parameters and verify it doesn't throw an exception.
 * Visit /objects with an invalid site, verify it doesn't throw an exception.
 * That we can view the list of all objects in a reasonably short amount of
   time.
 * That we don't show the 'extra' column in the DominatedList if we are
   showing all the instances.
 * Instance.getDexCacheLocation

Reported Issues:
 * Request to be able to sort tables by size.

Known Issues:
 * Line number decoding for allocations in proguarded classes.

Release History:
 1.7.2 March 2, 2022
   Fix ahat parsing to allow leading whitespaces for comments.
   Hide Value class constructor.

 1.7.1 September 30, 2020
   Fix issue parsing proguard maps with comments.

 1.7 August 8, 2019
   Annotate binder services, tokens, and proxies.
   Add option for viewing subclass instances of a class.
   Recognize java.lang.ref.Finalizer as a finalizer reference.
   Minor bug fixes and API improvements.

 1.6 July 24, 2018
   Distinguish between soft/weak/phantom/etc references.
   Annotate $classOverhead byte[] arrays with their class.
   Show progress of heap dump processing.
   Add --retained command line option to ahat.
   Support heap dumps generated with HotSpotDiagnosticMXBean.
   Updated public APIs for dominators computation, reachability and parser.
   AhatInstance no longer implements DominatorsComputation.Node
   Bug fixes.

 1.5 December 05, 2017
   Distinguish between weakly reachable and unreachable instances.
   Allow hex ids to be used for objects in query parameters.
   Restore old presentation of sample paths from gc roots.
   Fix bug in selection of sample paths from gc root.
   Fix bug in proguard deobfuscation of stack frames.
   Tighten up and document ahat public API.

 1.4 October 03, 2017
   Give better error messages on failure to launch ahat.
   Properly mark thread and non-default root objects as roots.
   Improve startup performance, in some cases significantly.
   Other miscellaneous bug fixes.

 1.3.1 August 22, 2017
   Don't include weak references in sample paths.

 1.3 July 25, 2017
   Improve diffing of static and instance fields.
   Improve startup performance by roughly 25%.

 1.2 May 26, 2017
   Show registered native sizes of objects.
   Simplify presentation of sample path from gc root.

 1.1 Feb 21, 2017
   Show java.lang.ref.Reference referents as "unreachable" instead of null.

 1.0 Dec 20, 2016
   Add support for diffing two heap dumps.
   Remove native allocations view.
   Remove outdated help page.
   Significant refactoring of ahat internals.

 0.8 Oct 18, 2016
   Show sample path from GC root with field names in place of dominator path.

 0.7 Aug 16, 2016
   Launch ahat server before processing the heap dump.
   Target Java 1.7.

 0.6 Jun 21, 2016
   Add support for proguard deobfuscation.

 0.5 Apr 19, 2016
   Update perflib to perflib-25.0.0 to improve processing performance.

 0.4 Feb 23, 2016
   Annotate char[] objects with their string values.
   Show registered native allocations for heap dumps that support it.

 0.3 Dec 15, 2015
   Fix page loading performance by showing a limited number of entries by default.
   Fix mismatch between overview and "roots" totals.
   Annotate root objects and show their types.
   Annotate references with their referents.

 0.2 Oct 20, 2015
   Take into account 'count' and 'offset' when displaying strings.

 0.1ss Aug 04, 2015
   Enable stack allocations code (using custom modified perflib).
   Sort objects in 'objects/' with default sort.

 0.1-stacks Aug 03, 2015
   Enable stack allocations code (using custom modified perflib).

 0.1 July 30, 2015
   Initial Release

