<div dir="ltr">Hi,<div><br>In the current draft of JEP 401, I saw the following statement:</div><div><br></div><div>> The garbage collection APIs in java.lang.ref and java.util.WeakHashMap do not allow developers to manually manage value objects in the heap.</div><div>> Attempts to create Reference objects for value objects throw IdentityException at run time.</div><div><br></div><div>We could clearly have pretended that all value objects exist forever and are never collected, so that Reference or WeakHashMap would still work with value objects.</div><div>Obviously, doing so would break far fewer existing codes, whereas having them directly throw IdentityException would break a lot more code.</div><div><br></div><div>As an analogy, I think this is very similar to ThreadLocal on virtual threads. Although virtual threads make many use cases of ThreadLocal low-performance and high-memory, </div><div>Project Loom did not outright forbid users from using ThreadLocal on virtual threads, yet Project Valhalla chose to break this (admittedly inefficient) writing style.</div><div><br>I don’t understand why Project Valhalla made this choice. Has there been any related discussion in the past? I’m really eager to know the reasoning behind this decision.</div><div><br></div><div>Glavo</div></div>