]> source.dussan.org Git - jgit.git/commitdiff
[performance] Remove synthetic access$ methods in transport package 70/59170/1
authorAndrey Loskutov <loskutov@gmx.de>
Wed, 28 Oct 2015 19:24:12 +0000 (20:24 +0100)
committerAndrey Loskutov <loskutov@gmx.de>
Wed, 28 Oct 2015 19:24:12 +0000 (20:24 +0100)
Java compiler must generate synthetic access methods for private methods
and fields of the enclosing class if they are accessed from inner
classes and vice versa.

While invisible in the code, those synthetic access methods exist in the
bytecode and seem to produce some extra execution overhead at runtime
(compared with the direct access to this fields or methods), see
https://git.eclipse.org/r/58948/.

By removing the "private" access modifier from affected methods and
fields we help compiler to avoid generation of synthetic access methods
and hope to improve execution performance.

To validate changes, one can either use javap or use Bytecode Outline
plugin in Eclipse. In both cases one should look for "synthetic
access$<number>" methods at the end of the class and inner class files
in question - there should be none.

NB: don't mix this "synthetic access$" methods up with "public synthetic
bridge" methods generated to allow generic method override return types.

Change-Id: I0ebaeb2bc454cd8051b901addb102c1a6688688b
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
12 files changed:
org.eclipse.jgit/src/org/eclipse/jgit/transport/AmazonS3.java
org.eclipse.jgit/src/org/eclipse/jgit/transport/Daemon.java
org.eclipse.jgit/src/org/eclipse/jgit/transport/JschSession.java
org.eclipse.jgit/src/org/eclipse/jgit/transport/PackParser.java
org.eclipse.jgit/src/org/eclipse/jgit/transport/PushCertificateStore.java
org.eclipse.jgit/src/org/eclipse/jgit/transport/TestProtocol.java
org.eclipse.jgit/src/org/eclipse/jgit/transport/TrackingRefUpdate.java
org.eclipse.jgit/src/org/eclipse/jgit/transport/TransferConfig.java
org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportAmazonS3.java
org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java
org.eclipse.jgit/src/org/eclipse/jgit/transport/WalkFetchConnection.java
org.eclipse.jgit/src/org/eclipse/jgit/transport/WalkPushConnection.java

