From 5eb6a95a44a96a5d6609698e4a25eec4d5569435 Mon Sep 17 00:00:00 2001 From: Attila Szegedi Date: Tue, 26 Aug 2014 15:04:20 +0200 Subject: [PATCH] 8055954: Do not parallelize class installation Reviewed-by: jlaskey, sundar --- .../jdk/nashorn/internal/runtime/Context.java | 43 +++++++------------ 1 file changed, 15 insertions(+), 28 deletions(-) diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Context.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Context.java index d4355777b46..15d4ba4f0a2 100644 --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Context.java +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Context.java @@ -163,39 +163,26 @@ public final class Context { @Override public void initialize(final Collection> classes, final Source source, final Object[] constants) { - // do these in parallel, this significantly reduces class installation overhead - // however - it still means that every thread needs a separate doPrivileged - final Global global = currentGlobal.get(); - classes.parallelStream().forEach( - new Consumer>() { + try { + AccessController.doPrivileged(new PrivilegedExceptionAction() { @Override - public void accept(final Class clazz) { - // Global threadlocal may be needed by StructureLoader during in field lookup. - currentGlobal.set(global); - try { - AccessController.doPrivileged(new PrivilegedExceptionAction() { - @Override - public Void run() { - try { - //use reflection to write source and constants table to installed classes - final Field sourceField = clazz.getDeclaredField(SOURCE.symbolName()); - sourceField.setAccessible(true); - sourceField.set(null, source); + public Void run() throws Exception { + for (final Class clazz : classes) { + //use reflection to write source and constants table to installed classes + final Field sourceField = clazz.getDeclaredField(SOURCE.symbolName()); + sourceField.setAccessible(true); + sourceField.set(null, source); - final Field constantsField = clazz.getDeclaredField(CONSTANTS.symbolName()); - constantsField.setAccessible(true); - constantsField.set(null, constants); - } catch (final IllegalAccessException | NoSuchFieldException e) { - throw new RuntimeException(e); - } - return null; - } - }); - } catch (final PrivilegedActionException e) { - throw new RuntimeException(e); + final Field constantsField = clazz.getDeclaredField(CONSTANTS.symbolName()); + constantsField.setAccessible(true); + constantsField.set(null, constants); } + return null; } }); + } catch (final PrivilegedActionException e) { + throw new RuntimeException(e); + } } @Override