hotspot/src/share/vm/gc/serial/markSweep.hpp
author tschatzl
Thu, 28 Jan 2016 13:30:12 +0100
changeset 35877 a2a62511d0f8
parent 33226 19cb9b844190
child 46415 7d5a286cdf89
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
/*
29701
f638fc81a3d0 8075803: Fix GC includes and forward declarations
stefank
parents: 25492
diff changeset
     2
 * Copyright (c) 1997, 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: 5076
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 5076
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: 5076
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: 30262
diff changeset
    25
#ifndef SHARE_VM_GC_SERIAL_MARKSWEEP_HPP
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 30262
diff changeset
    26
#define SHARE_VM_GC_SERIAL_MARKSWEEP_HPP
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6762
diff changeset
    27
30764
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 30262
diff changeset
    28
#include "gc/shared/collectedHeap.hpp"
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 30262
diff changeset
    29
#include "gc/shared/genOopClosures.hpp"
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 30262
diff changeset
    30
#include "gc/shared/taskqueue.hpp"
29701
f638fc81a3d0 8075803: Fix GC includes and forward declarations
stefank
parents: 25492
diff changeset
    31
#include "memory/iterator.hpp"
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6762
diff changeset
    32
#include "oops/markOop.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6762
diff changeset
    33
#include "oops/oop.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6762
diff changeset
    34
#include "runtime/timer.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6762
diff changeset
    35
#include "utilities/growableArray.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6762
diff changeset
    36
#include "utilities/stack.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6762
diff changeset
    37
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    38
class ReferenceProcessor;
3696
9e5d9b5e1049 4957990: Perm heap bloat in JVM
ysr
parents: 670
diff changeset
    39
class DataLayout;
18025
b7bcf7497f93 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 17625
diff changeset
    40
class SerialOldTracer;
b7bcf7497f93 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 17625
diff changeset
    41
class STWGCTimer;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    42
489c9b5090e2 Initial load
duke
parents:
diff changeset
    43
// MarkSweep takes care of global mark-compact garbage collection for a
489c9b5090e2 Initial load
duke
parents:
diff changeset
    44
// GenCollectedHeap using a four-phase pointer forwarding algorithm.  All
489c9b5090e2 Initial load
duke
parents:
diff changeset
    45
// generations are assumed to support marking; those that can also support
489c9b5090e2 Initial load
duke
parents:
diff changeset
    46
// compaction.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    47
//
489c9b5090e2 Initial load
duke
parents:
diff changeset
    48
// Class unloading will only occur when a full gc is invoked.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    49
489c9b5090e2 Initial load
duke
parents:
diff changeset
    50
// declared at end
489c9b5090e2 Initial load
duke
parents:
diff changeset
    51
class PreservedMark;
32606
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
    52
class MarkAndPushClosure;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    53
489c9b5090e2 Initial load
duke
parents:
diff changeset
    54
class MarkSweep : AllStatic {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    55
  //
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    56
  // Inline closure decls
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    57
  //
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    58
  class FollowRootClosure: public OopsInGenClosure {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    59
   public:
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    60
    virtual void do_oop(oop* p);
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    61
    virtual void do_oop(narrowOop* p);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    62
  };
489c9b5090e2 Initial load
duke
parents:
diff changeset
    63
489c9b5090e2 Initial load
duke
parents:
diff changeset
    64
  class FollowStackClosure: public VoidClosure {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    65
   public:
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    66
    virtual void do_void();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    67
  };
489c9b5090e2 Initial load
duke
parents:
diff changeset
    68
489c9b5090e2 Initial load
duke
parents:
diff changeset
    69
  class AdjustPointerClosure: public OopsInGenClosure {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    70
   public:
30150
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29792
diff changeset
    71
    template <typename T> void do_oop_nv(T* p);
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    72
    virtual void do_oop(oop* p);
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    73
    virtual void do_oop(narrowOop* p);
30150
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29792
diff changeset
    74
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29792
diff changeset
    75
    // This closure provides its own oop verification code.
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29792
diff changeset
    76
    debug_only(virtual bool should_verify_oops() { return false; })
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    77
  };
489c9b5090e2 Initial load
duke
parents:
diff changeset
    78
489c9b5090e2 Initial load
duke
parents:
diff changeset
    79
  // Used for java/lang/ref handling
489c9b5090e2 Initial load
duke
parents:
diff changeset
    80
  class IsAliveClosure: public BoolObjectClosure {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    81
   public:
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    82
    virtual bool do_object_b(oop p);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    83
  };
489c9b5090e2 Initial load
duke
parents:
diff changeset
    84
489c9b5090e2 Initial load
duke
parents:
diff changeset
    85
  class KeepAliveClosure: public OopClosure {
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    86
   protected:
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    87
    template <class T> void do_oop_work(T* p);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    88
   public:
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    89
    virtual void do_oop(oop* p);
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    90
    virtual void do_oop(narrowOop* p);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    91
  };
489c9b5090e2 Initial load
duke
parents:
diff changeset
    92
489c9b5090e2 Initial load
duke
parents:
diff changeset
    93
  //
489c9b5090e2 Initial load
duke
parents:
diff changeset
    94
  // Friend decls
489c9b5090e2 Initial load
duke
parents:
diff changeset
    95
  //
489c9b5090e2 Initial load
duke
parents:
diff changeset
    96
  friend class AdjustPointerClosure;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    97
  friend class KeepAliveClosure;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    98
  friend class VM_MarkSweep;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    99
  friend void marksweep_init();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   100
489c9b5090e2 Initial load
duke
parents:
diff changeset
   101
  //
489c9b5090e2 Initial load
duke
parents:
diff changeset
   102
  // Vars
489c9b5090e2 Initial load
duke
parents:
diff changeset
   103
  //
489c9b5090e2 Initial load
duke
parents:
diff changeset
   104
 protected:
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13195
diff changeset
   105
  // Total invocations of a MarkSweep collection
17392
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17105
diff changeset
   106
  static uint _total_invocations;
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13195
diff changeset
   107
5076
8b74a4b60b31 4396719: Mark Sweep stack overflow on deeply nested Object arrays
jcoomes
parents: 3919
diff changeset
   108
  // Traversal stacks used during phase1
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 11178
diff changeset
   109
  static Stack<oop, mtGC>                      _marking_stack;
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 11178
diff changeset
   110
  static Stack<ObjArrayTask, mtGC>             _objarray_stack;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   111
489c9b5090e2 Initial load
duke
parents:
diff changeset
   112
  // Space for storing/restoring mark word
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 11178
diff changeset
   113
  static Stack<markOop, mtGC>                  _preserved_mark_stack;
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 11178
diff changeset
   114
  static Stack<oop, mtGC>                      _preserved_oop_stack;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   115
  static size_t                          _preserved_count;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   116
  static size_t                          _preserved_count_max;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   117
  static PreservedMark*                  _preserved_marks;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   118
489c9b5090e2 Initial load
duke
parents:
diff changeset
   119
  // Reference processing (used in ...follow_contents)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   120
  static ReferenceProcessor*             _ref_processor;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   121
18025
b7bcf7497f93 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 17625
diff changeset
   122
  static STWGCTimer*                     _gc_timer;
b7bcf7497f93 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 17625
diff changeset
   123
  static SerialOldTracer*                _gc_tracer;
b7bcf7497f93 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 17625
diff changeset
   124
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   125
  // Non public closures
489c9b5090e2 Initial load
duke
parents:
diff changeset
   126
  static KeepAliveClosure keep_alive;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   127
489c9b5090e2 Initial load
duke
parents:
diff changeset
   128
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   129
  // Public closures
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13195
diff changeset
   130
  static IsAliveClosure       is_alive;
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   131
  static FollowRootClosure    follow_root_closure;
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   132
  static MarkAndPushClosure   mark_and_push_closure;
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   133
  static FollowStackClosure   follow_stack_closure;
25492
d27050bdfb04 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 25491
diff changeset
   134
  static CLDToOopClosure      follow_cld_closure;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   135
  static AdjustPointerClosure adjust_pointer_closure;
25492
d27050bdfb04 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 25491
diff changeset
   136
  static CLDToOopClosure      adjust_cld_closure;
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13195
diff changeset
   137
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13195
diff changeset
   138
  // Accessors
17392
2f967c0e4246 6843347: Boundary values in some public GC options cause crashes
tschatzl
parents: 17105
diff changeset
   139
  static uint total_invocations() { return _total_invocations; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   140
489c9b5090e2 Initial load
duke
parents:
diff changeset
   141
  // Reference Processing
489c9b5090e2 Initial load
duke
parents:
diff changeset
   142
  static ReferenceProcessor* const ref_processor() { return _ref_processor; }
32606
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   143
  static void set_ref_processor(ReferenceProcessor* rp);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   144
31346
a70d45c06136 8042668: GC Support for shared heap ranges in CDS
jiangli
parents: 30764
diff changeset
   145
  // Archive Object handling
a70d45c06136 8042668: GC Support for shared heap ranges in CDS
jiangli
parents: 30764
diff changeset
   146
  static inline bool is_archive_object(oop object);
a70d45c06136 8042668: GC Support for shared heap ranges in CDS
jiangli
parents: 30764
diff changeset
   147
18025
b7bcf7497f93 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 17625
diff changeset
   148
  static STWGCTimer* gc_timer() { return _gc_timer; }
b7bcf7497f93 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 17625
diff changeset
   149
  static SerialOldTracer* gc_tracer() { return _gc_tracer; }
b7bcf7497f93 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 17625
diff changeset
   150
32606
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   151
  static void preserve_mark(oop p, markOop mark);
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   152
                                // Save the mark word so it can be restored later
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   153
  static void adjust_marks();   // Adjust the pointers in the preserved marks table
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   154
  static void restore_marks();  // Restore the marks that we saved in preserve_mark
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   155
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   156
  static int adjust_pointers(oop obj);
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   157
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   158
  static void follow_stack();   // Empty marking stack.
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   159
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   160
  static void follow_klass(Klass* klass);
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   161
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   162
  static void follow_cld(ClassLoaderData* cld);
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   163
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   164
  template <class T> static inline void adjust_pointer(T* p);
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   165
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   166
  // Check mark and maybe push on marking stack
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   167
  template <class T> static void mark_and_push(T* p);
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   168
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   169
 private:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   170
  // Call backs for marking
489c9b5090e2 Initial load
duke
parents:
diff changeset
   171
  static void mark_object(oop obj);
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   172
  // Mark pointer and follow contents.  Empty marking stack afterwards.
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   173
  template <class T> static inline void follow_root(T* p);
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13195
diff changeset
   174
5076
8b74a4b60b31 4396719: Mark Sweep stack overflow on deeply nested Object arrays
jcoomes
parents: 3919
diff changeset
   175
  static inline void push_objarray(oop obj, size_t index);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   176
29792
8c6fa07f0869 8075957: Reduce calls to the GC specific object visitors in oopDesc
stefank
parents: 29701
diff changeset
   177
  static void follow_object(oop obj);
8c6fa07f0869 8075957: Reduce calls to the GC specific object visitors in oopDesc
stefank
parents: 29701
diff changeset
   178
32606
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   179
  static void follow_array(objArrayOop array);
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   180
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   181
  static void follow_array_chunk(objArrayOop array, int index);
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   182
};
29792
8c6fa07f0869 8075957: Reduce calls to the GC specific object visitors in oopDesc
stefank
parents: 29701
diff changeset
   183
32606
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   184
class MarkAndPushClosure: public ExtendedOopClosure {
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   185
public:
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   186
  template <typename T> void do_oop_nv(T* p);
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   187
  virtual void do_oop(oop* p);
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   188
  virtual void do_oop(narrowOop* p);
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13195
diff changeset
   189
32606
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   190
  virtual bool do_metadata();
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   191
  bool do_metadata_nv();
29792
8c6fa07f0869 8075957: Reduce calls to the GC specific object visitors in oopDesc
stefank
parents: 29701
diff changeset
   192
32606
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   193
  virtual void do_klass(Klass* k);
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   194
  void do_klass_nv(Klass* k);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   195
32606
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   196
  virtual void do_cld(ClassLoaderData* cld);
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   197
  void do_cld_nv(ClassLoaderData* cld);
fdaa30d06ada 8129417: Oop iteration clean-up to remove oop_ms_follow_contents
sjohanss
parents: 31346
diff changeset
   198
33226
19cb9b844190 8139341: Hide ExtendedOopClosure::_ref_processor
kbarrett
parents: 32606
diff changeset
   199
  void set_ref_processor(ReferenceProcessor* rp) {
19cb9b844190 8139341: Hide ExtendedOopClosure::_ref_processor
kbarrett
parents: 32606
diff changeset
   200
    set_ref_processor_internal(rp);
19cb9b844190 8139341: Hide ExtendedOopClosure::_ref_processor
kbarrett
parents: 32606
diff changeset
   201
  }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   202
};
489c9b5090e2 Initial load
duke
parents:
diff changeset
   203
489c9b5090e2 Initial load
duke
parents:
diff changeset
   204
class PreservedMark VALUE_OBJ_CLASS_SPEC {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   205
private:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   206
  oop _obj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   207
  markOop _mark;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   208
489c9b5090e2 Initial load
duke
parents:
diff changeset
   209
public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   210
  void init(oop obj, markOop mark) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   211
    _obj = obj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   212
    _mark = mark;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   213
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   214
29701
f638fc81a3d0 8075803: Fix GC includes and forward declarations
stefank
parents: 25492
diff changeset
   215
  void adjust_pointer();
f638fc81a3d0 8075803: Fix GC includes and forward declarations
stefank
parents: 25492
diff changeset
   216
  void restore();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   217
};
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6762
diff changeset
   218
30764
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 30262
diff changeset
   219
#endif // SHARE_VM_GC_SERIAL_MARKSWEEP_HPP