I think I discovered something not previously discussed that may help the folks with heap errors.
Firstly thanks to the heroes like le_hibou for researching and coming up with solutions for the heap problem. Like others before me, I have used Pesadilla's Deduplicator, Bill Prime's Var Manager to reduce the duplicates and clutter. After which I use le_hibou's python tool to ID the remaining worst morph offenders so I can move them away from AddonPackages. And finally sfishere's Var Browser is the only way I can even load VAM because of my huge VAR collection.
Because of the solutions listed above, for me, most scenes (99.9+%) will load without crashing. But sometimes (around 1/4 to 1/3 of the time) I get the heap error if I swap in atoms/Looks, or on subsequent loads of scenes.
Then I discovered something that I don't think I've seen mentioned before: manual heap management.
As we know from the previous posters, Unity's garbage collection is less than ideal. VAM can be configured to do its own GC. But very importantly, MeshedVR gives us the option to trigger garbage collection manually.
You'll find this function in the User Preference section under the Performance 2 tab. The screen shot is below.
While using VAM, if you watch this screen as you load scenes and assets, the amount of utilised memory fluctuates. VAM does mem optimization based on what options you select at the top of this page. But what I notice is that oftentimes I can further lower the used memory if I manually force memory optimization. In some cases, VAM's usage can drop by more than 5GB.
This is huge because my empirical non-rigorous experience is that I will get heap errors when memory usage exceeds 20GB. (I have 64GB system memory)
So these days, I trigger the optimization before I change scenes or import looks. This is a bit of a pain, but this is a heck of lot better than getting heap error and having to restart VAM.
HTH