index 0c8ee5d4b698a71e6d006eac956727d63fd9e572..4069a64535bd726768c16b0616dbf9f313e71090 100644 (file)
@@ -175,7 +175,7 @@ public class AmazonS3 {
        private final String acl;
 
        /** Maximum number of times to try an operation. */
-       private final int maxAttempts;
+       final int maxAttempts;
 
        /** Encryption algorithm, may be a null instance that provides pass-through. */
        private final WalkEncryption encryption;
@@ -483,7 +483,7 @@ public class AmazonS3 {
                return encryption.encrypt(new DigestOutputStream(buffer, md5));
        }
 
-       private void putImpl(final String bucket, final String key,
+       void putImpl(final String bucket, final String key,
                        final byte[] csum, final TemporaryBuffer buf,
                        ProgressMonitor monitor, String monitorTask) throws IOException {
                if (monitor == null)
@@ -522,7 +522,7 @@ public class AmazonS3 {
                throw maxAttempts(JGitText.get().s3ActionWriting, key);
        }
 
-       private IOException error(final String action, final String key,
+       IOException error(final String action, final String key,
                        final HttpURLConnection c) throws IOException {
                final IOException err = new IOException(MessageFormat.format(
                                JGitText.get().amazonS3ActionFailed, action, key,
@@ -547,7 +547,7 @@ public class AmazonS3 {
                return err;
        }
 
-       private IOException maxAttempts(final String action, final String key) {
+       IOException maxAttempts(final String action, final String key) {
                return new IOException(MessageFormat.format(
                                JGitText.get().amazonS3ActionFailedGivingUp, action, key,
                                Integer.valueOf(maxAttempts)));
@@ -559,7 +559,7 @@ public class AmazonS3 {
                return open(method, bucket, key, noArgs);
        }
 
-       private HttpURLConnection open(final String method, final String bucket,
+       HttpURLConnection open(final String method, final String bucket,
                        final String key, final Map<String, String> args)
                        throws IOException {
                final StringBuilder urlstr = new StringBuilder();
@@ -596,7 +596,7 @@ public class AmazonS3 {
                return c;
        }
 
-       private void authorize(final HttpURLConnection c) throws IOException {
+       void authorize(final HttpURLConnection c) throws IOException {
                final Map<String, List<String>> reqHdr = c.getRequestProperties();
                final SortedMap<String, String> sigHdr = new TreeMap<String, String>();
                for (final Map.Entry<String, List<String>> entry : reqHdr.entrySet()) {
index 03f7c72835b8b89a7f58ee3c77917a3ee57a7f77..d9e0b937e849a99ac2f1c2688aabbfc515281cad 100644 (file)
@@ -79,7 +79,7 @@ public class Daemon {
 
        private boolean run;
 
-       private Thread acceptThread;
+       Thread acceptThread;
 
        private int timeout;
 
@@ -87,9 +87,9 @@ public class Daemon {
 
        private volatile RepositoryResolver<DaemonClient> repositoryResolver;
 
-       private volatile UploadPackFactory<DaemonClient> uploadPackFactory;
+       volatile UploadPackFactory<DaemonClient> uploadPackFactory;
 
-       private volatile ReceivePackFactory<DaemonClient> receivePackFactory;
+       volatile ReceivePackFactory<DaemonClient> receivePackFactory;
 
        /** Configure a daemon to listen on any available network port. */
        public Daemon() {
@@ -326,7 +326,7 @@ public class Daemon {
                }
        }
 
-       private void startClient(final Socket s) {
+       void startClient(final Socket s) {
                final DaemonClient dc = new DaemonClient(this);
 
                final SocketAddress peer = s.getRemoteSocketAddress();
index b4a09020b532c8d7781c6d16dbabbc8c79755037..85109a5bf0c02cb3fa043df798928dc07e735546 100644 (file)
@@ -71,8 +71,8 @@ import com.jcraft.jsch.Session;
  * to the constructor.
  */
 public class JschSession implements RemoteSession {
-       private final Session sock;
-       private final URIish uri;
+       final Session sock;
+       final URIish uri;
 
        /**
         * Create a new session object by passing the real Jsch session and the URI
@@ -119,7 +119,7 @@ public class JschSession implements RemoteSession {
        private class JschProcess extends Process {
                private ChannelExec channel;
 
-               private final int timeout;
+               final int timeout;
 
                private InputStream inputStream;
 
@@ -141,7 +141,7 @@ public class JschSession implements RemoteSession {
                 * @throws IOException
                 *             on problems opening streams
                 */
-               private JschProcess(final String commandName, int tms)
+               JschProcess(final String commandName, int tms)
                                throws TransportException, IOException {
                        timeout = tms;
                        try {
index 918df94de9d8f5c5e0468673ca34fd5cdfc37515..6e5fc9f00993c5e214f6978dd0cb224287297f02 100644 (file)
@@ -122,14 +122,14 @@ public abstract class PackParser {
 
        private InputStream in;
 
-       private byte[] buf;
+       byte[] buf;
 
        /** Position in the input stream of {@code buf[0]}. */
        private long bBase;
 
        private int bOffset;
 
-       private int bAvail;
+       int bAvail;
 
        private ObjectChecker objCheck;
 
@@ -1141,13 +1141,13 @@ public abstract class PackParser {
        }
 
        // Consume cnt bytes from the buffer.
-       private void use(final int cnt) {
+       void use(final int cnt) {
                bOffset += cnt;
                bAvail -= cnt;
        }
 
        // Ensure at least need bytes are available in in {@link #buf}.
-       private int fill(final Source src, final int need) throws IOException {
+       int fill(final Source src, final int need) throws IOException {
                while (bAvail < need) {
                        int next = bOffset + bAvail;
                        int free = buf.length - next;
index d8672d5a2b8c037e673b64ee6f9ece843fa8ebef..8947f2779d61e037c993d055d4b4d6e9ebaa6df4 100644 (file)
@@ -107,11 +107,11 @@ public class PushCertificateStore implements AutoCloseable {
                        Constants.R_REFS + "meta/push-certs"; //$NON-NLS-1$
 
        private static class PendingCert {
-               private PushCertificate cert;
-               private PersonIdent ident;
-               private Collection<ReceiveCommand> matching;
+               PushCertificate cert;
+               PersonIdent ident;
+               Collection<ReceiveCommand> matching;
 
-               private PendingCert(PushCertificate cert, PersonIdent ident,
+               PendingCert(PushCertificate cert, PersonIdent ident,
                                Collection<ReceiveCommand> matching) {
                        this.cert = cert;
                        this.ident = ident;
@@ -121,8 +121,8 @@ public class PushCertificateStore implements AutoCloseable {
 
        private final Repository db;
        private final List<PendingCert> pending;
-       private ObjectReader reader;
-       private RevCommit commit;
+       ObjectReader reader;
+       RevCommit commit;
 
        /**
         * Create a new store backed by the given repository.
@@ -270,7 +270,7 @@ public class PushCertificateStore implements AutoCloseable {
                };
        }
 
-       private void load() throws IOException {
+       void load() throws IOException {
                close();
                reader = db.newObjectReader();
                Ref ref = db.getRefDatabase().exactRef(REF_NAME);
@@ -283,7 +283,7 @@ public class PushCertificateStore implements AutoCloseable {
                }
        }
 
-       private static PushCertificate read(TreeWalk tw) throws IOException {
+       static PushCertificate read(TreeWalk tw) throws IOException {
                if (tw == null || (tw.getRawMode(0) & TYPE_FILE) != TYPE_FILE) {
                        return null;
                }
@@ -532,7 +532,7 @@ public class PushCertificateStore implements AutoCloseable {
                return TreeWalk.forPath(reader, pathName(refName), commit.getTree());
        }
 
-       private static String pathName(String refName) {
+       static String pathName(String refName) {
                return refName + "@{cert}"; //$NON-NLS-1$
        }
 
index 5243010502221426e4416767d6982b20a3433c4c..5fd2f84b7e38d385f6e725fbf0a3911a69b5ff4d 100644 (file)
@@ -78,17 +78,17 @@ public class TestProtocol<C> extends TransportProtocol {
        private static final String SCHEME = "test"; //$NON-NLS-1$
 
        private class Handle {
-               private final C req;
-               private final Repository remote;
+               final C req;
+               final Repository remote;
 
-               private Handle(C req, Repository remote) {
+               Handle(C req, Repository remote) {
                        this.req = req;
                        this.remote = remote;
                }
        }
 
-       private final UploadPackFactory<C> uploadPackFactory;
-       private final ReceivePackFactory<C> receivePackFactory;
+       final UploadPackFactory<C> uploadPackFactory;
+       final ReceivePackFactory<C> receivePackFactory;
        private final HashMap<URIish, Handle> handles;
 
        /**
@@ -165,7 +165,7 @@ public class TestProtocol<C> extends TransportProtocol {
        private class TransportInternal extends Transport implements PackTransport {
                private final Handle handle;
 
-               private TransportInternal(Repository local, URIish uri, Handle handle) {
+               TransportInternal(Repository local, URIish uri, Handle handle) {
                        super(local, uri);
                        this.handle = handle;
                }
index 1ef3fbf6270b5191e921a47f002321e989ac6d35..5aae5ea21a11bf65db88c51c8d6c895904c0a79c 100644 (file)
@@ -52,10 +52,10 @@ import org.eclipse.jgit.lib.RefUpdate;
 /** Update of a locally stored tracking branch. */
 public class TrackingRefUpdate {
        private final String remoteName;
-       private final String localName;
-       private boolean forceUpdate;
-       private ObjectId oldObjectId;
-       private ObjectId newObjectId;
+       final String localName;
+       boolean forceUpdate;
+       ObjectId oldObjectId;
+       ObjectId newObjectId;
 
        private RefUpdate.Result result;
        private ReceiveCommand cmd;
@@ -142,7 +142,7 @@ public class TrackingRefUpdate {
        }
 
        final class Command extends ReceiveCommand {
-               private Command() {
+               Command() {
                        super(oldObjectId, newObjectId, localName);
                }
 
index f4de82147d3c05e453d1bdbc72f45ec9de73a00f..f0c513427afeac89164c413ee89e9790ba73d5a9 100644 (file)
@@ -72,13 +72,13 @@ public class TransferConfig {
        private final boolean safeForMacOS;
        private final boolean allowTipSha1InWant;
        private final boolean allowReachableSha1InWant;
-       private final String[] hideRefs;
+       final String[] hideRefs;
 
        TransferConfig(final Repository db) {
                this(db.getConfig());
        }
 
-       private TransferConfig(final Config rc) {
+       TransferConfig(final Config rc) {
                checkReceivedObjects = rc.getBoolean(
                                "fetch", "fsckobjects", //$NON-NLS-1$ //$NON-NLS-2$
                                rc.getBoolean("transfer", "fsckobjects", false)); //$NON-NLS-1$ //$NON-NLS-2$
index 745cdb72d572915f61d3e949ea50a3b950e53102..7729c11ff95cf3ad6347d91aa1a02ff28cfd3b66 100644 (file)
@@ -125,10 +125,10 @@ public class TransportAmazonS3 extends HttpTransport implements WalkTransport {
        };
 
        /** User information necessary to connect to S3. */
-       private final AmazonS3 s3;
+       final AmazonS3 s3;
 
        /** Bucket the remote repository is stored in. */
-       private final String bucket;
+       final String bucket;
 
        /**
         * Key prefix which all objects related to the repository start with.
index b23771e952bc9fd5c5c6cb1a9b1ac55c590510a5..594827886bbda9f2328c453e5a7b3aaf84832242 100644 (file)
@@ -218,16 +218,16 @@ public class TransportHttp extends HttpTransport implements WalkTransport,
                        sslVerify = rc.getBoolean("http", "sslVerify", true); //$NON-NLS-1$ //$NON-NLS-2$
                }
 
-               private HttpConfig() {
+               HttpConfig() {
                        this(new Config());
                }
        }
 
-       private final URL baseUrl;
+       final URL baseUrl;
 
        private final URL objectsUrl;
 
-       private final HttpConfig http;
+       final HttpConfig http;
 
        private final ProxySelector proxySelector;
 
index dc9dee55a47d43a2d9c026598b2088873d6d97b3..1c6b8b7363a5750ba7b215921197507934dd3561 100644 (file)
@@ -115,10 +115,10 @@ import org.eclipse.jgit.util.FileUtils;
  */
 class WalkFetchConnection extends BaseFetchConnection {
        /** The repository this transport fetches into, or pushes out of. */
-       private final Repository local;
+       final Repository local;
 
        /** If not null the validator for received objects. */
-       private final ObjectChecker objCheck;
+       final ObjectChecker objCheck;
 
        /**
         * List of all remote repositories we may need to get objects out of.
@@ -180,12 +180,12 @@ class WalkFetchConnection extends BaseFetchConnection {
         */
        private final HashMap<ObjectId, List<Throwable>> fetchErrors;
 
-       private String lockMessage;
+       String lockMessage;
 
-       private final List<PackLock> packLocks;
+       final List<PackLock> packLocks;
 
        /** Inserter to write objects onto {@link #local}. */
-       private final ObjectInserter inserter;
+       final ObjectInserter inserter;
 
        /** Inserter to read objects from {@link #local}. */
        private final ObjectReader reader;
index deecb8e15ff5eb530821375100c784bd7079641a..4eaf3f9d8a2ed17ce87a42e10a9ee9562f3ef22c 100644 (file)
@@ -103,7 +103,7 @@ class WalkPushConnection extends BaseConnection implements PushConnection {
        private final URIish uri;
 
        /** Database connection to the remote repository. */
-       private final WalkRemoteObjectDatabase dest;
+       final WalkRemoteObjectDatabase dest;
 
        /** The configured transport we were constructed by. */
        private final Transport transport;