Skip to content

Commit 234ad10

Browse files
committed
[GR-24957] Allow Engine to be reclaimed in GraalJSEngineFactory.
PullRequest: js/1726
2 parents 524a62b + 2fea640 commit 234ad10

File tree

2 files changed

+23
-7
lines changed

2 files changed

+23
-7
lines changed

graal-js/src/com.oracle.truffle.js.scriptengine.test/src/com/oracle/truffle/js/scriptengine/test/TestEngineNashorn.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ public void factoryTests() {
138138

139139
invertedAssertEquals(fac.getLanguageName(), "ECMAScript");
140140
invertedAssertEquals(fac.getParameter(ScriptEngine.NAME), "javascript");
141-
invertedAssertEquals(fac.getLanguageVersion(), "ECMA - 262 Edition 9");
141+
invertedAssertEquals(fac.getLanguageVersion(), "ECMAScript 262 Edition 11");
142142
invertedAssertEquals(fac.getEngineName(), "Graal.js");
143143
invertedAssertEquals(fac.getOutputStatement("context"), "print(context)");
144144
invertedAssertEquals(fac.getProgram("print('hello')", "print('world')"), "print('hello');print('world');");

graal-js/src/com.oracle.truffle.js.scriptengine/src/com/oracle/truffle/js/scriptengine/GraalJSEngineFactory.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
*/
4141
package com.oracle.truffle.js.scriptengine;
4242

43+
import java.lang.ref.WeakReference;
4344
import java.lang.reflect.Field;
4445
import java.util.ArrayList;
4546
import java.util.Arrays;
@@ -58,7 +59,7 @@ public final class GraalJSEngineFactory implements ScriptEngineFactory {
5859
private static final String ENGINE_NAME = "Graal.js";
5960
private static final String NAME = "javascript";
6061
private static final String LANGUAGE = "ECMAScript";
61-
private static final String LANGUAGE_VERSION = "ECMA - 262 Edition 9";
62+
private static final String LANGUAGE_VERSION = "ECMAScript 262 Edition 11";
6263

6364
private static final String NASHORN_ENGINE_NAME = "Oracle Nashorn";
6465
private static final List<String> names;
@@ -89,21 +90,36 @@ public final class GraalJSEngineFactory implements ScriptEngineFactory {
8990
extensions = Collections.unmodifiableList(extensionList);
9091
}
9192

92-
private final Engine engine;
93+
private WeakReference<Engine> defaultEngine;
94+
private final Engine userDefinedEngine;
9395

9496
public GraalJSEngineFactory() {
95-
this.engine = Engine.newBuilder().allowExperimentalOptions(true).build();
97+
this.defaultEngine = null; // lazy
98+
this.userDefinedEngine = null;
9699
}
97100

98101
GraalJSEngineFactory(Engine engine) {
99-
this.engine = engine;
102+
this.userDefinedEngine = engine;
103+
}
104+
105+
private static Engine createDefaultEngine() {
106+
return Engine.newBuilder().allowExperimentalOptions(true).build();
100107
}
101108

102109
/**
103110
* Returns the underlying polyglot engine.
104111
*/
105112
public Engine getPolyglotEngine() {
106-
return engine;
113+
if (userDefinedEngine != null) {
114+
return userDefinedEngine;
115+
} else {
116+
Engine engine = defaultEngine == null ? null : defaultEngine.get();
117+
if (engine == null) {
118+
engine = createDefaultEngine();
119+
defaultEngine = new WeakReference<>(engine);
120+
}
121+
return engine;
122+
}
107123
}
108124

109125
@Override
@@ -113,7 +129,7 @@ public String getEngineName() {
113129

114130
@Override
115131
public String getEngineVersion() {
116-
return engine.getVersion();
132+
return getPolyglotEngine().getVersion();
117133
}
118134

119135
@Override

0 commit comments

Comments
 (0)