Заставить всю арифметику Java использовать strictfp во время выполнения, используя javassist?

Учитывая Java-приложение, которое было написано с учетом производительности (т. е. методы намеренно не объявлены как «strictfp» в исходном коде), возможно ли разрешить пользователям запускать все приложение в режиме strictfp?

Похоже, что грубым подходом было бы просто добавить атрибут «strictfp» ко всем методам всех классов, используя собственный загрузчик классов, написанный с использованием javassist. Это будет похоже на:

http://www.verious.com/qa/no-strictfp-in-scala-workarounds/

Однако загрузчику класса потребуется добавить атрибут strictpf ко всем методам класса все в приложении, включая закрытые. (Просто приложение слишком большое и сложное, чтобы явно перечислить все возможные методы, для которых может потребоваться атрибут strictfp.)

API отражения в javassist, похоже, не поддерживает перечисление частных методов:

http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/html/javassist/CtClass.html#getMethods()

Возможно ли то, что я хочу сделать в javassist (или вообще с помощью пользовательского загрузчика классов)?


person user2524735    schedule 26.06.2013    source источник
comment
Вы пробовали getDeclaredBehaviors()?   -  person Antimony    schedule 27.06.2013


Ответы (1)


Я не знаю, поможет ли это вам, но если бы вы могли перейти на использование JVM Oracle JRockit, у него есть опция JVM для включения strictfp глобально — '-XX+:-StrictFP`

(На JVM Hotspot есть опция «-XX+:-UseStrictFP», но она имеет обратный эффект.)

Ссылка:

person Stephen C    schedule 26.06.2013