author | chegar |
Thu, 17 Oct 2019 20:54:25 +0100 | |
branch | datagramsocketimpl-branch |
changeset 58679 | 9c3209ff7550 |
parent 58678 | 9cf78a70fa4f |
parent 57892 | fb6cd98e4dec |
permissions | -rw-r--r-- |
47648
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
1 |
/* |
53536
482109fae02b
8213229: Investigate treating StringTable as weak in young collections
tschatzl
parents:
51546
diff
changeset
|
2 |
* Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved. |
47648
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
4 |
* |
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
5 |
* This code is free software; you can redistribute it and/or modify it |
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
7 |
* published by the Free Software Foundation. |
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
8 |
* |
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
9 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
10 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
11 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
12 |
* version 2 for more details (a copy is included in the LICENSE file that |
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
13 |
* accompanied this code). |
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
14 |
* |
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
15 |
* You should have received a copy of the GNU General Public License version |
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
16 |
* 2 along with this work; if not, write to the Free Software Foundation, |
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
17 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
18 |
* |
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
19 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
20 |
* or visit www.oracle.com if you need additional information or have any |
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
21 |
* questions. |
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
22 |
* |
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
23 |
*/ |
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
24 |
|
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
25 |
#include "precompiled.hpp" |
53536
482109fae02b
8213229: Investigate treating StringTable as weak in young collections
tschatzl
parents:
51546
diff
changeset
|
26 |
#include "classfile/stringTable.hpp" |
50297
580744d900c8
8202813: Move vm_weak processing from SystemDictionary to WeakProcessor
coleenp
parents:
50113
diff
changeset
|
27 |
#include "gc/shared/oopStorage.inline.hpp" |
51546
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
28 |
#include "gc/shared/oopStorageParState.inline.hpp" |
57828
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
29 |
#include "gc/shared/oopStorageSet.hpp" |
51546
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
30 |
#include "gc/shared/weakProcessor.inline.hpp" |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
31 |
#include "gc/shared/weakProcessorPhases.hpp" |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
32 |
#include "gc/shared/weakProcessorPhaseTimes.hpp" |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
33 |
#include "memory/allocation.inline.hpp" |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
34 |
#include "memory/iterator.hpp" |
54511
fbfcebad8e66
8221393: ResolvedMethodTable too small for StackWalking applications
stefank
parents:
53702
diff
changeset
|
35 |
#include "prims/resolvedMethodTable.hpp" |
51546
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
36 |
#include "runtime/globals.hpp" |
50113 | 37 |
#include "utilities/macros.hpp" |
47648
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
38 |
|
54511
fbfcebad8e66
8221393: ResolvedMethodTable too small for StackWalking applications
stefank
parents:
53702
diff
changeset
|
39 |
template <typename Container> |
fbfcebad8e66
8221393: ResolvedMethodTable too small for StackWalking applications
stefank
parents:
53702
diff
changeset
|
40 |
class OopsDoAndReportCounts { |
fbfcebad8e66
8221393: ResolvedMethodTable too small for StackWalking applications
stefank
parents:
53702
diff
changeset
|
41 |
public: |
57828
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
42 |
void operator()(BoolObjectClosure* is_alive, OopClosure* keep_alive, OopStorage* storage) { |
54511
fbfcebad8e66
8221393: ResolvedMethodTable too small for StackWalking applications
stefank
parents:
53702
diff
changeset
|
43 |
Container::reset_dead_counter(); |
fbfcebad8e66
8221393: ResolvedMethodTable too small for StackWalking applications
stefank
parents:
53702
diff
changeset
|
44 |
|
fbfcebad8e66
8221393: ResolvedMethodTable too small for StackWalking applications
stefank
parents:
53702
diff
changeset
|
45 |
CountingSkippedIsAliveClosure<BoolObjectClosure, OopClosure> cl(is_alive, keep_alive); |
57828
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
46 |
storage->oops_do(&cl); |
54511
fbfcebad8e66
8221393: ResolvedMethodTable too small for StackWalking applications
stefank
parents:
53702
diff
changeset
|
47 |
|
fbfcebad8e66
8221393: ResolvedMethodTable too small for StackWalking applications
stefank
parents:
53702
diff
changeset
|
48 |
Container::inc_dead_counter(cl.num_dead() + cl.num_skipped()); |
fbfcebad8e66
8221393: ResolvedMethodTable too small for StackWalking applications
stefank
parents:
53702
diff
changeset
|
49 |
Container::finish_dead_counter(); |
fbfcebad8e66
8221393: ResolvedMethodTable too small for StackWalking applications
stefank
parents:
53702
diff
changeset
|
50 |
} |
fbfcebad8e66
8221393: ResolvedMethodTable too small for StackWalking applications
stefank
parents:
53702
diff
changeset
|
51 |
}; |
fbfcebad8e66
8221393: ResolvedMethodTable too small for StackWalking applications
stefank
parents:
53702
diff
changeset
|
52 |
|
47676
b1c020fc35a3
8189748: More precise closures for WeakProcessor::weak_oops_do calls
stefank
parents:
47649
diff
changeset
|
53 |
void WeakProcessor::weak_oops_do(BoolObjectClosure* is_alive, OopClosure* keep_alive) { |
57828
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
54 |
WeakProcessorPhases::Iterator pit = WeakProcessorPhases::serial_iterator(); |
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
55 |
for ( ; !pit.is_end(); ++pit) { |
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
56 |
WeakProcessorPhases::processor(*pit)(is_alive, keep_alive); |
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
57 |
} |
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
58 |
|
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
59 |
OopStorageSet::Iterator it = OopStorageSet::weak_iterator(); |
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
60 |
for ( ; !it.is_end(); ++it) { |
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
61 |
if (OopStorageSet::string_table_weak() == *it) { |
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
62 |
OopsDoAndReportCounts<StringTable>()(is_alive, keep_alive, *it); |
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
63 |
} else if (OopStorageSet::resolved_method_table_weak() == *it) { |
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
64 |
OopsDoAndReportCounts<ResolvedMethodTable>()(is_alive, keep_alive, *it); |
51546
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
65 |
} else { |
57828
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
66 |
it->weak_oops_do(is_alive, keep_alive); |
51546
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
67 |
} |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
68 |
} |
47648
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
69 |
} |
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
70 |
|
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
71 |
void WeakProcessor::oops_do(OopClosure* closure) { |
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
72 |
AlwaysTrueClosure always_true; |
47676
b1c020fc35a3
8189748: More precise closures for WeakProcessor::weak_oops_do calls
stefank
parents:
47649
diff
changeset
|
73 |
weak_oops_do(&always_true, closure); |
47648
226b1fc611b9
8189359: Move native weak oops cleaning out of ReferenceProcessor
stefank
parents:
diff
changeset
|
74 |
} |
51546
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
75 |
|
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
76 |
uint WeakProcessor::ergo_workers(uint max_workers) { |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
77 |
// Ignore ParallelRefProcEnabled; that's for j.l.r.Reference processing. |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
78 |
if (ReferencesPerThread == 0) { |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
79 |
// Configuration says always use all the threads. |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
80 |
return max_workers; |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
81 |
} |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
82 |
|
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
83 |
// One thread per ReferencesPerThread references (or fraction thereof) |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
84 |
// in the various OopStorage objects, bounded by max_threads. |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
85 |
// |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
86 |
// Serial phases are ignored in this calculation, because of the |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
87 |
// cost of running unnecessary threads. These phases are normally |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
88 |
// small or empty (assuming they are configured to exist at all), |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
89 |
// and development oriented, so not allocating any threads |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
90 |
// specifically for them is okay. |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
91 |
size_t ref_count = 0; |
57828
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
92 |
OopStorageSet::Iterator it = OopStorageSet::weak_iterator(); |
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
93 |
for ( ; !it.is_end(); ++it) { |
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
94 |
ref_count += it->allocation_count(); |
51546
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
95 |
} |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
96 |
|
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
97 |
// +1 to (approx) round up the ref per thread division. |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
98 |
size_t nworkers = 1 + (ref_count / ReferencesPerThread); |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
99 |
nworkers = MIN2(nworkers, static_cast<size_t>(max_workers)); |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
100 |
return static_cast<uint>(nworkers); |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
101 |
} |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
102 |
|
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
103 |
void WeakProcessor::Task::initialize() { |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
104 |
assert(_nworkers != 0, "must be"); |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
105 |
assert(_phase_times == NULL || _nworkers <= _phase_times->max_threads(), |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
106 |
"nworkers (%u) exceeds max threads (%u)", |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
107 |
_nworkers, _phase_times->max_threads()); |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
108 |
|
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
109 |
if (_phase_times) { |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
110 |
_phase_times->set_active_workers(_nworkers); |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
111 |
} |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
112 |
|
57828
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
113 |
uint storage_count = WeakProcessorPhases::oopstorage_phase_count; |
51546
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
114 |
_storage_states = NEW_C_HEAP_ARRAY(StorageState, storage_count, mtGC); |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
115 |
|
57828
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
116 |
StorageState* cur_state = _storage_states; |
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
117 |
OopStorageSet::Iterator it = OopStorageSet::weak_iterator(); |
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
118 |
for ( ; !it.is_end(); ++it, ++cur_state) { |
57892 | 119 |
assert(pointer_delta(cur_state, _storage_states, sizeof(StorageState)) < storage_count, "invariant"); |
57828
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
120 |
new (cur_state) StorageState(*it, _nworkers); |
51546
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
121 |
} |
57892 | 122 |
assert(pointer_delta(cur_state, _storage_states, sizeof(StorageState)) == storage_count, "invariant"); |
53536
482109fae02b
8213229: Investigate treating StringTable as weak in young collections
tschatzl
parents:
51546
diff
changeset
|
123 |
StringTable::reset_dead_counter(); |
54511
fbfcebad8e66
8221393: ResolvedMethodTable too small for StackWalking applications
stefank
parents:
53702
diff
changeset
|
124 |
ResolvedMethodTable::reset_dead_counter(); |
51546
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
125 |
} |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
126 |
|
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
127 |
WeakProcessor::Task::Task(uint nworkers) : |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
128 |
_phase_times(NULL), |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
129 |
_nworkers(nworkers), |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
130 |
_serial_phases_done(WeakProcessorPhases::serial_phase_count), |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
131 |
_storage_states(NULL) |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
132 |
{ |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
133 |
initialize(); |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
134 |
} |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
135 |
|
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
136 |
WeakProcessor::Task::Task(WeakProcessorPhaseTimes* phase_times, uint nworkers) : |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
137 |
_phase_times(phase_times), |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
138 |
_nworkers(nworkers), |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
139 |
_serial_phases_done(WeakProcessorPhases::serial_phase_count), |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
140 |
_storage_states(NULL) |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
141 |
{ |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
142 |
initialize(); |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
143 |
} |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
144 |
|
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
145 |
WeakProcessor::Task::~Task() { |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
146 |
if (_storage_states != NULL) { |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
147 |
StorageState* states = _storage_states; |
57828
35db8fba55f9
8227054: ServiceThread needs to know about all OopStorage objects
kbarrett
parents:
54511
diff
changeset
|
148 |
for (uint i = 0; i < WeakProcessorPhases::oopstorage_phase_count; ++i) { |
51546
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
149 |
states->StorageState::~StorageState(); |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
150 |
++states; |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
151 |
} |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
152 |
FREE_C_HEAP_ARRAY(StorageState, _storage_states); |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
153 |
} |
53536
482109fae02b
8213229: Investigate treating StringTable as weak in young collections
tschatzl
parents:
51546
diff
changeset
|
154 |
StringTable::finish_dead_counter(); |
54511
fbfcebad8e66
8221393: ResolvedMethodTable too small for StackWalking applications
stefank
parents:
53702
diff
changeset
|
155 |
ResolvedMethodTable::finish_dead_counter(); |
51546
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
156 |
} |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
157 |
|
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
158 |
void WeakProcessor::GangTask::work(uint worker_id) { |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
159 |
_erased_do_work(this, worker_id); |
b9f6a4427da9
8072498: Multi-thread JNI weak reference processing
kbarrett
parents:
50297
diff
changeset
|
160 |
} |