Можно ли установить уровень оптимизации для RhinoScriptEngine в Java 6? - PullRequest
6 голосов
/ 09 августа 2011

Я столкнулся с проблемой, когда Rhino выдает "Ошибка генерации обнаруженного кода при компиляции скрипта: сгенерированный байт-код для метода превышает ограничение в 64 КБ" исключение при запуске Rhino через javax.script.ScriptEngine API.Кажется, что принятым решением является setOptimizationLevel(-1) для sun.org.mozilla.javascript.Context.

К сожалению, я не могу получить доступ к Context, созданному ContextFactory.Я попытался добавить ContextFactory.Listener к ContextFactory.getGlobal(), который изменит Context после создания, но мой слушатель, кажется, никогда не вызывается.Я также взглянул на исходный код RhinoScriptEngine из Java 6 , чтобы узнать, есть ли свойство, которое я мог бы установить, из которого ContextFactory будет считывать, чтобы определить значение уровня оптимизации.

Насколько я могу судить, в Java 7 RhinoScriptEngine устанавливает уровень оптимизации на -1 по умолчанию , а позволяет устанавливать уровень оптимизации с помощью свойства rhino.opt.level.Сравните метод makeContext() в Java 7 версии с makeContext() методом в Java 6 версии , чтобы понять, что я имею в виду.

Насколько яМожно сказать, я считаю, что мой лучший вариант - запускать Rhino напрямую, как показано в этом примере использования Rhino для запуска компилятора CoffeeScript .Хотя, как вы можете видеть, код намного сложнее, поэтому я бы предпочел использовать API javax.script.ScriptEngine, если это возможно, продолжая поддерживать Java 6. Есть ли другие варианты?

Ответы [ 2 ]

2 голосов
/ 25 марта 2013

Нет , согласно документации: http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/index.html#jsengine

Где написано:

Некоторые компоненты были исключены из-за занимаемой площади и по соображениям безопасности:

  1. Компиляция JavaScript в байт-код (также называемая «оптимизатором»). это особенность зависит от библиотеки генерации классов. Удаление этого Функция означает, что JavaScript всегда будет интерпретироваться . удаление этой функции не влияет на выполнение скрипта, потому что оптимизатор прозрачный.

Класс оптимизатора был исключен для связывания его с JDK6, поэтому уровень оптимизации не может быть установлен для Java 6.

1 голос
/ 15 сентября 2011

Я работаю с 6, и он также, по-видимому, установлен на -1 по умолчанию. Или, скорее, если sun.org.mozilla.javascript.internal.optimizer.Codegen не находится на пути к классам, он установлен в -1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...