Sure, but each request has its own context. Shared resources like DB connection pools will be longer lived but by definition they aren’t alllcated by the request thread. So why not simply exempt everything allocated by a request thread from GC, and simply destroy it on request completion?
Generational GC assumes that short lived objects tend to come in groups, which is probably the best you can do in an OO language with shared everything.