<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
A version of javac that translates source files into class files
that don't match the original source sounds very suspect to me.<br>
<br>
-- Jon<br>
<br>
<br>
<div class="moz-cite-prefix">On 12/21/2015 03:47 PM, Jesse Wilson
wrote:<br>
</div>
<blockquote
cite="mid:CAME=j1=PtdkmsHuBZ20O-04Pf5OWAdVc3wFRoQUXWMSgDErn8Q@mail.gmail.com"
type="cite">
<div dir="ltr">
<div style="" class="markdown-here-wrapper">
<p style="margin:0px 0px 1.2em!important">I’m using javac to
build libraries that target both Android and desktop Java.
Android is particularly sensitive to the size of the
compiled classes. But smaller classes improves performance
everywhere.</p>
<p style="margin:0px 0px 1.2em!important">I’ve noticed that
javac likes to synthesize additional members to build
visibility trampolines for nested classes. In the compiled
code for <a moz-do-not-send="true"
href="https://github.com/square/okhttp/">OkHttp</a>,
nearly 10% of the method references are synthetic!</p>
<p style="margin:0px 0px 1.2em!important">I’m tempted to
create a classfile rewriter to remove these synthetic
members. It’d have to promote some <code
style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px
0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px
solid
rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">private</code>
things to <code
style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px
0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px
solid
rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">package-private</code>
to make the synthetic things unnecessary.</p>
<p style="margin:0px 0px 1.2em!important">One alternative to
classfile magic would be a new javac flag like <code
style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px
0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px
solid
rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">--avoid-synthetic-members</code>.
Such a flag would change <code
style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px
0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px
solid
rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">private</code>
members to <code
style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px
0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px
solid
rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">package-private</code>
when those members were accessed by nested classes. The
compiled code would be smaller, run faster, and have less
weird garbage in the stack traces.</p>
<p style="margin:0px 0px 1.2em!important">Are javac
maintainers receptive to a patch that adds such a flag?
What’s the process of turning this proposal into a feature?</p>
<p style="margin:0px 0px 1.2em!important">Thanks.<br>
Jesse Wilson</p>
<div
title="MDH:PGRpdj5J4oCZbSB1c2luZyBqYXZhYyB0byBidWlsZCBsaWJyYXJpZXMgdGhhdCB0YXJnZXQgYm90aCBBbmRyb2lkIGFuZCBkZXNrdG9wIEphdmEuIEFuZHJvaWQgaXMgcGFydGljdWxhcmx5IHNlbnNp
dGl2ZSB0byB0aGUgc2l6ZSBvZiB0aGUgY29tcGlsZWQgY2xhc3Nlcy4gQnV0IHNtYWxsZXIgY2xh
c3NlcyBpbXByb3ZlcyBwZXJmb3JtYW5jZSBldmVyeXdoZXJlLjxicj48YnI+PC9kaXY+PGRpdj5J
4oCZdmUgbm90aWNlZCB0aGF0IGphdmFjIGxpa2VzIHRvIHN5bnRoZXNpemUgYWRkaXRpb25hbCBt
ZW1iZXJzIHRvIGJ1aWxkIHZpc2liaWxpdHkgdHJhbXBvbGluZXMgZm9yIG5lc3RlZCBjbGFzc2Vz
LiBJbiB0aGUgY29tcGlsZWQgY29kZSBmb3IgW09rSHR0cF0oaHR0cHM6Ly9naXRodWIuY29tL3Nx
dWFyZS9va2h0dHAvKSwgbmVhcmx5IDEwJSBvZiB0aGUgbWV0aG9kIHJlZmVyZW5jZXMgYXJlIHN5
bnRoZXRpYyE8YnI+PGJyPjwvZGl2PjxkaXY+SeKAmW0gdGVtcHRlZCB0byBjcmVhdGUgYSBjbGFz
c2ZpbGUgcmV3cml0ZXIgdG8gcmVtb3ZlIHRoZXNlIHN5bnRoZXRpYyBtZW1iZXJzLiBJdOKAmWQg
aGF2ZSB0byBwcm9tb3RlIHNvbWUgYHByaXZhdGVgIHRoaW5ncyB0byBgcGFja2FnZS1wcml2YXRl
YCB0byBtYWtlIHRoZSBzeW50aGV0aWMgdGhpbmdzIHVubmVjZXNzYXJ5Ljxicj48YnI+PC9kaXY+
PGRpdj5PbmUgYWx0ZXJuYXRpdmUgdG8gY2xhc3NmaWxlIG1hZ2ljIHdvdWxkIGJlIGEgbmV3IGph
dmFjIGZsYWcgbGlrZSBgLS1hdm9pZC1zeW50aGV0aWMtbWVtYmVyc2AuIFN1Y2ggYSBmbGFnIHdv
dWxkIGNoYW5nZSBgcHJpdmF0ZWAgbWVtYmVycyB0byBgcGFja2FnZS1wcml2YXRlYCB3aGVuIHRo
b3NlIG1lbWJlcnMgd2VyZSBhY2Nlc3NlZCBieSBuZXN0ZWQgY2xhc3Nlcy4gVGhlIGNvbXBpbGVk
IGNvZGUgd291bGQgYmUgc21hbGxlciwgcnVuIGZhc3RlciwgYW5kIGhhdmUgbGVzcyB3ZWlyZCBn
YXJiYWdlIGluIHRoZSBzdGFjayB0cmFjZXMuPGJyPjxicj48L2Rpdj48ZGl2PkFyZSBqYXZhYyBt
YWludGFpbmVycyByZWNlcHRpdmUgdG8gYSBwYXRjaCB0aGF0IGFkZHMgc3VjaCBhIGZsYWc/IFdo
YXTigJlzIHRoZSBwcm9jZXNzIG9mIHR1cm5pbmcgdGhpcyBwcm9wb3NhbCBpbnRvIGEgZmVhdHVy
ZT88YnI+PGJyPjwvZGl2PjxkaXY+VGhhbmtzLjxicj48L2Rpdj48ZGl2Pkplc3NlIFdpbHNvbjxi
cj48YnI+PC9kaXY+"
style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0">​</div>
</div>
</div>
</blockquote>
<br>
</body>
</html>