< prev index next >

src/hotspot/share/jfr/recorder/stringpool/jfrStringPool.cpp

Print this page




  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "classfile/javaClasses.inline.hpp"
  27 #include "jfr/recorder/checkpoint/types/traceid/jfrTraceIdEpoch.hpp"
  28 #include "jfr/recorder/service/jfrOptionSet.hpp"
  29 #include "jfr/recorder/storage/jfrMemorySpace.inline.hpp"
  30 #include "jfr/recorder/repository/jfrChunkWriter.hpp"
  31 #include "jfr/recorder/storage/jfrStorageUtils.inline.hpp"
  32 #include "jfr/recorder/stringpool/jfrStringPool.hpp"
  33 #include "jfr/recorder/stringpool/jfrStringPoolWriter.hpp"
  34 #include "jfr/utilities/jfrTypes.hpp"
  35 #include "logging/log.hpp"

  36 #include "runtime/mutexLocker.hpp"
  37 #include "runtime/orderAccess.hpp"
  38 #include "runtime/safepoint.hpp"
  39 #include "runtime/thread.inline.hpp"
  40 
  41 typedef JfrStringPool::Buffer* BufferPtr;
  42 
  43 static JfrStringPool* _instance = NULL;
  44 static uint64_t store_generation = 0;
  45 static uint64_t serialized_generation = 0;
  46 
  47 inline void set_generation(uint64_t value, uint64_t* const dest) {
  48   assert(dest != NULL, "invariant");
  49   Atomic::release_store(dest, value);
  50 }
  51 static void increment_store_generation() {
  52   const uint64_t current_serialized = Atomic::load_acquire(&serialized_generation);
  53   const uint64_t current_stored = Atomic::load_acquire(&store_generation);
  54   if (current_serialized == current_stored) {
  55     set_generation(current_serialized + 1, &store_generation);
  56   }
  57 }




  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "classfile/javaClasses.inline.hpp"
  27 #include "jfr/recorder/checkpoint/types/traceid/jfrTraceIdEpoch.hpp"
  28 #include "jfr/recorder/service/jfrOptionSet.hpp"
  29 #include "jfr/recorder/storage/jfrMemorySpace.inline.hpp"
  30 #include "jfr/recorder/repository/jfrChunkWriter.hpp"
  31 #include "jfr/recorder/storage/jfrStorageUtils.inline.hpp"
  32 #include "jfr/recorder/stringpool/jfrStringPool.hpp"
  33 #include "jfr/recorder/stringpool/jfrStringPoolWriter.hpp"
  34 #include "jfr/utilities/jfrTypes.hpp"
  35 #include "logging/log.hpp"
  36 #include "runtime/atomic.hpp"
  37 #include "runtime/mutexLocker.hpp"

  38 #include "runtime/safepoint.hpp"
  39 #include "runtime/thread.inline.hpp"
  40 
  41 typedef JfrStringPool::Buffer* BufferPtr;
  42 
  43 static JfrStringPool* _instance = NULL;
  44 static uint64_t store_generation = 0;
  45 static uint64_t serialized_generation = 0;
  46 
  47 inline void set_generation(uint64_t value, uint64_t* const dest) {
  48   assert(dest != NULL, "invariant");
  49   Atomic::release_store(dest, value);
  50 }
  51 static void increment_store_generation() {
  52   const uint64_t current_serialized = Atomic::load_acquire(&serialized_generation);
  53   const uint64_t current_stored = Atomic::load_acquire(&store_generation);
  54   if (current_serialized == current_stored) {
  55     set_generation(current_serialized + 1, &store_generation);
  56   }
  57 }


< prev index next >