mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 23:04:50 +02:00
8245226: Clean-up FlagSetting and remove misuse
Reviewed-by: neliasso, dholmes
This commit is contained in:
parent
30bc2b7ca1
commit
195c45a0e1
9 changed files with 94 additions and 60 deletions
|
@ -95,13 +95,13 @@
|
||||||
#include "oops/compressedOops.inline.hpp"
|
#include "oops/compressedOops.inline.hpp"
|
||||||
#include "oops/oop.inline.hpp"
|
#include "oops/oop.inline.hpp"
|
||||||
#include "runtime/atomic.hpp"
|
#include "runtime/atomic.hpp"
|
||||||
#include "runtime/flags/flagSetting.hpp"
|
|
||||||
#include "runtime/handles.inline.hpp"
|
#include "runtime/handles.inline.hpp"
|
||||||
#include "runtime/init.hpp"
|
#include "runtime/init.hpp"
|
||||||
#include "runtime/orderAccess.hpp"
|
#include "runtime/orderAccess.hpp"
|
||||||
#include "runtime/threadSMR.hpp"
|
#include "runtime/threadSMR.hpp"
|
||||||
#include "runtime/vmThread.hpp"
|
#include "runtime/vmThread.hpp"
|
||||||
#include "utilities/align.hpp"
|
#include "utilities/align.hpp"
|
||||||
|
#include "utilities/autoRestore.hpp"
|
||||||
#include "utilities/bitMap.inline.hpp"
|
#include "utilities/bitMap.inline.hpp"
|
||||||
#include "utilities/globalDefinitions.hpp"
|
#include "utilities/globalDefinitions.hpp"
|
||||||
#include "utilities/stack.inline.hpp"
|
#include "utilities/stack.inline.hpp"
|
||||||
|
@ -1940,7 +1940,7 @@ void G1CollectedHeap::allocate_dummy_regions() {
|
||||||
|
|
||||||
// _filler_array_max_size is set to humongous object threshold
|
// _filler_array_max_size is set to humongous object threshold
|
||||||
// but temporarily change it to use CollectedHeap::fill_with_object().
|
// but temporarily change it to use CollectedHeap::fill_with_object().
|
||||||
SizeTFlagSetting fs(_filler_array_max_size, word_size);
|
AutoModifyRestore<size_t> temporarily(_filler_array_max_size, word_size);
|
||||||
|
|
||||||
for (uintx i = 0; i < G1DummyRegionsPerGC; ++i) {
|
for (uintx i = 0; i < G1DummyRegionsPerGC; ++i) {
|
||||||
// Let's use the existing mechanism for the allocation
|
// Let's use the existing mechanism for the allocation
|
||||||
|
|
|
@ -63,13 +63,13 @@
|
||||||
#include "memory/universe.hpp"
|
#include "memory/universe.hpp"
|
||||||
#include "oops/oop.inline.hpp"
|
#include "oops/oop.inline.hpp"
|
||||||
#include "runtime/biasedLocking.hpp"
|
#include "runtime/biasedLocking.hpp"
|
||||||
#include "runtime/flags/flagSetting.hpp"
|
|
||||||
#include "runtime/handles.hpp"
|
#include "runtime/handles.hpp"
|
||||||
#include "runtime/handles.inline.hpp"
|
#include "runtime/handles.inline.hpp"
|
||||||
#include "runtime/java.hpp"
|
#include "runtime/java.hpp"
|
||||||
#include "runtime/vmThread.hpp"
|
#include "runtime/vmThread.hpp"
|
||||||
#include "services/management.hpp"
|
#include "services/management.hpp"
|
||||||
#include "services/memoryService.hpp"
|
#include "services/memoryService.hpp"
|
||||||
|
#include "utilities/autoRestore.hpp"
|
||||||
#include "utilities/debug.hpp"
|
#include "utilities/debug.hpp"
|
||||||
#include "utilities/formatBuffer.hpp"
|
#include "utilities/formatBuffer.hpp"
|
||||||
#include "utilities/macros.hpp"
|
#include "utilities/macros.hpp"
|
||||||
|
@ -566,7 +566,7 @@ void GenCollectedHeap::do_collection(bool full,
|
||||||
|
|
||||||
ClearedAllSoftRefs casr(do_clear_all_soft_refs, soft_ref_policy());
|
ClearedAllSoftRefs casr(do_clear_all_soft_refs, soft_ref_policy());
|
||||||
|
|
||||||
FlagSetting fl(_is_gc_active, true);
|
AutoModifyRestore<bool> temporarily(_is_gc_active, true);
|
||||||
|
|
||||||
bool complete = full && (max_generation == OldGen);
|
bool complete = full && (max_generation == OldGen);
|
||||||
bool old_collects_young = complete && !ScavengeBeforeFullGC;
|
bool old_collects_young = complete && !ScavengeBeforeFullGC;
|
||||||
|
|
|
@ -64,7 +64,6 @@
|
||||||
#include "runtime/arguments.hpp"
|
#include "runtime/arguments.hpp"
|
||||||
#include "runtime/atomic.hpp"
|
#include "runtime/atomic.hpp"
|
||||||
#include "runtime/deoptimization.hpp"
|
#include "runtime/deoptimization.hpp"
|
||||||
#include "runtime/flags/flagSetting.hpp"
|
|
||||||
#include "runtime/flags/jvmFlagConstraintList.hpp"
|
#include "runtime/flags/jvmFlagConstraintList.hpp"
|
||||||
#include "runtime/handles.inline.hpp"
|
#include "runtime/handles.inline.hpp"
|
||||||
#include "runtime/init.hpp"
|
#include "runtime/init.hpp"
|
||||||
|
@ -77,6 +76,7 @@
|
||||||
#include "runtime/vmOperations.hpp"
|
#include "runtime/vmOperations.hpp"
|
||||||
#include "services/memoryService.hpp"
|
#include "services/memoryService.hpp"
|
||||||
#include "utilities/align.hpp"
|
#include "utilities/align.hpp"
|
||||||
|
#include "utilities/autoRestore.hpp"
|
||||||
#include "utilities/copy.hpp"
|
#include "utilities/copy.hpp"
|
||||||
#include "utilities/debug.hpp"
|
#include "utilities/debug.hpp"
|
||||||
#include "utilities/events.hpp"
|
#include "utilities/events.hpp"
|
||||||
|
@ -298,7 +298,7 @@ void initialize_basic_type_klass(Klass* k, TRAPS) {
|
||||||
void Universe::genesis(TRAPS) {
|
void Universe::genesis(TRAPS) {
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(THREAD);
|
||||||
|
|
||||||
{ FlagSetting fs(_bootstrapping, true);
|
{ AutoModifyRestore<bool> temporarily(_bootstrapping, true);
|
||||||
|
|
||||||
{ MutexLocker mc(THREAD, Compile_lock);
|
{ MutexLocker mc(THREAD, Compile_lock);
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -25,47 +25,25 @@
|
||||||
#ifndef SHARE_RUNTIME_FLAGS_FLAGSETTING_HPP
|
#ifndef SHARE_RUNTIME_FLAGS_FLAGSETTING_HPP
|
||||||
#define SHARE_RUNTIME_FLAGS_FLAGSETTING_HPP
|
#define SHARE_RUNTIME_FLAGS_FLAGSETTING_HPP
|
||||||
|
|
||||||
#include "memory/allocation.hpp"
|
#include "utilities/autoRestore.hpp"
|
||||||
|
|
||||||
// debug flags control various aspects of the VM and are global accessible
|
// Legacy use of FlagSetting and UIntFlagSetting to temporarily change a debug
|
||||||
|
// flag/option in the current (local) scope.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// {
|
||||||
|
// FlagSetting temporarily(DebugThisAndThat, true);
|
||||||
|
// . . .
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// The previous/original value is restored when leaving the scope.
|
||||||
|
|
||||||
// use FlagSetting to temporarily change some debug flag
|
typedef AutoModifyRestore<bool> FlagSetting;
|
||||||
// e.g. FlagSetting fs(DebugThisAndThat, true);
|
typedef AutoModifyRestore<uint> UIntFlagSetting;
|
||||||
// restored to previous value upon leaving scope
|
|
||||||
class FlagSetting : public StackObj {
|
|
||||||
bool val;
|
|
||||||
bool* flag;
|
|
||||||
public:
|
|
||||||
FlagSetting(bool& fl, bool newValue) { flag = &fl; val = fl; fl = newValue; }
|
|
||||||
~FlagSetting() { *flag = val; }
|
|
||||||
};
|
|
||||||
|
|
||||||
class UIntFlagSetting : public StackObj {
|
// Legacy use of FLAG_GUARD. Retained in the code to help identify use-cases
|
||||||
uint val;
|
// that should be addressed when this file is removed.
|
||||||
uint* flag;
|
|
||||||
public:
|
|
||||||
UIntFlagSetting(uint& fl, uint newValue) { flag = &fl; val = fl; fl = newValue; }
|
|
||||||
~UIntFlagSetting() { *flag = val; }
|
|
||||||
};
|
|
||||||
|
|
||||||
class SizeTFlagSetting : public StackObj {
|
#define FLAG_GUARD(f) f ## _guard(f)
|
||||||
size_t val;
|
|
||||||
size_t* flag;
|
|
||||||
public:
|
|
||||||
SizeTFlagSetting(size_t& fl, size_t newValue) { flag = &fl; val = fl; fl = newValue; }
|
|
||||||
~SizeTFlagSetting() { *flag = val; }
|
|
||||||
};
|
|
||||||
|
|
||||||
// Helper class for temporarily saving the value of a flag during a scope.
|
|
||||||
template <size_t SIZE>
|
|
||||||
class FlagGuard {
|
|
||||||
unsigned char _value[SIZE];
|
|
||||||
void* const _addr;
|
|
||||||
public:
|
|
||||||
FlagGuard(void* flag_addr) : _addr(flag_addr) { memcpy(_value, _addr, SIZE); }
|
|
||||||
~FlagGuard() { memcpy(_addr, _value, SIZE); }
|
|
||||||
};
|
|
||||||
|
|
||||||
#define FLAG_GUARD(f) FlagGuard<sizeof(f)> f ## _guard(&f)
|
|
||||||
|
|
||||||
#endif // SHARE_RUNTIME_FLAGS_FLAGSETTING_HPP
|
#endif // SHARE_RUNTIME_FLAGS_FLAGSETTING_HPP
|
||||||
|
|
|
@ -27,8 +27,8 @@
|
||||||
|
|
||||||
#include "memory/allocation.hpp"
|
#include "memory/allocation.hpp"
|
||||||
#include "memory/iterator.hpp"
|
#include "memory/iterator.hpp"
|
||||||
#include "runtime/flags/flagSetting.hpp"
|
|
||||||
#include "runtime/semaphore.hpp"
|
#include "runtime/semaphore.hpp"
|
||||||
|
#include "utilities/autoRestore.hpp"
|
||||||
|
|
||||||
class HandshakeOperation;
|
class HandshakeOperation;
|
||||||
class JavaThread;
|
class JavaThread;
|
||||||
|
@ -92,7 +92,7 @@ public:
|
||||||
|
|
||||||
void process_by_self() {
|
void process_by_self() {
|
||||||
if (!_thread_in_process_handshake) {
|
if (!_thread_in_process_handshake) {
|
||||||
FlagSetting fs(_thread_in_process_handshake, true);
|
AutoModifyRestore<bool> temporarily(_thread_in_process_handshake, true);
|
||||||
process_self_inner();
|
process_self_inner();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
56
src/hotspot/share/utilities/autoRestore.hpp
Normal file
56
src/hotspot/share/utilities/autoRestore.hpp
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 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.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SHARE_UTILITIES_AUTORESTORE_HPP
|
||||||
|
#define SHARE_UTILITIES_AUTORESTORE_HPP
|
||||||
|
|
||||||
|
#include "memory/allocation.hpp"
|
||||||
|
|
||||||
|
// A simplistic template providing a general save-restore pattern through a
|
||||||
|
// local auto/stack object (scope).
|
||||||
|
//
|
||||||
|
template<typename T> class AutoSaveRestore : public StackObj {
|
||||||
|
public:
|
||||||
|
AutoSaveRestore(T &loc) : _loc(loc) {
|
||||||
|
_value = loc;
|
||||||
|
}
|
||||||
|
~AutoSaveRestore() {
|
||||||
|
_loc = _value;
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
T &_loc;
|
||||||
|
T _value;
|
||||||
|
};
|
||||||
|
|
||||||
|
// A simplistic template providing a general modify-restore pattern through a
|
||||||
|
// local auto/stack object (scope).
|
||||||
|
//
|
||||||
|
template<typename T> class AutoModifyRestore : private AutoSaveRestore<T> {
|
||||||
|
public:
|
||||||
|
AutoModifyRestore(T &loc, T value) : AutoSaveRestore<T>(loc) {
|
||||||
|
loc = value;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SHARE_UTILITIES_AUTORESTORE_HPP
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -57,13 +57,13 @@ class TestGenCollectorPolicy {
|
||||||
class TestWrapper {
|
class TestWrapper {
|
||||||
public:
|
public:
|
||||||
static void test(Executor* setter1, Executor* setter2, Executor* checker) {
|
static void test(Executor* setter1, Executor* setter2, Executor* checker) {
|
||||||
FLAG_GUARD(MinHeapSize);
|
AutoSaveRestore<size_t> FLAG_GUARD(MinHeapSize);
|
||||||
FLAG_GUARD(InitialHeapSize);
|
AutoSaveRestore<size_t> FLAG_GUARD(InitialHeapSize);
|
||||||
FLAG_GUARD(MaxHeapSize);
|
AutoSaveRestore<size_t> FLAG_GUARD(MaxHeapSize);
|
||||||
FLAG_GUARD(MaxNewSize);
|
AutoSaveRestore<size_t> FLAG_GUARD(MaxNewSize);
|
||||||
FLAG_GUARD(MinHeapDeltaBytes);
|
AutoSaveRestore<size_t> FLAG_GUARD(MinHeapDeltaBytes);
|
||||||
FLAG_GUARD(NewSize);
|
AutoSaveRestore<size_t> FLAG_GUARD(NewSize);
|
||||||
FLAG_GUARD(OldSize);
|
AutoSaveRestore<size_t> FLAG_GUARD(OldSize);
|
||||||
|
|
||||||
MinHeapSize = 40 * M;
|
MinHeapSize = 40 * M;
|
||||||
FLAG_SET_ERGO(InitialHeapSize, 100 * M);
|
FLAG_SET_ERGO(InitialHeapSize, 100 * M);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -32,7 +32,7 @@
|
||||||
ASSERT_TRUE(JVMFlag::find_flag(#f)->is_ ## type()); \
|
ASSERT_TRUE(JVMFlag::find_flag(#f)->is_ ## type()); \
|
||||||
type original_value = f; \
|
type original_value = f; \
|
||||||
{ \
|
{ \
|
||||||
FLAG_GUARD(f); \
|
AutoSaveRestore<type> FLAG_GUARD(f); \
|
||||||
f = value; \
|
f = value; \
|
||||||
} \
|
} \
|
||||||
ASSERT_EQ(original_value, f); \
|
ASSERT_EQ(original_value, f); \
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -57,8 +57,8 @@ TEST_VM(os_windows, reserve_memory_special) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// set globals to make sure we hit the correct code path
|
// set globals to make sure we hit the correct code path
|
||||||
FLAG_GUARD(UseLargePagesIndividualAllocation);
|
AutoSaveRestore<bool> FLAG_GUARD(UseLargePagesIndividualAllocation);
|
||||||
FLAG_GUARD(UseNUMAInterleaving);
|
AutoSaveRestore<bool> FLAG_GUARD(UseNUMAInterleaving);
|
||||||
FLAG_SET_CMDLINE(UseLargePagesIndividualAllocation, false);
|
FLAG_SET_CMDLINE(UseLargePagesIndividualAllocation, false);
|
||||||
FLAG_SET_CMDLINE(UseNUMAInterleaving, false);
|
FLAG_SET_CMDLINE(UseNUMAInterleaving, false);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue