RFR(s): 8077415: Remove duplicate variables holding the CollectedHeap
Kim Barrett
kim.barrett at oracle.com
Sat Apr 11 19:05:47 UTC 2015
On Apr 10, 2015, at 10:51 AM, Per Liden <per.liden at oracle.com> wrote:
>
> Hi,
>
> Universe::_collectedHeap points to the current CollectedHeap. However, collectors also have their own static instances for no real good reason. This patch removes all but the Universe::_collectedHeap and let users call Universe::heap() where needed.
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8077415
>
> Webrev: http://cr.openjdk.java.net/~pliden/8077415/webrev.0/
>
> (This patch build on top of http://cr.openjdk.java.net/~pliden/8077413/webrev.0/ which is currently out for review)
>
> cheers,
> /Per
------------------------------------------------------------------------------
src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
3311 G1CollectedHeap* G1CollectedHeap::heap() {
3312 G1CollectedHeap* heap = (G1CollectedHeap*)Universe::heap();
3313 assert(heap != NULL, "Uninitialized access to G1CollectedHeap::heap()");
3314 assert(heap->kind() == CollectedHeap::G1CollectedHeap, "Not a G1CollectedHeap");
3315 return heap;
3316 }
Please don't do this. If the heap isn't of the expected kind, then
the cast invokes undefined behavior and the heap->kind() check could
crash. So the assert actually provides a false sense of safety.
It was for this kind of thing that I introduced FakeRttiSupport and
used it for BarrierSet downcasts. I was intending to use it similarly
for CollectedHeap downcasts, but have not gotten around to doing so.
See barrier_set_cast<>().
More information about the hotspot-gc-dev
mailing list