The memory allocation model of the Delphi interface type uses
some kind of Automatic Reference Counting (ARC). In order to avoid
memory and resource leaks and potential random errors in the applications (aka
the terrible EAccessViolation exception on customer side) when
using interface, a SOA framework like mORMot has to offer
so-called Weak pointers and Zeroing Weak pointers
features.
Note that garbage collector based languages (like Java or C#) do not suffer from this problem, since the circular references are handled by their memory model: objects lifetime are maintained globally by the memory manager. Of course, it will increase memory use, slowdown the process due to additional actions during allocation and assignments (all objects and their references have to be maintained in internal lists), and may slow down the application when garbage collector enters in action. In order to avoid such issues when performance matters, experts tend to pre-allocate and re-use objects: this is one common limitation of this memory model, and why Delphi is still a good candidate (like unmanaged C or C++ - and also Objective C) when it deals with performance and stability.
