Ответ 1
В этой серии статей обсуждаются оптимизация V8. Вкратце:
- Он генерирует собственный машинный код - не байт-код (элементы дизайна V8)
- Точная сборка мусора (Wikipedia)
- Встроенное кэширование вызываемых методов (Wikipedia)
- Сохранение информации о переходе класса, чтобы объекты с одинаковыми свойствами были сгруппированы вместе (Элементы дизайна V8)
Первые две точки могут не сильно помочь вам в этой ситуации. Третий может показать понимание того, как все вещи собраны вместе. Последнее может помочь вам создать объекты с одинаковыми свойствами, чтобы они использовали одни и те же скрытые классы.
В этом сообщении в блоге обсуждаются некоторые из оптимизаций SquirrelFish Extreme:
- Оптимизация Bytecode
- Полиморфный встроенный кеш (например, V8)
- Контекстная резьба JIT (введение генерации собственного машинного кода, например V8)
- Регулярное выражение JIT
TraceMonkey оптимизирован с помощью трассировки. Я мало знаю об этом, но похоже, что он обнаруживает тип переменной в некотором "горячем" коде (часто выполняется код в циклах) и создает оптимизированный код, основанный на типе этой переменной. Если тип переменной изменяется, он должен перекомпилировать код, основанный на этом, я бы сказал, что вам следует избегать изменения типа переменной в цикле.