If this is within single application run and if you deduce those 400MB from e.g. task manager, then the behaviour is as expected and it is a feature of memory allocator - it retains the memory allocated from the system to boost the performance.
I believe such behaviour is pretty standard for all malloc/new implementations, not U++ specific.
In U++, we have planned MemoryShrink function that is supposed to release as much memory as possible back to the system, but it is not really developed yet and pressure to do it is low. (The real reason why it is not yet developed is that Win32 has hard limit on number of memory commit blocks which is not quite compatible with what we need).