First of all, do not mix finalizers with links. both affect how quickly an object can be deleted from memory, and everything you can do with the finalizer can be improved with the appropriate link type.
Secondly, as I already mentioned, there may be a gc delay associated with the use of links. At least for “general” gc algorithms, low / soft-bound objects can go through an extra gc loop before they are fully recovered. The significant differences between weak and soft links are that weak links are aggressive and soft links are usually held "as long as possible." this is probably what bothers you.
when you run objects with weak links, the material is cleared when you go, avoiding OOME.
when you start soft-snapped objects, all soft-snapped objects are retained until you get close to the limit. then, when the memory becomes hard, gc tries to start releasing objects with soft binding, but takes too much time (since it may take several gc passes to completely restore the memory), and you get OOME.
I have only a superficial knowledge of G1 gc, so I don’t know why it "works" in this scenaior.
In general, soft links look good, but they do not always work as good as you would like due to a delay in land reclamation. Also, this is a great article with some additional helpful details.
source share