RFR: 8004643 Reduce javac space overhead introduced with compiler support for repeating annotations

Werner Dietl wdietl at gmail.com
Tue Jun 4 23:08:27 PDT 2013


Hi Jon,

I think it's great that all these allocations of Annotations are removed.
The changes look good to me.

cu, WMD.


On Tue, Jun 4, 2013 at 9:24 AM, Jonathan Gibbons <
jonathan.gibbons at oracle.com> wrote:

>  Thanks.   JDK-8015899 filed to track the folowup issue.
>
> I think we need to focus on consolidating the Annotations abstraction
> before we focus on cleaning up how it is accessed via Symbol.  Or at least,
> we should work on it in maybe multiple cleanup phases.
>
> --Jon
>
>
>
>
> On 06/04/2013 09:13 AM, Maurizio Cimadamore wrote:
>
> Hi Jon,
> the patch is fine in th short term - this is a list of issues I think we
> should work on to alleviate the pain in this area:
>
> *) There's an annoying split between symbol annos and type annos; we have
> twice the methods we need - I think some work should be done to consolidate
> existing APIs onto a more stable version where stuff like this:
>
> public boolean hasAnnotations() {
> +        return (annotations != null && !annotations.isEmpty());
> +    }
> +
> +    public boolean hasTypeAnnotations() {
> +        return (annotations != null && !annotations.isTypesEmpty());
> +    }
>
>
> Is replaced  by this:
>
> public boolean hasAnnotations(AnnoKind kind) { ... }
>
>
> *) I think all methods that modify annotations should not be exposed
> through Symbol API
>
> *) This should be done via a Symbol flag
>
> - annotationsPendingCompletion
>
> In other words, I would keep the Symbol API light by providing:
>
> *) a way for getting symbol/type annos
> *) a way to tell as to whether annotation completion has already happened
> (i.e. will the above method yield meaningful answer?)
>
> Everything else should be done through a separate class (Annotations),
> pretty much like we do now, by accessing symbol's metadata and playing with
> it. I also would remove any back pointer from Annotations to Symbol (if
> any).
>
> Maurizio
>
>
> On 01/06/13 03:14, Jonathan Gibbons wrote:
>
> More from the javac janitation crew, cleaning up the odds and ends.
>
> This is a relatively simple fix for the space overhead introduced by
> allocating an Annotations object for every Symbol.  The fix is to hide the
> Annotations object behind methods in Symbol (which also cleans up the
> client code a bunch) and to lazily allocate the Annotations object if and
> only if it is needed.  If the reference to the Annotations object is null,
> that means "no annotations on this symbol". (I tried using an immutable
> empty object, but it caused more clutter than it saved.)
>
> Most notably, Annotations is not itself changed by this changeset.
>
> The savings on a JDK build are significant, going from every Symbol having
> an Annotations object, to < 1% of Symbols needing an Annotations object ...
> from 4,024,455 to just 35,272.  In the table below, each row is a separate
> javac compilation in the JDK build.  The left hand block of numbers comes
> from a recent build of TL; the right hand block of numbers comes from a
> build of TL with the patch applied.  There may be more optimizations
> possible, by further improving the checks on whether a new Annotations
> object is required.
>
> There's a couple of related minor cleanups here as well. Going forward, it
> would be nice to clean up the method names on Annotations and the wrapper
> methods on Symbol. There's an inconsistent set of names using fragments
> like {(empty), Raw, Declaration, Type} x {Attributes, Annotations}.   Once
> we can decide on a better set of names, we can do a separate "renaming
> only" changeset for that.
>
> The webrev is available at
> http://cr.openjdk.java.net/~jjg/8004643/webrev.00/  It is against
> tl/langtools.
>
>
>
>
>
>
> -- Jon
>
>
>
>
>
>  OLD
>
>
>  NEW
>
>
>
>  Symbols Annotations %
>  Symbols Annotations %
>
>  269,144 269,144 100.00%
>  269,191 1,817 0.67%
>
>  4,463 4,463 100.00%
>  4,463 32 0.72%
>
>  39,845 39,845 100.00%
>  39,845 40 0.10%
>
>  2,276 2,276 100.00%
>  2,276 7 0.31%
>
>  224,546 224,546 100.00%
>  224,546 182 0.08%
>
>  356,137 356,137 100.00%
>  356,137 343 0.10%
>
>  8,610 8,610 100.00%
>  8,610 37 0.43%
>
>  428,097 428,097 100.00%
>  428,097 4,884 1.14%
>
>  49,031 49,031 100.00%
>  49,031 253 0.52%
>
>  1,338 1,338 100.00%
>  1,338 4 0.30%
>
>  2,016,962 2,016,962 100.00%
>  2,017,279 9,824 0.49%
>
>  2,642 2,642 100.00%
>  3,944 110 2.79%
>
>  3,937 3,937 100.00%
>  2,642 78 2.95%
>
>  3,944 3,944 100.00%
>  3,937 112 2.84%
>
>  4,015 4,015 100.00%
>  4,015 101 2.52%
>
>  5,361 5,361 100.00%
>  4,462 120 2.69%
>
>  4,779 4,779 100.00%
>  5,361 139 2.59%
>
>  3,855 3,855 100.00%
>  4,281 88 2.06%
>
>  4,281 4,281 100.00%
>  4,779 135 2.82%
>
>  4,462 4,462 100.00%
>  4,447 107 2.41%
>
>  4,546 4,546 100.00%
>  4,546 102 2.24%
>
>  5,795 5,795 100.00%
>  3,855 28 0.73%
>
>  4,447 4,447 100.00%
>  5,795 144 2.48%
>
>  5,176 5,176 100.00%
>  6,496 117 1.80%
>
>  6,496 6,496 100.00%
>  5,176 144 2.78%
>
>  6,056 6,056 100.00%
>  6,056 118 1.95%
>
>  5,759 5,759 100.00%
>  5,759 112 1.94%
>
>  4,926 4,926 100.00%
>  4,926 106 2.15%
>
>  1,025 1,025 100.00%
>  6,468 136 2.10%
>
>  3,697 3,697 100.00%
>  4,185 43 1.03%
>
>  6,468 6,468 100.00%
>  7,804 139 1.78%
>
>  4,185 4,185 100.00%
>  3,697 40 1.08%
>
>  7,809 7,809 100.00%
>  1,025 12 1.17%
>
>  8,878 8,878 100.00%
>  8,878 170 1.91%
>
>  7,804 7,804 100.00%
>  7,809 173 2.22%
>
>  1,029 1,029 100.00%
>  10,420 164 1.57%
>
>  1,403 1,403 100.00%
>  8,011 183 2.28%
>
>  10,420 10,420 100.00%
>  10,024 227 2.26%
>
>  8,011 8,011 100.00%
>  11,303 190 1.68%
>
>  10,024 10,024 100.00%
>  12,225 231 1.89%
>
>  11,303 11,303 100.00%
>  1,029 12 1.17%
>
>  12,225 12,225 100.00%
>  1,403 28 2.00%
>
>  15,827 15,827 100.00%
>  15,827 173 1.09%
>
>  12,642 12,642 100.00%
>  12,686 166 1.31%
>
>  124,653 124,653 100.00%
>  124,654 2,824 2.27%
>
>  39,797 39,797 100.00%
>  39,797 691 1.74%
>
>  255,866 255,866 100.00%
>  255,910 10,386 4.06%
>  TOTAL 4,023,992 4,023,992 100.00%
>  4,024,445 35,272 0.88%
>
>
>
>


-- 
http://www.google.com/profiles/wdietl
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/type-annotations-dev/attachments/20130604/a3289c05/attachment-0001.html 


More information about the type-annotations-dev mailing list