src/hotspot/share/gc/z/zDriver.cpp
author stefank
Mon, 10 Jun 2019 13:04:12 +0200
changeset 55603 3868dde58ebb
parent 55002 da9840e2f7da
child 57656 9429ecaee2e0
permissions -rw-r--r--
8227175: ZGC: ZHeapIterator visits potentially dead objects Reviewed-by: zgu, eosterlund
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
     1
/*
53540
9f75dc382445 8217857: ZGC: Move SvcGCMarker to ZServiceabilityTracer
pliden
parents: 52877
diff changeset
     2
 * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
     4
 *
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
     7
 * published by the Free Software Foundation.
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
     8
 *
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    13
 * accompanied this code).
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    14
 *
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    18
 *
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    21
 * questions.
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    22
 */
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    23
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    24
#include "precompiled.hpp"
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    25
#include "gc/shared/gcId.hpp"
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    26
#include "gc/shared/gcLocker.hpp"
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    27
#include "gc/shared/isGCActiveMark.hpp"
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    28
#include "gc/z/zCollectedHeap.hpp"
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    29
#include "gc/z/zDriver.hpp"
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    30
#include "gc/z/zHeap.inline.hpp"
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    31
#include "gc/z/zMessagePort.inline.hpp"
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    32
#include "gc/z/zServiceability.hpp"
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    33
#include "gc/z/zStat.hpp"
55603
3868dde58ebb 8227175: ZGC: ZHeapIterator visits potentially dead objects
stefank
parents: 55002
diff changeset
    34
#include "gc/z/zVerify.hpp"
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    35
#include "logging/log.hpp"
52382
2e280ecec246 8212921: ZGC: Move verification to after resurrection unblocked
pliden
parents: 52140
diff changeset
    36
#include "memory/universe.hpp"
52877
9e041366c764 8214850: Rename vm_operations.?pp files to vmOperations.?pp files
tschatzl
parents: 52876
diff changeset
    37
