hotspot/src/share/vm/gc/parallel/psPromotionManager.hpp
author tschatzl
Thu, 28 Jan 2016 13:30:12 +0100
changeset 35877 a2a62511d0f8
parent 35061 be6025ebffea
child 37045 41e3f98fa3dc
permissions -rw-r--r--
8146987: Improve Parallel GC Full GC by caching results of live_words_in_range() Summary: A large part of time in the parallel scavenge collector is spent finding out the amount of live words within memory ranges to find out where to move an object to. Try to incrementally calculate this value. Reviewed-by: tschatzl, mgerdin, jmasa Contributed-by: ray alex <sky1young@gmail.com>
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
29792
8c6fa07f0869 8075957: Reduce calls to the GC specific object visitors in oopDesc
stefank
parents: 29208
diff changeset
     2
 * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     4
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
489c9b5090e2 Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
489c9b5090e2 Initial load
duke
parents:
diff changeset
     7
 * published by the Free Software Foundation.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     8
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
489c9b5090e2 Initial load
duke
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
489c9b5090e2 Initial load
duke
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
489c9b5090e2 Initial load
duke
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
489c9b5090e2 Initial load
duke
parents:
diff changeset
    13
 * accompanied this code).
489c9b5090e2 Initial load
duke
parents:
diff changeset
    14
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
489c9b5090e2 Initial load
duke
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    18
 *
5547
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 670
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 670
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 670
diff changeset
    21
 * questions.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    22
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    23
 */
489c9b5090e2 Initial load
duke
parents:
diff changeset
    24
30764
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 30566
diff changeset
    25
#ifndef SHARE_VM_GC_PARALLEL_PSPROMOTIONMANAGER_HPP
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 30566
diff changeset
    26
#define SHARE_VM_GC_PARALLEL_PSPROMOTIONMANAGER_HPP
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6248
diff changeset
    27
30764
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 30566
diff changeset
    28
#include "gc/parallel/psPromotionLAB.hpp"
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 30566
diff changeset
    29
#include "gc/shared/copyFailedInfo.hpp"
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 30566
diff changeset
    30
#include "gc/shared/gcTrace.hpp"
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 30566
diff changeset
    31
#include "gc/shared/taskqueue.hpp"
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6248
diff changeset
    32
#include "memory/allocation.hpp"
19285
0a3b3f115402 8022880: False sharing between PSPromotionManager instances
stefank
parents: 18025
diff changeset
    33
#include "memory/padded.hpp"
0a3b3f115402 8022880: False sharing between PSPromotionManager instances
stefank
parents: 18025
diff changeset
    34
#include "utilities/globalDefinitions.hpp"
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6248
diff changeset
    35
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    36
//
489c9b5090e2 Initial load
duke
parents:
diff changeset
    37
// psPromotionManager is used by a single thread to manage object survival
489c9b5090e2 Initial load
duke
parents:
diff changeset
    38
// during a scavenge. The promotion manager contains thread local data only.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    39
//
18025
b7bcf7497f93 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 13195
diff changeset
    40
// NOTE! Be careful when allocating the stacks on cheap. If you are going
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    41
// to use a promotion manager in more than one thread, the stacks MUST be
489c9b5090e2 Initial load
duke
parents:
diff changeset
    42
// on cheap. This can lead to memory leaks, though, as they are not auto
489c9b5090e2 Initial load
duke
parents:
diff changeset
    43
// deallocated.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    44
//
489c9b5090e2 Initial load
duke
parents:
diff changeset
    45
// FIX ME FIX ME Add a destructor, and don't rely on the user to drain/flush/deallocate!
489c9b5090e2 Initial load
duke
parents:
diff changeset
    46
//
489c9b5090e2 Initial load
duke
parents:
diff changeset
    47
489c9b5090e2 Initial load
duke
parents:
diff changeset
    48
class MutableSpace;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    49
class PSOldGen;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    50
class ParCompactionManager;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    51
19285
0a3b3f115402 8022880: False sharing between PSPromotionManager instances
stefank
parents: 18025
diff changeset
    52
