< prev index next >

src/hotspot/share/gc/shared/stringdedup/stringDedupTable.cpp

Print this page
rev 57656 : 8236878: Use atomic instruction to update StringDedupTable's entries and entries_removed counters

*** 1,7 **** /* ! * Copyright (c) 2014, 2019, 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 * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2014, 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 * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 213,223 **** const double StringDedupTable::_max_cache_factor = 0.1; // Cache a maximum of 10% of the table size const uintx StringDedupTable::_rehash_multiple = 60; // Hash bucket has 60 times more collisions than expected const uintx StringDedupTable::_rehash_threshold = (uintx)(_rehash_multiple * _grow_load_factor); uintx StringDedupTable::_entries_added = 0; ! uintx StringDedupTable::_entries_removed = 0; uintx StringDedupTable::_resize_count = 0; uintx StringDedupTable::_rehash_count = 0; StringDedupTable* StringDedupTable::_resized_table = NULL; StringDedupTable* StringDedupTable::_rehashed_table = NULL; --- 213,223 ---- const double StringDedupTable::_max_cache_factor = 0.1; // Cache a maximum of 10% of the table size const uintx StringDedupTable::_rehash_multiple = 60; // Hash bucket has 60 times more collisions than expected const uintx StringDedupTable::_rehash_threshold = (uintx)(_rehash_multiple * _grow_load_factor); uintx StringDedupTable::_entries_added = 0; ! volatile uintx StringDedupTable::_entries_removed = 0; uintx StringDedupTable::_resize_count = 0; uintx StringDedupTable::_rehash_count = 0; StringDedupTable* StringDedupTable::_resized_table = NULL; StringDedupTable* StringDedupTable::_rehashed_table = NULL;
*** 477,489 **** removed += unlink_or_oops_do(cl, table_half + partition_begin, table_half + partition_end, worker_id); } // Delayed update to avoid contention on the table lock if (removed > 0) { ! MutexLocker ml(StringDedupTable_lock, Mutex::_no_safepoint_check_flag); ! _table->_entries -= removed; ! _entries_removed += removed; } } uintx StringDedupTable::unlink_or_oops_do(StringDedupUnlinkOrOopsDoClosure* cl, size_t partition_begin, --- 477,489 ---- removed += unlink_or_oops_do(cl, table_half + partition_begin, table_half + partition_end, worker_id); } // Delayed update to avoid contention on the table lock if (removed > 0) { ! assert_locked_or_safepoint_weak(StringDedupTable_lock); ! Atomic::sub(&_table->_entries, removed); ! Atomic::add(&_entries_removed, removed); } } uintx StringDedupTable::unlink_or_oops_do(StringDedupUnlinkOrOopsDoClosure* cl, size_t partition_begin,
< prev index next >