From 9d4f3b2c2c379b58c2227b61d21c9932ec745ab3 Mon Sep 17 00:00:00 2001 From: Zhengyu Gu Date: Wed, 22 Jan 2020 07:40:11 -0500 Subject: [PATCH] 8237396: JvmtiTagMap::weak_oops_do() should not trigger barriers Reviewed-by: stefank, rkennke --- src/hotspot/share/prims/jvmtiTagMap.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/hotspot/share/prims/jvmtiTagMap.cpp b/src/hotspot/share/prims/jvmtiTagMap.cpp index cc5469857d..c495a017f7 100644 --- a/src/hotspot/share/prims/jvmtiTagMap.cpp +++ b/src/hotspot/share/prims/jvmtiTagMap.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -97,6 +97,11 @@ class JvmtiTagHashmapEntry : public CHeapObj { inline oop object_peek() { return NativeAccess::oop_load(object_addr()); } + + inline oop object_raw() { + return RawAccess<>::oop_load(object_addr()); + } + inline jlong tag() const { return _tag; } inline void set_tag(jlong tag) { @@ -3352,7 +3357,7 @@ void JvmtiTagMap::do_weak_oops(BoolObjectClosure* is_alive, OopClosure* f) { JvmtiTagHashmapEntry* next = entry->next(); // has object been GC'ed - if (!is_alive->do_object_b(entry->object_peek())) { + if (!is_alive->do_object_b(entry->object_raw())) { // grab the tag jlong tag = entry->tag(); guarantee(tag != 0, "checking"); @@ -3370,7 +3375,7 @@ void JvmtiTagMap::do_weak_oops(BoolObjectClosure* is_alive, OopClosure* f) { ++freed; } else { f->do_oop(entry->object_addr()); - oop new_oop = entry->object_peek(); + oop new_oop = entry->object_raw(); // if the object has moved then re-hash it and move its // entry to its new location. @@ -3404,7 +3409,7 @@ void JvmtiTagMap::do_weak_oops(BoolObjectClosure* is_alive, OopClosure* f) { // Re-add all the entries which were kept aside while (delayed_add != NULL) { JvmtiTagHashmapEntry* next = delayed_add->next(); - unsigned int pos = JvmtiTagHashmap::hash(delayed_add->object_peek(), size); + unsigned int pos = JvmtiTagHashmap::hash(delayed_add->object_raw(), size); delayed_add->set_next(table[pos]); table[pos] = delayed_add; delayed_add = next;