Freeing unused memory is a major issue, causing unwanted GC delays in some languages, use-after-free vulnerabilities in others, and Rust has significant complexity to try to fix the issue.
Many server-side applications are request (or transaction) based, with no state shared between requests. An idea I had was that memory allocation could be based on requests/transactions. Roughly speaking, each allocation is associated with a request, and when the request completes, the associated allocations are freed. This would provide automatic memory management from the application's point of view, without GC delays.
Has this approach been attempted in any real-world systems? What are the potential limitations?