Revision: 6856 Author: [email protected] Date: Wed Nov 11 16:03:42 2009 Log: Removes OptionCompilationStateRetained in favor of a new GC strategy.
Review by: bobv http://code.google.com/p/google-web-toolkit/source/detail?r=6856 Deleted: /trunk/dev/core/src/com/google/gwt/dev/util/arg/OptionCompilationStateRetained.java Modified: /trunk/dev/core/src/com/google/gwt/dev/CompilePerms.java /trunk/dev/core/src/com/google/gwt/dev/Precompile.java /trunk/dev/core/src/com/google/gwt/dev/javac/StandardGeneratorContext.java /trunk/dev/core/src/com/google/gwt/dev/jdt/RebindPermutationOracle.java /trunk/dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java /trunk/dev/core/src/com/google/gwt/dev/jjs/JJSOptionsImpl.java /trunk/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java /trunk/user/src/com/google/gwt/junit/JUnitShell.java ======================================= --- /trunk/dev/core/src/com/google/gwt/dev/util/arg/OptionCompilationStateRetained.java Wed Oct 28 09:10:53 2009 +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2009 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.google.gwt.dev.util.arg; - -/** - * Option for retaining {...@link com.google.gwt.dev.javac.CompilationState} during - * a compile. Does not correspond to any command line option. This is used by - * hosted mode when doing a web mode compile to preserve the compilation state. - */ -public interface OptionCompilationStateRetained { - boolean isCompilationStateRetained(); - - void setCompilationStateRetained(boolean retained); -} ======================================= --- /trunk/dev/core/src/com/google/gwt/dev/CompilePerms.java Tue Nov 10 20:42:30 2009 +++ /trunk/dev/core/src/com/google/gwt/dev/CompilePerms.java Wed Nov 11 16:03:42 2009 @@ -334,7 +334,6 @@ File compilerWorkDir, PrecompileOptions precompilationOptions) throws UnableToCompleteException { precompilationOptions.setOptimizePrecompile(false); - precompilationOptions.setCompilationStateRetained(true); precompilationOptions.setGenDir(null); ModuleDef module = ModuleDefLoader.loadFromClassPath(logger, moduleName); ======================================= --- /trunk/dev/core/src/com/google/gwt/dev/Precompile.java Tue Nov 10 20:42:30 2009 +++ /trunk/dev/core/src/com/google/gwt/dev/Precompile.java Wed Nov 11 16:03:42 2009 @@ -175,10 +175,6 @@ public boolean isClassMetadataDisabled() { return jjsOptions.isClassMetadataDisabled(); } - - public boolean isCompilationStateRetained() { - return jjsOptions.isCompilationStateRetained(); - } public boolean isDraftCompile() { return jjsOptions.isDraftCompile(); @@ -227,10 +223,6 @@ public void setClassMetadataDisabled(boolean disabled) { jjsOptions.setClassMetadataDisabled(disabled); } - - public void setCompilationStateRetained(boolean retained) { - jjsOptions.setCompilationStateRetained(retained); - } public void setDisableUpdateCheck(boolean disabled) { disableUpdateCheck = disabled; @@ -288,8 +280,8 @@ private static class DistillerRebindPermutationOracle implements RebindPermutationOracle { - private final CompilationState compilationState; - private final StandardGeneratorContext generatorContext; + private CompilationState compilationState; + private StandardGeneratorContext generatorContext; private final Permutation[] permutations; private final StaticPropertyOracle[] propertyOracles; private final RebindOracle[] rebindOracles; @@ -316,6 +308,12 @@ permutations[i] = new Permutation(i, propertyOracles[i]); } } + + public void clear() { + generatorContext.clear(); + compilationState = null; + generatorContext = null; + } public String[] getAllPossibleRebindAnswers(TreeLogger logger, String requestTypeName) throws UnableToCompleteException { @@ -466,6 +464,8 @@ module, compilationState, generatorArtifacts, new PropertyPermutations(module.getProperties()), genDir, generatorResourcesDir); + // Allow GC later. + compilationState = null; if (dumpSignatureFile != null) { // Dump early to avoid generated types. SignatureDumper.dumpSignatures(logger, @@ -505,6 +505,8 @@ DistillerRebindPermutationOracle rpo = new DistillerRebindPermutationOracle( module, compilationState, generatedArtifacts, allPermutations, genDir, generatorResourcesDir); + // Allow GC later. + compilationState = null; PerfLogger.start("Precompile"); UnifiedAst unifiedAst = getCompiler(module).precompile(logger, module, rpo, declEntryPts, null, jjsOptions, rpo.getPermuationCount() == 1); ======================================= --- /trunk/dev/core/src/com/google/gwt/dev/javac/StandardGeneratorContext.java Wed Nov 11 07:10:41 2009 +++ /trunk/dev/core/src/com/google/gwt/dev/javac/StandardGeneratorContext.java Wed Nov 11 16:03:42 2009 @@ -208,7 +208,7 @@ private final Set<GeneratedUnit> committedGeneratedCups = new HashSet<GeneratedUnit>(); - private final CompilationState compilationState; + private CompilationState compilationState; private Class<? extends Generator> currentGenerator; @@ -246,6 +246,14 @@ diskCache = new DiskCache(); } } + + /** + * Frees memory used up by compilation state. + */ + public void clear() { + compilationState = null; + generators.clear(); + } /** * Commits a pending generated type. ======================================= --- /trunk/dev/core/src/com/google/gwt/dev/jdt/RebindPermutationOracle.java Tue Nov 10 20:42:30 2009 +++ /trunk/dev/core/src/com/google/gwt/dev/jdt/RebindPermutationOracle.java Wed Nov 11 16:03:42 2009 @@ -26,6 +26,13 @@ */ public interface RebindPermutationOracle { + /** + * Called when the compiler is done with this oracle, so memory can be freed + * up. After calling this method, the only legal method to call is + * {...@link #getAllPossibleRebindAnswers}. + */ + void clear(); + /** * Always answers with at least one name. */ ======================================= --- /trunk/dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java Tue Aug 4 09:54:58 2009 +++ /trunk/dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java Wed Nov 11 16:03:42 2009 @@ -16,7 +16,6 @@ package com.google.gwt.dev.jjs; import com.google.gwt.dev.util.arg.OptionAggressivelyOptimize; -import com.google.gwt.dev.util.arg.OptionCompilationStateRetained; import com.google.gwt.dev.util.arg.OptionDisableCastChecking; import com.google.gwt.dev.util.arg.OptionDisableClassMetadata; import com.google.gwt.dev.util.arg.OptionDraftCompile; @@ -24,8 +23,8 @@ import com.google.gwt.dev.util.arg.OptionOptimizePrecompile; import com.google.gwt.dev.util.arg.OptionRunAsyncEnabled; import com.google.gwt.dev.util.arg.OptionScriptStyle; -import com.google.gwt.dev.util.arg.OptionSoycEnabled; import com.google.gwt.dev.util.arg.OptionSoycDetailed; +import com.google.gwt.dev.util.arg.OptionSoycEnabled; /** * Controls options for the {...@link JavaToJavaScriptCompiler}. @@ -33,5 +32,5 @@ public interface JJSOptions extends OptionAggressivelyOptimize, OptionDisableClassMetadata, OptionDisableCastChecking, OptionDraftCompile, OptionEnableAssertions, OptionRunAsyncEnabled, OptionScriptStyle, - OptionSoycEnabled, OptionSoycDetailed, OptionCompilationStateRetained, OptionOptimizePrecompile { -} + OptionSoycEnabled, OptionSoycDetailed, OptionOptimizePrecompile { +} ======================================= --- /trunk/dev/core/src/com/google/gwt/dev/jjs/JJSOptionsImpl.java Tue Aug 4 09:54:58 2009 +++ /trunk/dev/core/src/com/google/gwt/dev/jjs/JJSOptionsImpl.java Wed Nov 11 16:03:42 2009 @@ -23,7 +23,6 @@ public class JJSOptionsImpl implements JJSOptions, Serializable { private boolean aggressivelyOptimize = true; - private boolean compilationStateRetained = false; private boolean disableCastChecking = false; private boolean disableClassMetadata = false; private boolean draftCompile = false; @@ -45,7 +44,6 @@ setAggressivelyOptimize(other.isAggressivelyOptimize()); setCastCheckingDisabled(other.isCastCheckingDisabled()); setClassMetadataDisabled(other.isClassMetadataDisabled()); - setCompilationStateRetained(other.isCompilationStateRetained()); setDraftCompile(other.isDraftCompile()); setEnableAssertions(other.isEnableAssertions()); setOutput(other.getOutput()); @@ -69,10 +67,6 @@ public boolean isClassMetadataDisabled() { return disableClassMetadata; } - - public boolean isCompilationStateRetained() { - return compilationStateRetained; - } public boolean isDraftCompile() { return draftCompile; @@ -109,10 +103,6 @@ public void setClassMetadataDisabled(boolean disabled) { disableClassMetadata = disabled; } - - public void setCompilationStateRetained(boolean retained) { - compilationStateRetained = retained; - } public void setDraftCompile(boolean draft) { this.draftCompile = draft; ======================================= --- /trunk/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java Wed Nov 11 11:58:14 2009 +++ /trunk/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java Wed Nov 11 16:03:42 2009 @@ -424,9 +424,7 @@ logger, allRootTypes.toArray(new String[allRootTypes.size()]), rpo); // Free up memory. - if (!options.isCompilationStateRetained()) { - module.clear(); - } + rpo.clear(); try { // HACK: Make i18n free its internal static state. Class<?> clazz = Class.forName( @@ -435,6 +433,7 @@ clazz.getDeclaredMethod("clear").invoke(null); } catch (Throwable e) { } + Memory.maybeDumpMemory("GoldenCudsBuilt"); // Check for compilation problems. We don't log here because any problems // found here will have already been logged by AbstractCompiler. ======================================= --- /trunk/user/src/com/google/gwt/junit/JUnitShell.java Wed Nov 11 15:50:48 2009 +++ /trunk/user/src/com/google/gwt/junit/JUnitShell.java Wed Nov 11 16:03:42 2009 @@ -911,7 +911,6 @@ } } LegacyCompilerOptions newOptions = new GWTCompilerOptionsImpl(options); - newOptions.setCompilationStateRetained(true); if (!new GWTCompiler(newOptions).run(getTopLogger(), module)) { throw new UnableToCompleteException(); } --~--~---------~--~----~------------~-------~--~----~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~----------~----~----~----~------~----~------~--~---
