Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp
38920 views
1
/*
2
* Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*
23
*/
24
25
#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTMARK_HPP
26
#define SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTMARK_HPP
27
28
#include "classfile/javaClasses.hpp"
29
#include "gc_implementation/g1/g1ConcurrentMarkObjArrayProcessor.hpp"
30
#include "gc_implementation/g1/heapRegionSet.hpp"
31
#include "gc_implementation/g1/g1RegionToSpaceMapper.hpp"
32
#include "gc_implementation/shared/gcId.hpp"
33
#include "utilities/taskqueue.hpp"
34
35
class G1CollectedHeap;
36
class CMBitMap;
37
class CMTask;
38
typedef GenericTaskQueue<oop, mtGC> CMTaskQueue;
39
typedef GenericTaskQueueSet<CMTaskQueue, mtGC> CMTaskQueueSet;
40
41
// Closure used by CM during concurrent reference discovery
42
// and reference processing (during remarking) to determine
43
// if a particular object is alive. It is primarily used
44
// to determine if referents of discovered reference objects
45
// are alive. An instance is also embedded into the
46
// reference processor as the _is_alive_non_header field
47
class G1CMIsAliveClosure: public BoolObjectClosure {
48
G1CollectedHeap* _g1;
49
public:
50
G1CMIsAliveClosure(G1CollectedHeap* g1) : _g1(g1) { }
51
52
bool do_object_b(oop obj);
53
};
54
55
// A generic CM bit map. This is essentially a wrapper around the BitMap
56
// class, with one bit per (1<<_shifter) HeapWords.
57
58
class CMBitMapRO VALUE_OBJ_CLASS_SPEC {
59
protected:
60
HeapWord* _bmStartWord; // base address of range covered by map
61
size_t _bmWordSize; // map size (in #HeapWords covered)
62
const int _shifter; // map to char or bit
63
BitMap _bm; // the bit map itself
64
65
public:
66
// constructor
67
CMBitMapRO(int shifter);
68
69
enum { do_yield = true };
70
71
// inquiries
72
HeapWord* startWord() const { return _bmStartWord; }
73
size_t sizeInWords() const { return _bmWordSize; }
74
// the following is one past the last word in space
75
HeapWord* endWord() const { return _bmStartWord + _bmWordSize; }
76
77
// read marks
78
79
bool isMarked(HeapWord* addr) const {
80
assert(_bmStartWord <= addr && addr < (_bmStartWord + _bmWordSize),
81
"outside underlying space?");
82
return _bm.at(heapWordToOffset(addr));
83
}
84
85
// iteration
86
inline bool iterate(BitMapClosure* cl, MemRegion mr);
87
inline bool iterate(BitMapClosure* cl);
88
89
// Return the address corresponding to the next marked bit at or after
90
// "addr", and before "limit", if "limit" is non-NULL. If there is no
91
// such bit, returns "limit" if that is non-NULL, or else "endWord()".
92
HeapWord* getNextMarkedWordAddress(const HeapWord* addr,
93
const HeapWord* limit = NULL) const;
94
// Return the address corresponding to the next unmarked bit at or after
95
// "addr", and before "limit", if "limit" is non-NULL. If there is no
96
// such bit, returns "limit" if that is non-NULL, or else "endWord()".
97
HeapWord* getNextUnmarkedWordAddress(const HeapWord* addr,
98
const HeapWord* limit = NULL) const;
99
100
// conversion utilities
101
HeapWord* offsetToHeapWord(size_t offset) const {
102
return _bmStartWord + (offset << _shifter);
103
}
104
size_t heapWordToOffset(const HeapWord* addr) const {
105
return pointer_delta(addr, _bmStartWord) >> _shifter;
106
}
107
int heapWordDiffToOffsetDiff(size_t diff) const;
108
109
// The argument addr should be the start address of a valid object
110
HeapWord* nextObject(HeapWord* addr) {
111
oop obj = (oop) addr;
112
HeapWord* res = addr + obj->size();
113
assert(offsetToHeapWord(heapWordToOffset(res)) == res, "sanity");
114
return res;
115
}
116
117
void print_on_error(outputStream* st, const char* prefix) const;
118
119
// debugging
120
NOT_PRODUCT(bool covers(MemRegion rs) const;)
121
};
122
123
class CMBitMapMappingChangedListener : public G1MappingChangedListener {
124
private:
125
CMBitMap* _bm;
126
public:
127
CMBitMapMappingChangedListener() : _bm(NULL) {}
128
129
void set_bitmap(CMBitMap* bm) { _bm = bm; }
130
131
virtual void on_commit(uint start_idx, size_t num_regions, bool zero_filled);
132
};
133
134
class CMBitMap : public CMBitMapRO {
135
private:
136
CMBitMapMappingChangedListener _listener;
137
138
public:
139
static size_t compute_size(size_t heap_size);
140
// Returns the amount of bytes on the heap between two marks in the bitmap.
141
static size_t mark_distance();
142
143
CMBitMap() : CMBitMapRO(LogMinObjAlignment), _listener() { _listener.set_bitmap(this); }
144
145
// Initializes the underlying BitMap to cover the given area.
146
void initialize(MemRegion heap, G1RegionToSpaceMapper* storage);
147
148
// Write marks.
149
inline void mark(HeapWord* addr);
150
inline void clear(HeapWord* addr);
151
inline bool parMark(HeapWord* addr);
152
inline bool parClear(HeapWord* addr);
153
154
void markRange(MemRegion mr);
155
void clearRange(MemRegion mr);
156
157
// Starting at the bit corresponding to "addr" (inclusive), find the next
158
// "1" bit, if any. This bit starts some run of consecutive "1"'s; find
159
// the end of this run (stopping at "end_addr"). Return the MemRegion
160
// covering from the start of the region corresponding to the first bit
161
// of the run to the end of the region corresponding to the last bit of
162
// the run. If there is no "1" bit at or after "addr", return an empty
163
// MemRegion.
164
MemRegion getAndClearMarkedRegion(HeapWord* addr, HeapWord* end_addr);
165
166
// Clear the whole mark bitmap.
167
void clearAll();
168
};
169
170
// Represents a marking stack used by ConcurrentMarking in the G1 collector.
171
class CMMarkStack VALUE_OBJ_CLASS_SPEC {
172
VirtualSpace _virtual_space; // Underlying backing store for actual stack
173
ConcurrentMark* _cm;
174
oop* _base; // bottom of stack
175
jint _index; // one more than last occupied index
176
jint _capacity; // max #elements
177
jint _saved_index; // value of _index saved at start of GC
178
NOT_PRODUCT(jint _max_depth;) // max depth plumbed during run
179
180
bool _overflow;
181
bool _should_expand;
182
DEBUG_ONLY(bool _drain_in_progress;)
183
DEBUG_ONLY(bool _drain_in_progress_yields;)
184
185
public:
186
CMMarkStack(ConcurrentMark* cm);
187
~CMMarkStack();
188
189
#ifndef PRODUCT
190
jint max_depth() const {
191
return _max_depth;
192
}
193
#endif
194
195
bool allocate(size_t capacity);
196
197
oop pop() {
198
if (!isEmpty()) {
199
return _base[--_index] ;
200
}
201
return NULL;
202
}
203
204
// If overflow happens, don't do the push, and record the overflow.
205
// *Requires* that "ptr" is already marked.
206
void push(oop ptr) {
207
if (isFull()) {
208
// Record overflow.
209
_overflow = true;
210
return;
211
} else {
212
_base[_index++] = ptr;
213
NOT_PRODUCT(_max_depth = MAX2(_max_depth, _index));
214
}
215
}
216
// Non-block impl. Note: concurrency is allowed only with other
217
// "par_push" operations, not with "pop" or "drain". We would need
218
// parallel versions of them if such concurrency was desired.
219
void par_push(oop ptr);
220
221
// Pushes the first "n" elements of "ptr_arr" on the stack.
222
// Non-block impl. Note: concurrency is allowed only with other
223
// "par_adjoin_arr" or "push" operations, not with "pop" or "drain".
224
void par_adjoin_arr(oop* ptr_arr, int n);
225
226
// Pushes the first "n" elements of "ptr_arr" on the stack.
227
// Locking impl: concurrency is allowed only with
228
// "par_push_arr" and/or "par_pop_arr" operations, which use the same
229
// locking strategy.
230
void par_push_arr(oop* ptr_arr, int n);
231
232
// If returns false, the array was empty. Otherwise, removes up to "max"
233
// elements from the stack, and transfers them to "ptr_arr" in an
234
// unspecified order. The actual number transferred is given in "n" ("n
235
// == 0" is deliberately redundant with the return value.) Locking impl:
236
// concurrency is allowed only with "par_push_arr" and/or "par_pop_arr"
237
// operations, which use the same locking strategy.
238
bool par_pop_arr(oop* ptr_arr, int max, int* n);
239
240
// Drain the mark stack, applying the given closure to all fields of
241
// objects on the stack. (That is, continue until the stack is empty,
242
// even if closure applications add entries to the stack.) The "bm"
243
// argument, if non-null, may be used to verify that only marked objects
244
// are on the mark stack. If "yield_after" is "true", then the
245
// concurrent marker performing the drain offers to yield after
246
// processing each object. If a yield occurs, stops the drain operation
247
// and returns false. Otherwise, returns true.
248
template<class OopClosureClass>
249
bool drain(OopClosureClass* cl, CMBitMap* bm, bool yield_after = false);
250
251
bool isEmpty() { return _index == 0; }
252
bool isFull() { return _index == _capacity; }
253
int maxElems() { return _capacity; }
254
255
bool overflow() { return _overflow; }
256
void clear_overflow() { _overflow = false; }
257
258
bool should_expand() const { return _should_expand; }
259
void set_should_expand();
260
261
// Expand the stack, typically in response to an overflow condition
262
void expand();
263
264
int size() { return _index; }
265
266
void setEmpty() { _index = 0; clear_overflow(); }
267
268
// Record the current index.
269
void note_start_of_gc();
270
271
// Make sure that we have not added any entries to the stack during GC.
272
void note_end_of_gc();
273
274
// iterate over the oops in the mark stack, up to the bound recorded via
275
// the call above.
276
void oops_do(OopClosure* f);
277
};
278
279
class ForceOverflowSettings VALUE_OBJ_CLASS_SPEC {
280
private:
281
#ifndef PRODUCT
282
uintx _num_remaining;
283
bool _force;
284
#endif // !defined(PRODUCT)
285
286
public:
287
void init() PRODUCT_RETURN;
288
void update() PRODUCT_RETURN;
289
bool should_force() PRODUCT_RETURN_( return false; );
290
};
291
292
// this will enable a variety of different statistics per GC task
293
#define _MARKING_STATS_ 0
294
// this will enable the higher verbose levels
295
#define _MARKING_VERBOSE_ 0
296
297
#if _MARKING_STATS_
298
#define statsOnly(statement) \
299
do { \
300
statement ; \
301
} while (0)
302
#else // _MARKING_STATS_
303
#define statsOnly(statement) \
304
do { \
305
} while (0)
306
#endif // _MARKING_STATS_
307
308
typedef enum {
309
no_verbose = 0, // verbose turned off
310
stats_verbose, // only prints stats at the end of marking
311
low_verbose, // low verbose, mostly per region and per major event
312
medium_verbose, // a bit more detailed than low
313
high_verbose // per object verbose
314
} CMVerboseLevel;
315
316
class YoungList;
317
318
// Root Regions are regions that are not empty at the beginning of a
319
// marking cycle and which we might collect during an evacuation pause
320
// while the cycle is active. Given that, during evacuation pauses, we
321
// do not copy objects that are explicitly marked, what we have to do
322
// for the root regions is to scan them and mark all objects reachable
323
// from them. According to the SATB assumptions, we only need to visit
324
// each object once during marking. So, as long as we finish this scan
325
// before the next evacuation pause, we can copy the objects from the
326
// root regions without having to mark them or do anything else to them.
327
//
328
// Currently, we only support root region scanning once (at the start
329
// of the marking cycle) and the root regions are all the survivor
330
// regions populated during the initial-mark pause.
331
class CMRootRegions VALUE_OBJ_CLASS_SPEC {
332
private:
333
YoungList* _young_list;
334
ConcurrentMark* _cm;
335
336
volatile bool _scan_in_progress;
337
volatile bool _should_abort;
338
HeapRegion* volatile _next_survivor;
339
340
public:
341
CMRootRegions();
342
// We actually do most of the initialization in this method.
343
void init(G1CollectedHeap* g1h, ConcurrentMark* cm);
344
345
// Reset the claiming / scanning of the root regions.
346
void prepare_for_scan();
347
348
// Forces get_next() to return NULL so that the iteration aborts early.
349
void abort() { _should_abort = true; }
350
351
// Return true if the CM thread are actively scanning root regions,
352
// false otherwise.
353
bool scan_in_progress() { return _scan_in_progress; }
354
355
// Claim the next root region to scan atomically, or return NULL if
356
// all have been claimed.
357
HeapRegion* claim_next();
358
359
// Flag that we're done with root region scanning and notify anyone
360
// who's waiting on it. If aborted is false, assume that all regions
361
// have been claimed.
362
void scan_finished();
363
364
// If CM threads are still scanning root regions, wait until they
365
// are done. Return true if we had to wait, false otherwise.
366
bool wait_until_scan_finished();
367
};
368
369
class ConcurrentMarkThread;
370
371
class ConcurrentMark: public CHeapObj<mtGC> {
372
friend class CMMarkStack;
373
friend class ConcurrentMarkThread;
374
friend class CMTask;
375
friend class CMBitMapClosure;
376
friend class CMGlobalObjectClosure;
377
friend class CMRemarkTask;
378
friend class CMConcurrentMarkingTask;
379
friend class G1ParNoteEndTask;
380
friend class CalcLiveObjectsClosure;
381
friend class G1CMRefProcTaskProxy;
382
friend class G1CMRefProcTaskExecutor;
383
friend class G1CMKeepAliveAndDrainClosure;
384
friend class G1CMDrainMarkingStackClosure;
385
386
protected:
387
ConcurrentMarkThread* _cmThread; // the thread doing the work
388
G1CollectedHeap* _g1h; // the heap.
389
uint _parallel_marking_threads; // the number of marking
390
// threads we're use
391
uint _max_parallel_marking_threads; // max number of marking
392
// threads we'll ever use
393
double _sleep_factor; // how much we have to sleep, with
394
// respect to the work we just did, to
395
// meet the marking overhead goal
396
double _marking_task_overhead; // marking target overhead for
397
// a single task
398
399
// same as the two above, but for the cleanup task
400
double _cleanup_sleep_factor;
401
double _cleanup_task_overhead;
402
403
FreeRegionList _cleanup_list;
404
405
// Concurrent marking support structures
406
CMBitMap _markBitMap1;
407
CMBitMap _markBitMap2;
408
CMBitMapRO* _prevMarkBitMap; // completed mark bitmap
409
CMBitMap* _nextMarkBitMap; // under-construction mark bitmap
410
411
BitMap _region_bm;
412
BitMap _card_bm;
413
414
// Heap bounds
415
HeapWord* _heap_start;
416
HeapWord* _heap_end;
417
418
// Root region tracking and claiming.
419
CMRootRegions _root_regions;
420
421
// For gray objects
422
CMMarkStack _markStack; // Grey objects behind global finger.
423
HeapWord* volatile _finger; // the global finger, region aligned,
424
// always points to the end of the
425
// last claimed region
426
427
// marking tasks
428
uint _max_worker_id;// maximum worker id
429
uint _active_tasks; // task num currently active
430
CMTask** _tasks; // task queue array (max_worker_id len)
431
CMTaskQueueSet* _task_queues; // task queue set
432
ParallelTaskTerminator _terminator; // for termination
433
434
// Two sync barriers that are used to synchronise tasks when an
435
// overflow occurs. The algorithm is the following. All tasks enter
436
// the first one to ensure that they have all stopped manipulating
437
// the global data structures. After they exit it, they re-initialise
438
// their data structures and task 0 re-initialises the global data
439
// structures. Then, they enter the second sync barrier. This
440
// ensure, that no task starts doing work before all data
441
// structures (local and global) have been re-initialised. When they
442
// exit it, they are free to start working again.
443
WorkGangBarrierSync _first_overflow_barrier_sync;
444
WorkGangBarrierSync _second_overflow_barrier_sync;
445
446
// this is set by any task, when an overflow on the global data
447
// structures is detected.
448
volatile bool _has_overflown;
449
// true: marking is concurrent, false: we're in remark
450
volatile bool _concurrent;
451
// set at the end of a Full GC so that marking aborts
452
volatile bool _has_aborted;
453
GCId _aborted_gc_id;
454
455
// used when remark aborts due to an overflow to indicate that
456
// another concurrent marking phase should start
457
volatile bool _restart_for_overflow;
458
459
// This is true from the very start of concurrent marking until the
460
// point when all the tasks complete their work. It is really used
461
// to determine the points between the end of concurrent marking and
462
// time of remark.
463
volatile bool _concurrent_marking_in_progress;
464
465
// verbose level
466
CMVerboseLevel _verbose_level;
467
468
// All of these times are in ms.
469
NumberSeq _init_times;
470
NumberSeq _remark_times;
471
NumberSeq _remark_mark_times;
472
NumberSeq _remark_weak_ref_times;
473
NumberSeq _cleanup_times;
474
double _total_counting_time;
475
double _total_rs_scrub_time;
476
477
double* _accum_task_vtime; // accumulated task vtime
478
479
FlexibleWorkGang* _parallel_workers;
480
481
ForceOverflowSettings _force_overflow_conc;
482
ForceOverflowSettings _force_overflow_stw;
483
484
void weakRefsWorkParallelPart(BoolObjectClosure* is_alive, bool purged_classes);
485
void weakRefsWork(bool clear_all_soft_refs);
486
487
void swapMarkBitMaps();
488
489
// It resets the global marking data structures, as well as the
490
// task local ones; should be called during initial mark.
491
void reset();
492
493
// Resets all the marking data structures. Called when we have to restart
494
// marking or when marking completes (via set_non_marking_state below).
495
void reset_marking_state(bool clear_overflow = true);
496
497
// We do this after we're done with marking so that the marking data
498
// structures are initialised to a sensible and predictable state.
499
void set_non_marking_state();
500
501
// Called to indicate how many threads are currently active.
502
void set_concurrency(uint active_tasks);
503
504
// It should be called to indicate which phase we're in (concurrent
505
// mark or remark) and how many threads are currently active.
506
void set_concurrency_and_phase(uint active_tasks, bool concurrent);
507
508
// prints all gathered CM-related statistics
509
void print_stats();
510
511
bool cleanup_list_is_empty() {
512
return _cleanup_list.is_empty();
513
}
514
515
// accessor methods
516
uint parallel_marking_threads() const { return _parallel_marking_threads; }
517
uint max_parallel_marking_threads() const { return _max_parallel_marking_threads;}
518
double sleep_factor() { return _sleep_factor; }
519
double marking_task_overhead() { return _marking_task_overhead;}
520
double cleanup_sleep_factor() { return _cleanup_sleep_factor; }
521
double cleanup_task_overhead() { return _cleanup_task_overhead;}
522
523
bool use_parallel_marking_threads() const {
524
assert(parallel_marking_threads() <=
525
max_parallel_marking_threads(), "sanity");
526
assert((_parallel_workers == NULL && parallel_marking_threads() == 0) ||
527
parallel_marking_threads() > 0,
528
"parallel workers not set up correctly");
529
return _parallel_workers != NULL;
530
}
531
532
HeapWord* finger() { return _finger; }
533
bool concurrent() { return _concurrent; }
534
uint active_tasks() { return _active_tasks; }
535
ParallelTaskTerminator* terminator() { return &_terminator; }
536
537
// It claims the next available region to be scanned by a marking
538
// task/thread. It might return NULL if the next region is empty or
539
// we have run out of regions. In the latter case, out_of_regions()
540
// determines whether we've really run out of regions or the task
541
// should call claim_region() again. This might seem a bit
542
// awkward. Originally, the code was written so that claim_region()
543
// either successfully returned with a non-empty region or there
544
// were no more regions to be claimed. The problem with this was
545
// that, in certain circumstances, it iterated over large chunks of
546
// the heap finding only empty regions and, while it was working, it
547
// was preventing the calling task to call its regular clock
548
// method. So, this way, each task will spend very little time in
549
// claim_region() and is allowed to call the regular clock method
550
// frequently.
551
HeapRegion* claim_region(uint worker_id);
552
553
// It determines whether we've run out of regions to scan. Note that
554
// the finger can point past the heap end in case the heap was expanded
555
// to satisfy an allocation without doing a GC. This is fine, because all
556
// objects in those regions will be considered live anyway because of
557
// SATB guarantees (i.e. their TAMS will be equal to bottom).
558
bool out_of_regions() { return _finger >= _heap_end; }
559
560
// Returns the task with the given id
561
CMTask* task(int id) {
562
assert(0 <= id && id < (int) _active_tasks,
563
"task id not within active bounds");
564
return _tasks[id];
565
}
566
567
// Returns the task queue with the given id
568
CMTaskQueue* task_queue(int id) {
569
assert(0 <= id && id < (int) _active_tasks,
570
"task queue id not within active bounds");
571
return (CMTaskQueue*) _task_queues->queue(id);
572
}
573
574
// Returns the task queue set
575
CMTaskQueueSet* task_queues() { return _task_queues; }
576
577
// Access / manipulation of the overflow flag which is set to
578
// indicate that the global stack has overflown
579
bool has_overflown() { return _has_overflown; }
580
void set_has_overflown() { _has_overflown = true; }
581
void clear_has_overflown() { _has_overflown = false; }
582
bool restart_for_overflow() { return _restart_for_overflow; }
583
584
// Methods to enter the two overflow sync barriers
585
void enter_first_sync_barrier(uint worker_id);
586
void enter_second_sync_barrier(uint worker_id);
587
588
ForceOverflowSettings* force_overflow_conc() {
589
return &_force_overflow_conc;
590
}
591
592
ForceOverflowSettings* force_overflow_stw() {
593
return &_force_overflow_stw;
594
}
595
596
ForceOverflowSettings* force_overflow() {
597
if (concurrent()) {
598
return force_overflow_conc();
599
} else {
600
return force_overflow_stw();
601
}
602
}
603
604
// Live Data Counting data structures...
605
// These data structures are initialized at the start of
606
// marking. They are written to while marking is active.
607
// They are aggregated during remark; the aggregated values
608
// are then used to populate the _region_bm, _card_bm, and
609
// the total live bytes, which are then subsequently updated
610
// during cleanup.
611
612
// An array of bitmaps (one bit map per task). Each bitmap
613
// is used to record the cards spanned by the live objects
614
// marked by that task/worker.
615
BitMap* _count_card_bitmaps;
616
617
// Used to record the number of marked live bytes
618
// (for each region, by worker thread).
619
size_t** _count_marked_bytes;
620
621
// Card index of the bottom of the G1 heap. Used for biasing indices into
622
// the card bitmaps.
623
intptr_t _heap_bottom_card_num;
624
625
// Set to true when initialization is complete
626
bool _completed_initialization;
627
628
public:
629
// Manipulation of the global mark stack.
630
// Notice that the first mark_stack_push is CAS-based, whereas the
631
// two below are Mutex-based. This is OK since the first one is only
632
// called during evacuation pauses and doesn't compete with the
633
// other two (which are called by the marking tasks during
634
// concurrent marking or remark).
635
bool mark_stack_push(oop p) {
636
_markStack.par_push(p);
637
if (_markStack.overflow()) {
638
set_has_overflown();
639
return false;
640
}
641
return true;
642
}
643
bool mark_stack_push(oop* arr, int n) {
644
_markStack.par_push_arr(arr, n);
645
if (_markStack.overflow()) {
646
set_has_overflown();
647
return false;
648
}
649
return true;
650
}
651
void mark_stack_pop(oop* arr, int max, int* n) {
652
_markStack.par_pop_arr(arr, max, n);
653
}
654
size_t mark_stack_size() { return _markStack.size(); }
655
size_t partial_mark_stack_size_target() { return _markStack.maxElems()/3; }
656
bool mark_stack_overflow() { return _markStack.overflow(); }
657
bool mark_stack_empty() { return _markStack.isEmpty(); }
658
659
CMRootRegions* root_regions() { return &_root_regions; }
660
661
bool concurrent_marking_in_progress() {
662
return _concurrent_marking_in_progress;
663
}
664
void set_concurrent_marking_in_progress() {
665
_concurrent_marking_in_progress = true;
666
}
667
void clear_concurrent_marking_in_progress() {
668
_concurrent_marking_in_progress = false;
669
}
670
671
void update_accum_task_vtime(int i, double vtime) {
672
_accum_task_vtime[i] += vtime;
673
}
674
675
double all_task_accum_vtime() {
676
double ret = 0.0;
677
for (uint i = 0; i < _max_worker_id; ++i)
678
ret += _accum_task_vtime[i];
679
return ret;
680
}
681
682
// Attempts to steal an object from the task queues of other tasks
683
bool try_stealing(uint worker_id, int* hash_seed, oop& obj) {
684
return _task_queues->steal(worker_id, hash_seed, obj);
685
}
686
687
ConcurrentMark(G1CollectedHeap* g1h,
688
G1RegionToSpaceMapper* prev_bitmap_storage,
689
G1RegionToSpaceMapper* next_bitmap_storage);
690
~ConcurrentMark();
691
692
ConcurrentMarkThread* cmThread() { return _cmThread; }
693
694
CMBitMapRO* prevMarkBitMap() const { return _prevMarkBitMap; }
695
CMBitMap* nextMarkBitMap() const { return _nextMarkBitMap; }
696
697
// Returns the number of GC threads to be used in a concurrent
698
// phase based on the number of GC threads being used in a STW
699
// phase.
700
uint scale_parallel_threads(uint n_par_threads);
701
702
// Calculates the number of GC threads to be used in a concurrent phase.
703
uint calc_parallel_marking_threads();
704
705
// The following three are interaction between CM and
706
// G1CollectedHeap
707
708
// This notifies CM that a root during initial-mark needs to be
709
// grayed. It is MT-safe. word_size is the size of the object in
710
// words. It is passed explicitly as sometimes we cannot calculate
711
// it from the given object because it might be in an inconsistent
712
// state (e.g., in to-space and being copied). So the caller is
713
// responsible for dealing with this issue (e.g., get the size from
714
// the from-space image when the to-space image might be
715
// inconsistent) and always passing the size. hr is the region that
716
// contains the object and it's passed optionally from callers who
717
// might already have it (no point in recalculating it).
718
inline void grayRoot(oop obj,
719
size_t word_size,
720
uint worker_id,
721
HeapRegion* hr = NULL);
722
723
// It iterates over the heap and for each object it comes across it
724
// will dump the contents of its reference fields, as well as
725
// liveness information for the object and its referents. The dump
726
// will be written to a file with the following name:
727
// G1PrintReachableBaseFile + "." + str.
728
// vo decides whether the prev (vo == UsePrevMarking), the next
729
// (vo == UseNextMarking) marking information, or the mark word
730
// (vo == UseMarkWord) will be used to determine the liveness of
731
// each object / referent.
732
// If all is true, all objects in the heap will be dumped, otherwise
733
// only the live ones. In the dump the following symbols / breviations
734
// are used:
735
// M : an explicitly live object (its bitmap bit is set)
736
// > : an implicitly live object (over tams)
737
// O : an object outside the G1 heap (typically: in the perm gen)
738
// NOT : a reference field whose referent is not live
739
// AND MARKED : indicates that an object is both explicitly and
740
// implicitly live (it should be one or the other, not both)
741
void print_reachable(const char* str,
742
VerifyOption vo,
743
bool all) PRODUCT_RETURN;
744
745
// Clear the next marking bitmap (will be called concurrently).
746
void clearNextBitmap();
747
748
// Return whether the next mark bitmap has no marks set. To be used for assertions
749
// only. Will not yield to pause requests.
750
bool nextMarkBitmapIsClear();
751
752
// These two do the work that needs to be done before and after the
753
// initial root checkpoint. Since this checkpoint can be done at two
754
// different points (i.e. an explicit pause or piggy-backed on a
755
// young collection), then it's nice to be able to easily share the
756
// pre/post code. It might be the case that we can put everything in
757
// the post method. TP
758
void checkpointRootsInitialPre();
759
void checkpointRootsInitialPost();
760
761
// Scan all the root regions and mark everything reachable from
762
// them.
763
void scanRootRegions();
764
765
// Scan a single root region and mark everything reachable from it.
766
void scanRootRegion(HeapRegion* hr, uint worker_id);
767
768
// Do concurrent phase of marking, to a tentative transitive closure.
769
void markFromRoots();
770
771
void checkpointRootsFinal(bool clear_all_soft_refs);
772
void checkpointRootsFinalWork();
773
void cleanup();
774
void completeCleanup();
775
776
// Mark in the previous bitmap. NB: this is usually read-only, so use
777
// this carefully!
778
inline void markPrev(oop p);
779
780
// Clears marks for all objects in the given range, for the prev or
781
// next bitmaps. NB: the previous bitmap is usually
782
// read-only, so use this carefully!
783
void clearRangePrevBitmap(MemRegion mr);
784
void clearRangeNextBitmap(MemRegion mr);
785
786
// Notify data structures that a GC has started.
787
void note_start_of_gc() {
788
_markStack.note_start_of_gc();
789
}
790
791
// Notify data structures that a GC is finished.
792
void note_end_of_gc() {
793
_markStack.note_end_of_gc();
794
}
795
796
// Verify that there are no CSet oops on the stacks (taskqueues /
797
// global mark stack) and fingers (global / per-task).
798
// If marking is not in progress, it's a no-op.
799
void verify_no_cset_oops() PRODUCT_RETURN;
800
801
bool isPrevMarked(oop p) const {
802
assert(p != NULL && p->is_oop(), "expected an oop");
803
HeapWord* addr = (HeapWord*)p;
804
assert(addr >= _prevMarkBitMap->startWord() ||
805
addr < _prevMarkBitMap->endWord(), "in a region");
806
807
return _prevMarkBitMap->isMarked(addr);
808
}
809
810
inline bool do_yield_check(uint worker_i = 0);
811
812
// Called to abort the marking cycle after a Full GC takes palce.
813
void abort();
814
815
bool has_aborted() { return _has_aborted; }
816
817
const GCId& concurrent_gc_id();
818
819
// This prints the global/local fingers. It is used for debugging.
820
NOT_PRODUCT(void print_finger();)
821
822
void print_summary_info();
823
824
void print_worker_threads_on(outputStream* st) const;
825
826
void print_on_error(outputStream* st) const;
827
828
// The following indicate whether a given verbose level has been
829
// set. Notice that anything above stats is conditional to
830
// _MARKING_VERBOSE_ having been set to 1
831
bool verbose_stats() {
832
return _verbose_level >= stats_verbose;
833
}
834
bool verbose_low() {
835
return _MARKING_VERBOSE_ && _verbose_level >= low_verbose;
836
}
837
bool verbose_medium() {
838
return _MARKING_VERBOSE_ && _verbose_level >= medium_verbose;
839
}
840
bool verbose_high() {
841
return _MARKING_VERBOSE_ && _verbose_level >= high_verbose;
842
}
843
844
// Liveness counting
845
846
// Utility routine to set an exclusive range of cards on the given
847
// card liveness bitmap
848
inline void set_card_bitmap_range(BitMap* card_bm,
849
BitMap::idx_t start_idx,
850
BitMap::idx_t end_idx,
851
bool is_par);
852
853
// Returns the card number of the bottom of the G1 heap.
854
// Used in biasing indices into accounting card bitmaps.
855
intptr_t heap_bottom_card_num() const {
856
return _heap_bottom_card_num;
857
}
858
859
// Returns the card bitmap for a given task or worker id.
860
BitMap* count_card_bitmap_for(uint worker_id) {
861
assert(0 <= worker_id && worker_id < _max_worker_id, "oob");
862
assert(_count_card_bitmaps != NULL, "uninitialized");
863
BitMap* task_card_bm = &_count_card_bitmaps[worker_id];
864
assert(task_card_bm->size() == _card_bm.size(), "size mismatch");
865
return task_card_bm;
866
}
867
868
// Returns the array containing the marked bytes for each region,
869
// for the given worker or task id.
870
size_t* count_marked_bytes_array_for(uint worker_id) {
871
assert(0 <= worker_id && worker_id < _max_worker_id, "oob");
872
assert(_count_marked_bytes != NULL, "uninitialized");
873
size_t* marked_bytes_array = _count_marked_bytes[worker_id];
874
assert(marked_bytes_array != NULL, "uninitialized");
875
return marked_bytes_array;
876
}
877
878
// Returns the index in the liveness accounting card table bitmap
879
// for the given address
880
inline BitMap::idx_t card_bitmap_index_for(HeapWord* addr);
881
882
// Counts the size of the given memory region in the the given
883
// marked_bytes array slot for the given HeapRegion.
884
// Sets the bits in the given card bitmap that are associated with the
885
// cards that are spanned by the memory region.
886
inline void count_region(MemRegion mr,
887
HeapRegion* hr,
888
size_t* marked_bytes_array,
889
BitMap* task_card_bm);
890
891
// Counts the given memory region in the task/worker counting
892
// data structures for the given worker id.
893
inline void count_region(MemRegion mr, HeapRegion* hr, uint worker_id);
894
895
// Counts the given object in the given task/worker counting
896
// data structures.
897
inline void count_object(oop obj,
898
HeapRegion* hr,
899
size_t* marked_bytes_array,
900
BitMap* task_card_bm);
901
902
// Attempts to mark the given object and, if successful, counts
903
// the object in the given task/worker counting structures.
904
inline bool par_mark_and_count(oop obj,
905
HeapRegion* hr,
906
size_t* marked_bytes_array,
907
BitMap* task_card_bm);
908
909
// Attempts to mark the given object and, if successful, counts
910
// the object in the task/worker counting structures for the
911
// given worker id.
912
inline bool par_mark_and_count(oop obj,
913
size_t word_size,
914
HeapRegion* hr,
915
uint worker_id);
916
917
// Returns true if initialization was successfully completed.
918
bool completed_initialization() const {
919
return _completed_initialization;
920
}
921
922
protected:
923
// Clear all the per-task bitmaps and arrays used to store the
924
// counting data.
925
void clear_all_count_data();
926
927
// Aggregates the counting data for each worker/task
928
// that was constructed while marking. Also sets
929
// the amount of marked bytes for each region and
930
// the top at concurrent mark count.
931
void aggregate_count_data();
932
933
// Verification routine
934
void verify_count_data();
935
};
936
937
// A class representing a marking task.
938
class CMTask : public TerminatorTerminator {
939
private:
940
enum PrivateConstants {
941
// the regular clock call is called once the scanned words reaches
942
// this limit
943
words_scanned_period = 12*1024,
944
// the regular clock call is called once the number of visited
945
// references reaches this limit
946
refs_reached_period = 1024,
947
// initial value for the hash seed, used in the work stealing code
948
init_hash_seed = 17,
949
// how many entries will be transferred between global stack and
950
// local queues
951
global_stack_transfer_size = 16
952
};
953
954
G1CMObjArrayProcessor _objArray_processor;
955
956
uint _worker_id;
957
G1CollectedHeap* _g1h;
958
ConcurrentMark* _cm;
959
CMBitMap* _nextMarkBitMap;
960
// the task queue of this task
961
CMTaskQueue* _task_queue;
962
private:
963
// the task queue set---needed for stealing
964
CMTaskQueueSet* _task_queues;
965
// indicates whether the task has been claimed---this is only for
966
// debugging purposes
967
bool _claimed;
968
969
// number of calls to this task
970
int _calls;
971
972
// when the virtual timer reaches this time, the marking step should
973
// exit
974
double _time_target_ms;
975
// the start time of the current marking step
976
double _start_time_ms;
977
978
// the oop closure used for iterations over oops
979
G1CMOopClosure* _cm_oop_closure;
980
981
// the region this task is scanning, NULL if we're not scanning any
982
HeapRegion* _curr_region;
983
// the local finger of this task, NULL if we're not scanning a region
984
HeapWord* _finger;
985
// limit of the region this task is scanning, NULL if we're not scanning one
986
HeapWord* _region_limit;
987
988
// the number of words this task has scanned
989
size_t _words_scanned;
990
// When _words_scanned reaches this limit, the regular clock is
991
// called. Notice that this might be decreased under certain
992
// circumstances (i.e. when we believe that we did an expensive
993
// operation).
994
size_t _words_scanned_limit;
995
// the initial value of _words_scanned_limit (i.e. what it was
996
// before it was decreased).
997
size_t _real_words_scanned_limit;
998
999
// the number of references this task has visited
1000
size_t _refs_reached;
1001
// When _refs_reached reaches this limit, the regular clock is
1002
// called. Notice this this might be decreased under certain
1003
// circumstances (i.e. when we believe that we did an expensive
1004
// operation).
1005
size_t _refs_reached_limit;
1006
// the initial value of _refs_reached_limit (i.e. what it was before
1007
// it was decreased).
1008
size_t _real_refs_reached_limit;
1009
1010
// used by the work stealing stuff
1011
int _hash_seed;
1012
// if this is true, then the task has aborted for some reason
1013
bool _has_aborted;
1014
// set when the task aborts because it has met its time quota
1015
bool _has_timed_out;
1016
// true when we're draining SATB buffers; this avoids the task
1017
// aborting due to SATB buffers being available (as we're already
1018
// dealing with them)
1019
bool _draining_satb_buffers;
1020
1021
// number sequence of past step times
1022
NumberSeq _step_times_ms;
1023
// elapsed time of this task
1024
double _elapsed_time_ms;
1025
// termination time of this task
1026
double _termination_time_ms;
1027
// when this task got into the termination protocol
1028
double _termination_start_time_ms;
1029
1030
// true when the task is during a concurrent phase, false when it is
1031
// in the remark phase (so, in the latter case, we do not have to
1032
// check all the things that we have to check during the concurrent
1033
// phase, i.e. SATB buffer availability...)
1034
bool _concurrent;
1035
1036
TruncatedSeq _marking_step_diffs_ms;
1037
1038
// Counting data structures. Embedding the task's marked_bytes_array
1039
// and card bitmap into the actual task saves having to go through
1040
// the ConcurrentMark object.
1041
size_t* _marked_bytes_array;
1042
BitMap* _card_bm;
1043
1044
// LOTS of statistics related with this task
1045
#if _MARKING_STATS_
1046
NumberSeq _all_clock_intervals_ms;
1047
double _interval_start_time_ms;
1048
1049
int _aborted;
1050
int _aborted_overflow;
1051
int _aborted_cm_aborted;
1052
int _aborted_yield;
1053
int _aborted_timed_out;
1054
int _aborted_satb;
1055
int _aborted_termination;
1056
1057
int _steal_attempts;
1058
int _steals;
1059
1060
int _clock_due_to_marking;
1061
int _clock_due_to_scanning;
1062
1063
int _local_pushes;
1064
int _local_pops;
1065
int _local_max_size;
1066
int _objs_scanned;
1067
1068
int _global_pushes;
1069
int _global_pops;
1070
int _global_max_size;
1071
1072
int _global_transfers_to;
1073
int _global_transfers_from;
1074
1075
int _regions_claimed;
1076
int _objs_found_on_bitmap;
1077
1078
int _satb_buffers_processed;
1079
#endif // _MARKING_STATS_
1080
1081
// it updates the local fields after this task has claimed
1082
// a new region to scan
1083
void setup_for_region(HeapRegion* hr);
1084
// it brings up-to-date the limit of the region
1085
void update_region_limit();
1086
1087
// called when either the words scanned or the refs visited limit
1088
// has been reached
1089
void reached_limit();
1090
// recalculates the words scanned and refs visited limits
1091
void recalculate_limits();
1092
// decreases the words scanned and refs visited limits when we reach
1093
// an expensive operation
1094
void decrease_limits();
1095
// it checks whether the words scanned or refs visited reached their
1096
// respective limit and calls reached_limit() if they have
1097
void check_limits() {
1098
if (_words_scanned >= _words_scanned_limit ||
1099
_refs_reached >= _refs_reached_limit) {
1100
reached_limit();
1101
}
1102
}
1103
// this is supposed to be called regularly during a marking step as
1104
// it checks a bunch of conditions that might cause the marking step
1105
// to abort
1106
void regular_clock_call();
1107
bool concurrent() { return _concurrent; }
1108
1109
// Test whether obj might have already been passed over by the
1110
// mark bitmap scan, and so needs to be pushed onto the mark stack.
1111
bool is_below_finger(oop obj, HeapWord* global_finger) const;
1112
1113
template<bool scan> void process_grey_object(oop obj);
1114
1115
public:
1116
// Apply the closure on the given area of the objArray. Return the number of words
1117
// scanned.
1118
inline size_t scan_objArray(objArrayOop obj, MemRegion mr);
1119
// It resets the task; it should be called right at the beginning of
1120
// a marking phase.
1121
void reset(CMBitMap* _nextMarkBitMap);
1122
// it clears all the fields that correspond to a claimed region.
1123
void clear_region_fields();
1124
1125
void set_concurrent(bool concurrent) { _concurrent = concurrent; }
1126
1127
// The main method of this class which performs a marking step
1128
// trying not to exceed the given duration. However, it might exit
1129
// prematurely, according to some conditions (i.e. SATB buffers are
1130
// available for processing).
1131
void do_marking_step(double target_ms,
1132
bool do_termination,
1133
bool is_serial);
1134
1135
// These two calls start and stop the timer
1136
void record_start_time() {
1137
_elapsed_time_ms = os::elapsedTime() * 1000.0;
1138
}
1139
void record_end_time() {
1140
_elapsed_time_ms = os::elapsedTime() * 1000.0 - _elapsed_time_ms;
1141
}
1142
1143
// returns the worker ID associated with this task.
1144
uint worker_id() { return _worker_id; }
1145
1146
// From TerminatorTerminator. It determines whether this task should
1147
// exit the termination protocol after it's entered it.
1148
virtual bool should_exit_termination();
1149
1150
// Resets the local region fields after a task has finished scanning a
1151
// region; or when they have become stale as a result of the region
1152
// being evacuated.
1153
void giveup_current_region();
1154
1155
HeapWord* finger() { return _finger; }
1156
1157
bool has_aborted() { return _has_aborted; }
1158
void set_has_aborted() { _has_aborted = true; }
1159
void clear_has_aborted() { _has_aborted = false; }
1160
bool has_timed_out() { return _has_timed_out; }
1161
bool claimed() { return _claimed; }
1162
1163
void set_cm_oop_closure(G1CMOopClosure* cm_oop_closure);
1164
1165
// Increment the number of references this task has visited.
1166
void increment_refs_reached() { ++_refs_reached; }
1167
1168
// Grey the object by marking it. If not already marked, push it on
1169
// the local queue if below the finger.
1170
// Precondition: obj is in region.
1171
// Precondition: obj is below region's NTAMS.
1172
inline void make_reference_grey(oop obj, HeapRegion* region);
1173
1174
// Grey the object (by calling make_grey_reference) if required,
1175
// e.g. obj is below its containing region's NTAMS.
1176
// Precondition: obj is a valid heap object.
1177
inline void deal_with_reference(oop obj);
1178
1179
// It scans an object and visits its children.
1180
void scan_object(oop obj) { process_grey_object<true>(obj); }
1181
1182
// It pushes an object on the local queue.
1183
inline void push(oop obj);
1184
1185
// These two move entries to/from the global stack.
1186
void move_entries_to_global_stack();
1187
void get_entries_from_global_stack();
1188
1189
// It pops and scans objects from the local queue. If partially is
1190
// true, then it stops when the queue size is of a given limit. If
1191
// partially is false, then it stops when the queue is empty.
1192
void drain_local_queue(bool partially);
1193
// It moves entries from the global stack to the local queue and
1194
// drains the local queue. If partially is true, then it stops when
1195
// both the global stack and the local queue reach a given size. If
1196
// partially if false, it tries to empty them totally.
1197
void drain_global_stack(bool partially);
1198
// It keeps picking SATB buffers and processing them until no SATB
1199
// buffers are available.
1200
void drain_satb_buffers();
1201
1202
// moves the local finger to a new location
1203
inline void move_finger_to(HeapWord* new_finger) {
1204
assert(new_finger >= _finger && new_finger < _region_limit, "invariant");
1205
_finger = new_finger;
1206
}
1207
1208
CMTask(uint worker_id,
1209
ConcurrentMark *cm,
1210
size_t* marked_bytes,
1211
BitMap* card_bm,
1212
CMTaskQueue* task_queue,
1213
CMTaskQueueSet* task_queues);
1214
1215
// it prints statistics associated with this task
1216
void print_stats();
1217
1218
#if _MARKING_STATS_
1219
void increase_objs_found_on_bitmap() { ++_objs_found_on_bitmap; }
1220
#endif // _MARKING_STATS_
1221
};
1222
1223
// Class that's used to to print out per-region liveness
1224
// information. It's currently used at the end of marking and also
1225
// after we sort the old regions at the end of the cleanup operation.
1226
class G1PrintRegionLivenessInfoClosure: public HeapRegionClosure {
1227
private:
1228
outputStream* _out;
1229
1230
// Accumulators for these values.
1231
size_t _total_used_bytes;
1232
size_t _total_capacity_bytes;
1233
size_t _total_prev_live_bytes;
1234
size_t _total_next_live_bytes;
1235
1236
// These are set up when we come across a "stars humongous" region
1237
// (as this is where most of this information is stored, not in the
1238
// subsequent "continues humongous" regions). After that, for every
1239
// region in a given humongous region series we deduce the right
1240
// values for it by simply subtracting the appropriate amount from
1241
// these fields. All these values should reach 0 after we've visited
1242
// the last region in the series.
1243
size_t _hum_used_bytes;
1244
size_t _hum_capacity_bytes;
1245
size_t _hum_prev_live_bytes;
1246
size_t _hum_next_live_bytes;
1247
1248
// Accumulator for the remembered set size
1249
size_t _total_remset_bytes;
1250
1251
// Accumulator for strong code roots memory size
1252
size_t _total_strong_code_roots_bytes;
1253
1254
static double perc(size_t val, size_t total) {
1255
if (total == 0) {
1256
return 0.0;
1257
} else {
1258
return 100.0 * ((double) val / (double) total);
1259
}
1260
}
1261
1262
static double bytes_to_mb(size_t val) {
1263
return (double) val / (double) M;
1264
}
1265
1266
// See the .cpp file.
1267
size_t get_hum_bytes(size_t* hum_bytes);
1268
void get_hum_bytes(size_t* used_bytes, size_t* capacity_bytes,
1269
size_t* prev_live_bytes, size_t* next_live_bytes);
1270
1271
public:
1272
// The header and footer are printed in the constructor and
1273
// destructor respectively.
1274
G1PrintRegionLivenessInfoClosure(outputStream* out, const char* phase_name);
1275
virtual bool doHeapRegion(HeapRegion* r);
1276
~G1PrintRegionLivenessInfoClosure();
1277
};
1278
1279
#endif // SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTMARK_HPP
1280
1281