[PATCH] Reduce Chance Of Mistakenly Early Backing Memory Cleanup
vladimir.x.ivanov at oracle.com
Tue Feb 6 19:23:48 UTC 2018
> Objects.requireNonNull() shows zero overhead here.
> I guess the main question is whether Objects.requireNonNull(this)
> behavior in the former test is a result of chance and current Hotspot
> behavior or is it somehow guaranteed by the spec.
I haven't looked into what actually happens in JIT-compilers on your
benchmark, but I'm surprised it works at all.
Explicit null check on the receiver is an easy target for elimination
and should be effectively a no-op in generated code. (And that's what
you observe with the benchmark!) Once the check is gone, nothing keeps
receiver alive anymore (past the last usage).
So, I'd say such behavior it's a matter of chance in your case and can't
be relied on in general. And definitely not something guaranteed by JVMS.
More information about the core-libs-dev