From 8f0acd949be2c01c445e402ae81421d4554f7d2b Mon Sep 17 00:00:00 2001 Date: Fri, 13 Dec 2019 12:02:23 +0000 Subject: [PATCH] PS GC: adding acquire_size method for PSParallelCompact::mark_obj. Summary: GC: adding acquire_size method for PSParallelCompact::mark_obj. LLT: NA Bug url: --- .../share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp | 2 +- hotspot/src/share/vm/oops/oop.hpp | 1 + hotspot/src/share/vm/oops/oop.inline.hpp | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp index 881f380cea..f971383a09 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp @@ -1326,7 +1326,7 @@ class PSParallelCompact : AllStatic { }; inline bool PSParallelCompact::mark_obj(oop obj) { - const int obj_size = obj->size(); + const int obj_size = obj->acquire_size(); if (mark_bitmap()->mark_obj(obj, obj_size)) { _summary_data.add_obj(obj, obj_size); return true; diff --git a/hotspot/src/share/vm/oops/oop.hpp b/hotspot/src/share/vm/oops/oop.hpp index 142ab2769c..42ad9307f7 100644 --- a/hotspot/src/share/vm/oops/oop.hpp +++ b/hotspot/src/share/vm/oops/oop.hpp @@ -123,6 +123,7 @@ class oopDesc { // Returns the actual oop size of the object int size(); + int acquire_size(); // Sometimes (for complicated concurrency-related reasons), it is useful // to be able to figure out the size of an object knowing its klass. diff --git a/hotspot/src/share/vm/oops/oop.inline.hpp b/hotspot/src/share/vm/oops/oop.inline.hpp index b519d86118..803080c9e7 100644 --- a/hotspot/src/share/vm/oops/oop.inline.hpp +++ b/hotspot/src/share/vm/oops/oop.inline.hpp @@ -839,6 +839,10 @@ inline int oopDesc::size() { return size_given_klass(klass()); } +inline int oopDesc::acquire_size() { + return size_given_klass(klass_or_null_acquire()); +} + inline void update_barrier_set(void* p, oop v, bool release = false) { assert(oopDesc::bs() != NULL, "Uninitialized bs in oop!"); oopDesc::bs()->write_ref_field(p, v, release); -- 2.12.3