Я внезапно сталкиваюсь с проблемой с Нашорном с момента внесения изменений, но я не уверен в фактической основной причине проблемы , но, похоже, связано с тем, сколько пары ключевых значений добавлено в двигатель .
Я использую Nashorn (Nashorn 15.3). Переменные, существует о 200 переменных маски .
Например, пользователь определяет маску как артист - альбом
Затем для каждой песни мы делаем следующее:
ScriptEngine engine = new org.openjdk.nashorn.api.scripting.NashornScriptEngineFactory().getScriptEngine();
for(SongFieldName next:SongFieldName.values())
{
engine.put(next.getScriptVar(), song.getFieldValue(next.getSongFieldKey());
}
file.setFilename((String)engine.eval(mask));
< /code>
Итак, мы получаем двигатель скрипта, а затем для песни мы размещаем пары значений ключей, содержащую переменную маски (например, артист) и фактическое значение в песне (например, Stevie Wonder), затем мы оцениваем маску и используем ее для установки имени файла, это работало нормально в течение многих лет. < /p>
Однако значения. Например, значение художника может содержать несколько человек, поэтому я хотел, чтобы у меня было простой способ использования, чтобы просто получить индексированное значение. Таким образом, для каждой переменной я создавал 10 версий, каждая из которых отображается со следующим индексированным значением или пустым, если не имеет значения следующим образом. < /P>
List values = song.getFieldValues(next.getSongFieldKey());
for(int i=0; i < 10;i++)
{
if(values.size()>i)
{
engine.put(next.getScriptVar() + "_index" + i,values.get(i));
}
else
{
engine.put(next.getScriptVar() + "_index" + i, "");
}
}
Это казалось хорошим, но клиент сообщил о проблеме, и я повторил проблему, которая возникает только тогда, когда добавляется этот дополнительный код.javax.script.ScriptException: ReferenceError: "discno" is not defined in at line number 81
at org.openjdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:463)
at org.openjdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:447)
at org.openjdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:399)
at org.openjdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:395)
at org.openjdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:151)
at java.scripting/javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:262)
Таким образом, кажется, что, возможно, я достигаю некоторого предела, и теперь он перезаписывается, когда вместо добавления 200 переменных я добавляю приблизительно 2000 переменных в двигатель? /> Или мне нужно синхронизировать использование сценаризма, так как он возвращается с фабрики? /> Код Factory getScriptengine () выглядит следующим образом < /p>
< /li>
< /ol>
public ScriptEngine getScriptEngine()
{
try {
return new NashornScriptEngine(this, DEFAULT_OPTIONS, getAppClassLoader(), (ClassFilter)null);
} catch (RuntimeException var2) {
RuntimeException e = var2;
if (Context.DEBUG) {
e.printStackTrace();
}
throw e;
}
}
Таким образом, мы не повторно используем тот же двигатель сценария, но, возможно, двигатель скрипта разделяет переменную кеш? /> Обновление 2 < /h2>
Я изменил код для индексированных переменных, чтобы сохранить массив для каждого имени FieldName, и это имеет решающую проблему, хотя я не знаю, почему. < /p>
engine.put(next.getScriptVar(), cleanValue(next.getSongFieldKey(), song.getFieldValueSemiColonAndSpaceSeparatedOrEmptyString(next.getSongFieldKey())));
addIndexedValues( engine, song, next);
private static void addIndexedValues( ScriptEngine engine, Song song, SongFieldName fieldName)
{
List values = song.getFieldValues(fieldName.getSongFieldKey());
String[] value = new String[INDEX_SIZE];
for(int i=0; i < INDEX_SIZE;i++)
{
if(values.size()>i)
{
value = cleanValue(fieldName.getSongFieldKey(), values.get(i));
}
else
{
value = "";
}
}
engine.put(fieldName.getScriptVar() + "_index", value);
}
Подробнее здесь: https://stackoverflow.com/questions/789 ... alue-pairs
Нэшорн нажимает лимит с парами значений ключей? ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как эффективно структурировать логику преобразования между парами моделей в Django?
Anonymous » » в форуме Python - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Получить среднее значение между последовательными парами массива numpy
Anonymous » » в форуме Python - 0 Ответы
- 24 Просмотры
-
Последнее сообщение Anonymous
-