< prev index next >

src/jdk/nashorn/internal/runtime/ScriptEnvironment.java

Print this page
rev 1904 : 8138882: Performance regression due to anonymous classloading
Reviewed-by: attila, sundar
rev 1905 : 8162955: Activate anonymous class loading for small sources
Reviewed-by: sundar

*** 208,217 **** --- 208,231 ---- public final Map<String, LoggerInfo> _loggers; /** Timing */ public final Timing _timing; + /** Whether to use anonymous classes. See {@link #useAnonymousClasses(int)}. */ + private final AnonymousClasses _anonymousClasses; + private enum AnonymousClasses { + AUTO, + OFF, + ON + } + + /** Size threshold up to which we use anonymous classes in {@link AnonymousClasses#AUTO} setting */ + private final int _anonymous_classes_threshold; + + /** Default value for anonymous class threshold */ + private final static int DEFAULT_ANON_CLASS_THRESHOLD = 512; + /** * Constructor * * @param options a Options object * @param out output print writer
*** 273,282 **** --- 287,310 ---- _scripting = options.getBoolean("scripting"); _strict = options.getBoolean("strict"); _version = options.getBoolean("version"); _verify_code = options.getBoolean("verify.code"); + final String anonClasses = options.getString("anonymous.classes"); + if (anonClasses == null || anonClasses.equals("auto")) { + _anonymousClasses = AnonymousClasses.AUTO; + } else if (anonClasses.equals("true")) { + _anonymousClasses = AnonymousClasses.ON; + } else if (anonClasses.equals("false")) { + _anonymousClasses = AnonymousClasses.OFF; + } else { + throw new RuntimeException("Unsupported value for anonymous classes: " + anonClasses); + } + + this._anonymous_classes_threshold = Options.getIntProperty( + "nashorn.anonymous.classes.threshold", DEFAULT_ANON_CLASS_THRESHOLD); + final String language = options.getString("language"); if (language == null || language.equals("es5")) { _es6 = false; } else if (language.equals("es6")) { _es6 = true;
*** 405,410 **** --- 433,448 ---- */ public boolean isTimingEnabled() { return _timing != null ? _timing.isEnabled() : false; } + /** + * Returns true if compilation should use anonymous classes. + * @param sourceLength length of source being compiled. + * @return true if anonymous classes should be used + */ + public boolean useAnonymousClasses(final int sourceLength) { + return _anonymousClasses == AnonymousClasses.ON + || (_anonymousClasses == AnonymousClasses.AUTO && sourceLength <= _anonymous_classes_threshold); + } + }
< prev index next >