Mostly sounds like a case of fixing up some non-optimal defaults - the real hard part is gathering data from real world use cases which is required to make your defaults better.
1) Reducing the V8 heap page size from 1M to 512KB ... results in 2x memory reduction
2) The memory visualization tool helped us discover that the background parser would keep an entire zone alive long after the code was already compiled. ... resulted in reduced average and peak memory usage.
3) C++ compiler not packing structs optimally for V8s case - manual packing saves some peak memory.