class PSPromotionManager VALUE_OBJ_CLASS_SPEC {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    53
  friend class PSScavenge;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    54
  friend class PSRefProcTaskExecutor;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    55
 private:
19285
0a3b3f115402 8022880: False sharing between PSPromotionManager instances
stefank
parents: 18025
diff changeset
    56
  static PaddedEnd<PSPromotionManager>* _manager_array;
0a3b3f115402 8022880: False sharing between PSPromotionManager instances
stefank
parents: 18025
diff changeset
    57
  static OopStarTaskQueueSet*           _stack_array_depth;
0a3b3f115402 8022880: False sharing between PSPromotionManager instances
stefank
parents: 18025
diff changeset
    58
  static PSOldGen*                      _old_gen;
0a3b3f115402 8022880: False sharing between PSPromotionManager instances
stefank
parents: 18025
diff changeset
    59
  static MutableSpace*                  _young_space;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    60
6067
8bfddf73fc04 6962947: shared TaskQueue statistics
jcoomes
parents: 5918
diff changeset
    61
#if TASKQUEUE_STATS
8bfddf73fc04 6962947: shared TaskQueue statistics
jcoomes
parents: 5918
diff changeset
    62
  size_t                              _masked_pushes;
8bfddf73fc04 6962947: shared TaskQueue statistics
jcoomes
parents: 5918
diff changeset
    63
  size_t                              _masked_steals;
8bfddf73fc04 6962947: shared TaskQueue statistics
jcoomes
parents: 5918
diff changeset
    64
  size_t                              _arrays_chunked;
8bfddf73fc04 6962947: shared TaskQueue statistics
jcoomes
parents: 5918
diff changeset
    65
  size_t                              _array_chunks_processed;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    66
27154
ccf8883e01be 8027428: Different conditions for printing taskqueue statistics for parallel gc, parNew and G1
jwilhelm
parents: 20282
diff changeset
    67
  void print_local_stats(outputStream* const out, uint i) const;
35061
be6025ebffea 8145092: Use Unified Logging for the GC logging
brutisso
parents: 31330
diff changeset
    68
  static void print_taskqueue_stats();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    69
6067
8bfddf73fc04 6962947: shared TaskQueue statistics
jcoomes
parents: 5918
diff changeset
    70
  void reset_stats();
8bfddf73fc04 6962947: shared TaskQueue statistics
jcoomes
parents: 5918
diff changeset
    71
#endif // TASKQUEUE_STATS
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    72
489c9b5090e2 Initial load
duke
parents:
diff changeset
    73
  PSYoungPromotionLAB                 _young_lab;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    74
  PSOldPromotionLAB                   _old_lab;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    75
  bool                                _young_gen_is_full;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    76
  bool                                _old_gen_is_full;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    77
489c9b5090e2 Initial load
duke
parents:
diff changeset
    78
  OopStarTaskQueue                    _claimed_stack_depth;
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 11753
diff changeset
    79
  OverflowTaskQueue<oop, mtGC>        _claimed_stack_breadth;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    80
489c9b5090e2 Initial load
duke
parents:
diff changeset
    81
  bool                                _totally_drain;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    82
  uint                                _target_stack_size;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    83
489c9b5090e2 Initial load
duke
parents:
diff changeset
    84
  uint                                _array_chunk_size;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    85
  uint                                _min_array_size_for_chunking;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    86
18025
b7bcf7497f93 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 13195
diff changeset
    87
  PromotionFailedInfo                 _promotion_failed_info;
b7bcf7497f93 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 13195
diff changeset
    88
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    89
  // Accessors
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    90
  static PSOldGen* old_gen()         { return _old_gen; }
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    91
  static MutableSpace* young_space() { return _young_space; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    92
31330
77061bb01b18 8081382: Make flags ParallelGCThreads and ConcGCThreads of type uint
david
parents: 30764
diff changeset
    93
  inline static PSPromotionManager* manager_array(uint index);
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    94
  template <class T> inline void claim_or_forward_internal_depth(T* p);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    95
489c9b5090e2 Initial load
duke
parents:
diff changeset
    96
  // On the task queues we push reference locations as well as
489c9b5090e2 Initial load
duke
parents:
diff changeset
    97
  // partially-scanned arrays (in the latter case, we push an oop to
489c9b5090e2 Initial load
duke
parents:
diff changeset
    98
  // the from-space image of the array and the length on the
489c9b5090e2 Initial load
duke
parents:
diff changeset
    99
  // from-space image indicates how many entries on the array we still
489c9b5090e2 Initial load
duke
parents:
diff changeset
   100
  // need to scan; this is basically how ParNew does partial array
489c9b5090e2 Initial load
duke
parents:
diff changeset
   101
  // scanning too). To be able to distinguish between reference
489c9b5090e2 Initial load
duke
parents:
diff changeset
   102
  // locations and partially-scanned array oops we simply mask the
489c9b5090e2 Initial load
duke
parents:
diff changeset
   103
  // latter oops with 0x01. The next three methods do the masking,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   104
  // unmasking, and checking whether the oop is masked or not. Notice
489c9b5090e2 Initial load
duke
parents:
diff changeset
   105
  // that the signature of the mask and unmask methods looks a bit
489c9b5090e2 Initial load
duke
parents:
diff changeset
   106
  // strange, as they accept and return different types (oop and
489c9b5090e2 Initial load
duke
parents:
diff changeset
   107
  // oop*). This is because of the difference in types between what
489c9b5090e2 Initial load
duke
parents:
diff changeset
   108
  // the task queue holds (oop*) and oops to partially-scanned arrays
489c9b5090e2 Initial load
duke
parents:
diff changeset
   109
  // (oop). We do all the necessary casting in the mask / unmask
489c9b5090e2 Initial load
duke
parents:
diff changeset
   110
  // methods to avoid sprinkling the rest of the code with more casts.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   111
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   112
  // These are added to the taskqueue so PS_CHUNKED_ARRAY_OOP_MASK (or any
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   113
  // future masks) can't conflict with COMPRESSED_OOP_MASK
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   114
#define PS_CHUNKED_ARRAY_OOP_MASK  0x2
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   115
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   116
  bool is_oop_masked(StarTask p) {
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   117
    // If something is marked chunked it's always treated like wide oop*
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   118
    return (((intptr_t)(oop*)p) & PS_CHUNKED_ARRAY_OOP_MASK) ==
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   119
                                  PS_CHUNKED_ARRAY_OOP_MASK;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   120
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   121
489c9b5090e2 Initial load
duke
parents:
diff changeset
   122
  oop* mask_chunked_array_oop(oop obj) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   123
    assert(!is_oop_masked((oop*) obj), "invariant");
20282
7f9cbdf89af2 7195622: CheckUnhandledOops has limited usefulness now
hseigel
parents: 19285
diff changeset
   124
    oop* ret = (oop*) (cast_from_oop<uintptr_t>(obj) | PS_CHUNKED_ARRAY_OOP_MASK);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   125
    assert(is_oop_masked(ret), "invariant");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   126
    return ret;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   127
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   128
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   129
  oop unmask_chunked_array_oop(StarTask p) {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   130
    assert(is_oop_masked(p), "invariant");
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   131
    assert(!p.is_narrow(), "chunked array oops cannot be narrow");
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   132
    oop *chunk = (oop*)p;  // cast p to oop (uses conversion operator)
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   133
    oop ret = oop((oop*)((uintptr_t)chunk & ~PS_CHUNKED_ARRAY_OOP_MASK));
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   134
    assert(!is_oop_masked((oop*) ret), "invariant");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   135
    return ret;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   136
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   137
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   138
  template <class T> void  process_array_chunk_work(oop obj,
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   139
                                                    int start, int end);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   140
  void process_array_chunk(oop old);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   141
30566
18eb9aa972d0 8076177: Remove usage of stack.inline.hpp functions from taskqueue.hpp
stefank
parents: 30563
diff changeset
   142
  template <class T> void push_depth(T* p);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   143
28177
318600b0d7db 8066442: Add PS and ParOld support for promotion event
sfriberg
parents: 27154
diff changeset
   144
  inline void promotion_trace_event(oop new_obj, oop old_obj, size_t obj_size,
318600b0d7db 8066442: Add PS and ParOld support for promotion event
sfriberg
parents: 27154
diff changeset
   145
                                    uint age, bool tenured,
318600b0d7db 8066442: Add PS and ParOld support for promotion event
sfriberg
parents: 27154
diff changeset
   146
                                    const PSPromotionLAB* lab);
318600b0d7db 8066442: Add PS and ParOld support for promotion event
sfriberg
parents: 27154
diff changeset
   147
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   148
 protected:
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   149
  static OopStarTaskQueueSet* stack_array_depth()   { return _stack_array_depth; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   150
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   151
  // Static
489c9b5090e2 Initial load
duke
parents:
diff changeset
   152
  static void initialize();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   153
489c9b5090e2 Initial load
duke
parents:
diff changeset
   154
  static void pre_scavenge();
18025
b7bcf7497f93 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 13195
diff changeset
   155
  static bool post_scavenge(YoungGCTracer& gc_tracer);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   156
31330
77061bb01b18 8081382: Make flags ParallelGCThreads and ConcGCThreads of type uint
david
parents: 30764
diff changeset
   157
  static PSPromotionManager* gc_thread_promotion_manager(uint index);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   158
  static PSPromotionManager* vm_thread_promotion_manager();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   159
30566
18eb9aa972d0 8076177: Remove usage of stack.inline.hpp functions from taskqueue.hpp
stefank
parents: 30563
diff changeset
   160
  static bool steal_depth(int queue_num, int* seed, StarTask& t);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   161
489c9b5090e2 Initial load
duke
parents:
diff changeset
   162
  PSPromotionManager();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   163
489c9b5090e2 Initial load
duke
parents:
diff changeset
   164
  // Accessors
489c9b5090e2 Initial load
duke
parents:
diff changeset
   165
  OopStarTaskQueue* claimed_stack_depth() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   166
    return &_claimed_stack_depth;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   167
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   168
489c9b5090e2 Initial load
duke
parents:
diff changeset
   169
  bool young_gen_is_full()             { return _young_gen_is_full; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   170
489c9b5090e2 Initial load
duke
parents:
diff changeset
   171
  bool old_gen_is_full()               { return _old_gen_is_full; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   172
  void set_old_gen_is_full(bool state) { _old_gen_is_full = state; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   173
489c9b5090e2 Initial load
duke
parents:
diff changeset
   174
  // Promotion methods
11753
c9e420473a11 7144296: PS: Optimize nmethods processing
iveresov
parents: 7397
diff changeset
   175
  template<bool promote_immediately> oop copy_to_survivor_space(oop o);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   176
  oop oop_promotion_failed(oop obj, markOop obj_mark);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   177
489c9b5090e2 Initial load
duke
parents:
diff changeset
   178
  void reset();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   179
489c9b5090e2 Initial load
duke
parents:
diff changeset
   180
  void flush_labs();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   181
  void drain_stacks(bool totally_drain) {
6248
2e661807cef0 6962589: remove breadth first scanning code from parallel gc
tonyp
parents: 6067
diff changeset
   182
    drain_stacks_depth(totally_drain);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   183
  }
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   184
 public:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   185
  void drain_stacks_cond_depth() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   186
    if (claimed_stack_depth()->size() > _target_stack_size) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   187
      drain_stacks_depth(false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   188
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   189
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   190
  void drain_stacks_depth(bool totally_drain);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   191
489c9b5090e2 Initial load
duke
parents:
diff changeset
   192
  bool stacks_empty() {
6248
2e661807cef0 6962589: remove breadth first scanning code from parallel gc
tonyp
parents: 6067
diff changeset
   193
    return claimed_stack_depth()->is_empty();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   194
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   195
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   196
  inline void process_popped_location_depth(StarTask p);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   197
29208
b570d043f295 8073543: Circular include dependency between psScavenge.inline.hpp and psPromotionManager.inline.hpp
stefank
parents: 28177
diff changeset
   198
  static bool should_scavenge(oop* p, bool check_to_space = false);
b570d043f295 8073543: Circular include dependency between psScavenge.inline.hpp and psPromotionManager.inline.hpp
stefank
parents: 28177
diff changeset
   199
  static bool should_scavenge(narrowOop* p, bool check_to_space = false);
b570d043f295 8073543: Circular include dependency between psScavenge.inline.hpp and psPromotionManager.inline.hpp
stefank
parents: 28177
diff changeset
   200
b570d043f295 8073543: Circular include dependency between psScavenge.inline.hpp and psPromotionManager.inline.hpp
stefank
parents: 28177
diff changeset
   201
  template <class T, bool promote_immediately>
b570d043f295 8073543: Circular include dependency between psScavenge.inline.hpp and psPromotionManager.inline.hpp
stefank
parents: 28177
diff changeset
   202
  void copy_and_push_safe_barrier(T* p);
b570d043f295 8073543: Circular include dependency between psScavenge.inline.hpp and psPromotionManager.inline.hpp
stefank
parents: 28177
diff changeset
   203
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   204
  template <class T> inline void claim_or_forward_depth(T* p);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   205
6067
8bfddf73fc04 6962947: shared TaskQueue statistics
jcoomes
parents: 5918
diff changeset
   206
  TASKQUEUE_STATS_ONLY(inline void record_steal(StarTask& p);)
29792
8c6fa07f0869 8075957: Reduce calls to the GC specific object visitors in oopDesc
stefank
parents: 29208
diff changeset
   207
8c6fa07f0869 8075957: Reduce calls to the GC specific object visitors in oopDesc
stefank
parents: 29208
diff changeset
   208
  void push_contents(oop obj);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   209
};
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6248
diff changeset
   210
30764
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 30566
diff changeset
   211
#endif // SHARE_VM_GC_PARALLEL_PSPROMOTIONMANAGER_HPP