#include "runtime/vmOperations.hpp"
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    38
#include "runtime/vmThread.hpp"
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    39
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    40
static const ZStatPhaseCycle      ZPhaseCycle("Garbage Collection Cycle");
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    41
static const ZStatPhasePause      ZPhasePauseMarkStart("Pause Mark Start");
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    42
static const ZStatPhaseConcurrent ZPhaseConcurrentMark("Concurrent Mark");
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    43
static const ZStatPhaseConcurrent ZPhaseConcurrentMarkContinue("Concurrent Mark Continue");
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    44
static const ZStatPhasePause      ZPhasePauseMarkEnd("Pause Mark End");
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    45
static const ZStatPhaseConcurrent ZPhaseConcurrentProcessNonStrongReferences("Concurrent Process Non-Strong References");
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    46
static const ZStatPhaseConcurrent ZPhaseConcurrentResetRelocationSet("Concurrent Reset Relocation Set");
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    47
static const ZStatPhaseConcurrent ZPhaseConcurrentSelectRelocationSet("Concurrent Select Relocation Set");
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    48
static const ZStatPhasePause      ZPhasePauseRelocateStart("Pause Relocate Start");
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    49
static const ZStatPhaseConcurrent ZPhaseConcurrentRelocated("Concurrent Relocate");
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    50
static const ZStatCriticalPhase   ZCriticalPhaseGCLockerStall("GC Locker Stall", false /* verbose */);
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    51
static const ZStatSampler         ZSamplerJavaThreads("System", "Java Threads", ZStatUnitThreads);
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    52
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    53
class VM_ZOperation : public VM_Operation {
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    54
private:
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    55
  const uint _gc_id;
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    56
  bool       _gc_locked;
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    57
  bool       _success;
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    58
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    59
public:
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    60
  VM_ZOperation() :
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    61
      _gc_id(GCId::current()),
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    62
      _gc_locked(false),
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    63
      _success(false) {}
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    64
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    65
  virtual bool needs_inactive_gc_locker() const {
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    66
    // An inactive GC locker is needed in operations where we change the bad
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    67
    // mask or move objects. Changing the bad mask will invalidate all oops,
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    68
    // which makes it conceptually the same thing as moving all objects.
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    69
    return false;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    70
  }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    71
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    72
  virtual bool do_operation() = 0;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    73
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    74
  virtual bool doit_prologue() {
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    75
    Heap_lock->lock();
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    76
    return true;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    77
  }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    78
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    79
  virtual void doit() {
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    80
    // Abort if GC locker state is incompatible
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    81
    if (needs_inactive_gc_locker() && GCLocker::check_active_before_gc()) {
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    82
      _gc_locked = true;
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    83
      return;
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    84
    }
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    85
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    86
    // Setup GC id and active marker
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    87
    GCIdMark gc_id_mark(_gc_id);
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    88
    IsGCActiveMark gc_active_mark;
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    89
55603
3868dde58ebb 8227175: ZGC: ZHeapIterator visits potentially dead objects
stefank
parents: 55002
diff changeset
    90
    // Verify roots
3868dde58ebb 8227175: ZGC: ZHeapIterator visits potentially dead objects
stefank
parents: 55002
diff changeset
    91
    ZVerify::roots_strong();
3868dde58ebb 8227175: ZGC: ZHeapIterator visits potentially dead objects
stefank
parents: 55002
diff changeset
    92
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    93
    // Execute operation
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    94
    _success = do_operation();
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    95
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    96
    // Update statistics
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
    97
    ZStatSample(ZSamplerJavaThreads, Threads::number_of_threads());
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    98
  }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    99
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   100
  virtual void doit_epilogue() {
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   101
    Heap_lock->unlock();
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   102
  }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   103
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   104
  bool gc_locked() const {
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   105
    return _gc_locked;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   106
  }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   107
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   108
  bool success() const {
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   109
    return _success;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   110
  }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   111
};
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   112
50582
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   113
static bool should_clear_soft_references() {
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   114
  // Clear if one or more allocations have stalled
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   115
  const bool stalled = ZHeap::heap()->is_alloc_stalled();
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   116
  if (stalled) {
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   117
    // Clear
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   118
    return true;
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   119
  }
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   120
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   121
  // Clear if implied by the GC cause
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   122
  const GCCause::Cause cause = ZCollectedHeap::heap()->gc_cause();
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   123
  if (cause == GCCause::_wb_full_gc ||
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   124
      cause == GCCause::_metadata_GC_clear_soft_refs) {
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   125
    // Clear
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   126
    return true;
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   127
  }
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   128
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   129
  // Don't clear
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   130
  return false;
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   131
}
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   132
50583
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   133
static bool should_boost_worker_threads() {
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   134
  // Boost worker threads if one or more allocations have stalled
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   135
  const bool stalled = ZHeap::heap()->is_alloc_stalled();
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   136
  if (stalled) {
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   137
    // Boost
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   138
    return true;
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   139
  }
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   140
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   141
  // Boost worker threads if implied by the GC cause
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   142
  const GCCause::Cause cause = ZCollectedHeap::heap()->gc_cause();
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   143
  if (cause == GCCause::_wb_full_gc ||
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   144
      cause == GCCause::_java_lang_system_gc ||
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   145
      cause == GCCause::_metadata_GC_clear_soft_refs) {
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   146
    // Boost
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   147
    return true;
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   148
  }
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   149
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   150
  // Don't boost
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   151
  return false;
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   152
}
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   153
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   154
class VM_ZMarkStart : public VM_ZOperation {
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   155
public:
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   156
  virtual VMOp_Type type() const {
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   157
    return VMOp_ZMarkStart;
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   158
  }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   159
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   160
  virtual bool needs_inactive_gc_locker() const {
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   161
    return true;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   162
  }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   163
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   164
  virtual bool do_operation() {
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   165
    ZStatTimer timer(ZPhasePauseMarkStart);
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   166
    ZServiceabilityMarkStartTracer tracer;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   167
50875
2217b2fc29ea 8205993: ZGC: Fix typos and incorrect indentations
pliden
parents: 50583
diff changeset
   168
    // Set up soft reference policy
50582
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   169
    const bool clear = should_clear_soft_references();
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   170
    ZHeap::heap()->set_soft_reference_policy(clear);
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   171
50875
2217b2fc29ea 8205993: ZGC: Fix typos and incorrect indentations
pliden
parents: 50583
diff changeset
   172
    // Set up boost mode
50583
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   173
    const bool boost = should_boost_worker_threads();
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   174
    ZHeap::heap()->set_boost_worker_threads(boost);
f0ff230e2546 8205024: ZGC: Worker threads boost mode not always enabled when is should be
pliden
parents: 50582
diff changeset
   175
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   176
    ZCollectedHeap::heap()->increment_total_collections(true /* full */);
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   177
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   178
    ZHeap::heap()->mark_start();
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   179
    return true;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   180
  }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   181
};
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   182
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   183
class VM_ZMarkEnd : public VM_ZOperation {
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   184
public:
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   185
  virtual VMOp_Type type() const {
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   186
    return VMOp_ZMarkEnd;
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   187
  }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   188
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   189
  virtual bool do_operation() {
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   190
    ZStatTimer timer(ZPhasePauseMarkEnd);
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   191
    ZServiceabilityMarkEndTracer tracer;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   192
    return ZHeap::heap()->mark_end();
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   193
  }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   194
};
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   195
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   196
class VM_ZRelocateStart : public VM_ZOperation {
52382
2e280ecec246 8212921: ZGC: Move verification to after resurrection unblocked
pliden
parents: 52140
diff changeset
   197
public:
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   198
  virtual VMOp_Type type() const {
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   199
    return VMOp_ZRelocateStart;
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   200
  }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   201
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   202
  virtual bool needs_inactive_gc_locker() const {
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   203
    return true;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   204
  }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   205
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   206
  virtual bool do_operation() {
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   207
    ZStatTimer timer(ZPhasePauseRelocateStart);
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   208
    ZServiceabilityRelocateStartTracer tracer;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   209
    ZHeap::heap()->relocate_start();
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   210
    return true;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   211
  }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   212
};
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   213
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   214
ZDriver::ZDriver() :
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   215
    _gc_cycle_port(),
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   216
    _gc_locker_port() {
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   217
  set_name("ZDriver");
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   218
  create_and_start();
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   219
}
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   220
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   221
void ZDriver::collect(GCCause::Cause cause) {
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   222
  switch (cause) {
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   223
  case GCCause::_wb_young_gc:
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   224
  case GCCause::_wb_conc_mark:
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   225
  case GCCause::_wb_full_gc:
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   226
  case GCCause::_dcmd_gc_run:
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   227
  case GCCause::_java_lang_system_gc:
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   228
  case GCCause::_full_gc_alot:
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   229
  case GCCause::_scavenge_alot:
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   230
  case GCCause::_jvmti_force_gc:
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   231
  case GCCause::_metadata_GC_clear_soft_refs:
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   232
    // Start synchronous GC
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   233
    _gc_cycle_port.send_sync(cause);
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   234
    break;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   235
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   236
  case GCCause::_z_timer:
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   237
  case GCCause::_z_warmup:
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   238
  case GCCause::_z_allocation_rate:
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   239
  case GCCause::_z_allocation_stall:
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   240
  case GCCause::_z_proactive:
55002
da9840e2f7da 8224185: ZGC: Introduce "High Usage" rule
pliden
parents: 54174
diff changeset
   241
  case GCCause::_z_high_usage:
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   242
  case GCCause::_metadata_GC_threshold:
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   243
    // Start asynchronous GC
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   244
    _gc_cycle_port.send_async(cause);
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   245
    break;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   246
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   247
  case GCCause::_gc_locker:
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   248
    // Restart VM operation previously blocked by the GC locker
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   249
    _gc_locker_port.signal();
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   250
    break;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   251
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   252
  default:
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   253
    // Other causes not supported
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   254
    fatal("Unsupported GC cause (%s)", GCCause::to_string(cause));
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   255
    break;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   256
  }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   257
}
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   258
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   259
template <typename T>
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   260
bool ZDriver::pause() {
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   261
  for (;;) {
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   262
    T op;
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   263
    VMThread::execute(&op);
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   264
    if (op.gc_locked()) {
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   265
      // Wait for GC to become unlocked and restart the VM operation
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   266
      ZStatTimer timer(ZCriticalPhaseGCLockerStall);
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   267
      _gc_locker_port.wait();
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   268
      continue;
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   269
    }
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   270
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   271
    // Notify VM operation completed
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   272
    _gc_locker_port.ack();
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   273
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   274
    return op.success();
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   275
  }
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   276
}
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   277
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   278
void ZDriver::pause_mark_start() {
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   279
  pause<VM_ZMarkStart>();
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   280
}
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   281
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   282
void ZDriver::concurrent_mark() {
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   283
  ZStatTimer timer(ZPhaseConcurrentMark);
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   284
  ZHeap::heap()->mark(true /* initial */);
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   285
}
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   286
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   287
bool ZDriver::pause_mark_end() {
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   288
  return pause<VM_ZMarkEnd>();
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   289
}
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   290
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   291
void ZDriver::concurrent_mark_continue() {
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   292
  ZStatTimer timer(ZPhaseConcurrentMarkContinue);
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   293
  ZHeap::heap()->mark(false /* initial */);
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   294
}
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   295
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   296
void ZDriver::concurrent_process_non_strong_references() {
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   297
  ZStatTimer timer(ZPhaseConcurrentProcessNonStrongReferences);
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   298
  ZHeap::heap()->process_non_strong_references();
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   299
}
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   300
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   301
void ZDriver::concurrent_reset_relocation_set() {
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   302
  ZStatTimer timer(ZPhaseConcurrentResetRelocationSet);
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   303
  ZHeap::heap()->reset_relocation_set();
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   304
}
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   305
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   306
void ZDriver::pause_verify() {
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   307
  if (VerifyBeforeGC || VerifyDuringGC || VerifyAfterGC) {
55603
3868dde58ebb 8227175: ZGC: ZHeapIterator visits potentially dead objects
stefank
parents: 55002
diff changeset
   308
    // Full verification
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   309
    VM_Verify op;
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   310
    VMThread::execute(&op);
55603
3868dde58ebb 8227175: ZGC: ZHeapIterator visits potentially dead objects
stefank
parents: 55002
diff changeset
   311
3868dde58ebb 8227175: ZGC: ZHeapIterator visits potentially dead objects
stefank
parents: 55002
diff changeset
   312
  } else if (ZVerifyRoots || ZVerifyObjects) {
3868dde58ebb 8227175: ZGC: ZHeapIterator visits potentially dead objects
stefank
parents: 55002
diff changeset
   313
    // Limited verification
3868dde58ebb 8227175: ZGC: ZHeapIterator visits potentially dead objects
stefank
parents: 55002
diff changeset
   314
    VM_ZVerifyOperation op;
3868dde58ebb 8227175: ZGC: ZHeapIterator visits potentially dead objects
stefank
parents: 55002
diff changeset
   315
    VMThread::execute(&op);
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   316
  }
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   317
}
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   318
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   319
void ZDriver::concurrent_select_relocation_set() {
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   320
  ZStatTimer timer(ZPhaseConcurrentSelectRelocationSet);
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   321
  ZHeap::heap()->select_relocation_set();
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   322
}
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   323
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   324
void ZDriver::pause_relocate_start() {
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   325
  pause<VM_ZRelocateStart>();
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   326
}
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   327
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   328
void ZDriver::concurrent_relocate() {
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   329
  ZStatTimer timer(ZPhaseConcurrentRelocated);
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   330
  ZHeap::heap()->relocate();
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   331
}
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   332
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   333
void ZDriver::check_out_of_memory() {
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   334
  ZHeap::heap()->check_out_of_memory();
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   335
}
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   336
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   337
class ZDriverGCScope : public StackObj {
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   338
private:
50582
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   339
  GCIdMark      _gc_id;
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   340
  GCCauseSetter _gc_cause_setter;
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   341
  ZStatTimer    _timer;
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   342
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   343
public:
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   344
  ZDriverGCScope(GCCause::Cause cause) :
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   345
      _gc_id(),
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   346
      _gc_cause_setter(ZCollectedHeap::heap(), cause),
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   347
      _timer(ZPhaseCycle) {
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   348
    // Update statistics
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   349
    ZStatCycle::at_start();
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   350
  }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   351
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   352
  ~ZDriverGCScope() {
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   353
    // Calculate boost factor
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   354
    const double boost_factor = (double)ZHeap::heap()->nconcurrent_worker_threads() /
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   355
                                (double)ZHeap::heap()->nconcurrent_no_boost_worker_threads();
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   356
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   357
    // Update statistics
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   358
    ZStatCycle::at_end(boost_factor);
50582
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   359
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   360
    // Update data used by soft reference policy
6464882498b5 8205022: ZGC: SoftReferences not always cleared before throwing OOME
pliden
parents: 50525
diff changeset
   361
    Universe::update_heap_info_at_gc();
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   362
  }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   363
};
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   364
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   365
void ZDriver::gc(GCCause::Cause cause) {
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   366
  ZDriverGCScope scope(cause);
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   367
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   368
  // Phase 1: Pause Mark Start
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   369
  pause_mark_start();
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   370
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   371
  // Phase 2: Concurrent Mark
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   372
  concurrent_mark();
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   373
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   374
  // Phase 3: Pause Mark End
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   375
  while (!pause_mark_end()) {
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   376
    // Phase 3.5: Concurrent Mark Continue
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   377
    concurrent_mark_continue();
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   378
  }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   379
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   380
  // Phase 4: Concurrent Process Non-Strong References
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   381
  concurrent_process_non_strong_references();
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   382
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   383
  // Phase 5: Concurrent Reset Relocation Set
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   384
  concurrent_reset_relocation_set();
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   385
54174
6d1caebf8d37 8220600: ZGC: Delete ZPages using ZSafeDelete
pliden
parents: 54163
diff changeset
   386
  // Phase 6: Pause Verify
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   387
  pause_verify();
52382
2e280ecec246 8212921: ZGC: Move verification to after resurrection unblocked
pliden
parents: 52140
diff changeset
   388
54174
6d1caebf8d37 8220600: ZGC: Delete ZPages using ZSafeDelete
pliden
parents: 54163
diff changeset
   389
  // Phase 7: Concurrent Select Relocation Set
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   390
  concurrent_select_relocation_set();
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   391
54174
6d1caebf8d37 8220600: ZGC: Delete ZPages using ZSafeDelete
pliden
parents: 54163
diff changeset
   392
  // Phase 8: Pause Relocate Start
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   393
  pause_relocate_start();
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   394
54174
6d1caebf8d37 8220600: ZGC: Delete ZPages using ZSafeDelete
pliden
parents: 54163
diff changeset
   395
  // Phase 9: Concurrent Relocate
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   396
  concurrent_relocate();
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   397
}
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   398
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   399
void ZDriver::run_service() {
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   400
  // Main loop
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   401
  while (!should_terminate()) {
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   402
    // Wait for GC request
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   403
    const GCCause::Cause cause = _gc_cycle_port.receive();
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   404
    if (cause == GCCause::_no_gc) {
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   405
      continue;
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   406
    }
53541
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   407
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   408
    // Run GC
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   409
    gc(cause);
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   410
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   411
    // Notify GC completed
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   412
    _gc_cycle_port.ack();
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   413
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   414
    // Check for out of memory condition
4e325f8b50ce 8217858: ZGC: Clean up ZDriver
pliden
parents: 53540
diff changeset
   415
    check_out_of_memory();
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   416
  }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   417
}
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   418
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   419
void ZDriver::stop_service() {
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   420
  _gc_cycle_port.send_async(GCCause::_no_gc);
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   421
}