src/hotspot/share/gc/shared/weakProcessor.cpp
author chegar
Thu, 17 Oct 2019 20:54:25 +0100
branchdatagramsocketimpl-branch
changeset 58679 9c3209ff7550
parent 58678 9cf78a70fa4f
parent 57892 fb6cd98e4dec
permissions -rw-r--r--
datagramsocketimpl-branch: merge with default
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47779
diff changeset
    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
fb6cd98e4dec 8230118: 32-bit build failures after JDK-8227054
shade
parents: 57828
diff changeset
   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
fb6cd98e4dec 8230118: 32-bit build failures after JDK-8227054
shade
parents: 57828
diff changeset
   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
}