# HG changeset patch # User igerasim # Date 1530325828 25200 # Fri Jun 29 19:30:28 2018 -0700 # Node ID 030b673b3fa962e9069a6ecd237448b800bfbf6b # Parent 9f62267e79df8fd87172aa08971ba66701286f90 imported patch 8206122-Use-Queue-in-place-of-ArrayList-when-need-to-remove-first-element diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTaskPool.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTaskPool.java --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTaskPool.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTaskPool.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,9 +27,10 @@ import java.io.PrintStream; import java.io.Writer; +import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; +import java.util.Deque; import java.util.HashMap; import com.sun.source.tree.ClassTree; @@ -101,9 +102,10 @@ public class JavacTaskPool { private static final JavacTool systemProvider = JavacTool.create(); + private static final Deque EMPTY_DEQUE = new ArrayDeque<>(0); private final int maxPoolSize; - private final Map, List> options2Contexts = new HashMap<>(); + private final Map, Deque> options2Contexts = new HashMap<>(); private int id; private int statReused = 0; @@ -159,14 +161,14 @@ ReusableContext ctx; synchronized (this) { - List cached = - options2Contexts.getOrDefault(opts, Collections.emptyList()); + Deque cached = + options2Contexts.getOrDefault(opts, EMPTY_DEQUE); if (cached.isEmpty()) { ctx = new ReusableContext(opts); statNew++; } else { - ctx = cached.remove(0); + ctx = cached.remove(); statReused++; } } @@ -200,7 +202,7 @@ options2Contexts.get(toRemove.arguments).remove(toRemove); statRemoved++; } - options2Contexts.computeIfAbsent(ctx.arguments, x -> new ArrayList<>()).add(ctx); + options2Contexts.computeIfAbsent(ctx.arguments, x -> new ArrayDeque<>()).add(ctx); ctx.timeStamp = id++; } } diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Analyzer.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Analyzer.java --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Analyzer.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Analyzer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,8 @@ package com.sun.tools.javac.comp; -import java.util.ArrayList; +import java.util.ArrayDeque; +import java.util.Queue; import com.sun.source.tree.LambdaExpressionTree; import com.sun.tools.javac.code.Source; @@ -521,11 +522,11 @@ */ DeferredAnalysisHelper queueDeferredHelper = new DeferredAnalysisHelper() { - Map> Q = new HashMap<>(); + Map> Q = new HashMap<>(); @Override public void queue(RewritingContext rewriting) { - ArrayList s = Q.computeIfAbsent(rewriting.env.enclClass.sym.outermostClass(), k -> new ArrayList<>()); + Queue s = Q.computeIfAbsent(rewriting.env.enclClass.sym.outermostClass(), k -> new ArrayDeque<>()); s.add(rewriting); } @@ -535,9 +536,9 @@ DeferredAnalysisHelper prevHelper = deferredAnalysisHelper; try { deferredAnalysisHelper = flushDeferredHelper; - ArrayList rewritings = Q.get(flushEnv.enclClass.sym.outermostClass()); + Queue rewritings = Q.get(flushEnv.enclClass.sym.outermostClass()); while (rewritings != null && !rewritings.isEmpty()) { - doAnalysis(rewritings.remove(0)); + doAnalysis(rewritings.remove()); } } finally { deferredAnalysisHelper = prevHelper;