Mercurial > hg > truffle
annotate src/share/vm/gc_implementation/g1/g1RemSet.inline.hpp @ 6611:7383557659bd
7185699: G1: Prediction model discrepancies
Summary: Correct the result value of G1CollectedHeap::pending_card_num(). Change the code that calculates the GC efficiency of a non-young heap region to use historical data from mixed GCs and the actual number of live bytes when predicting how long it would take to collect the region. Changes were also reviewed by Thomas Schatzl.
Reviewed-by: azeemj, brutisso
author | johnc |
---|---|
date | Tue, 21 Aug 2012 14:10:39 -0700 |
parents | b4ebad3520bb |
children | b0c374311c4e |
rev | line source |
---|---|
342 | 1 /* |
4839 | 2 * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. |
342 | 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 * | |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
866
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
866
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
866
diff
changeset
|
21 * questions. |
342 | 22 * |
23 */ | |
24 | |
1972 | 25 #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1REMSET_INLINE_HPP |
26 #define SHARE_VM_GC_IMPLEMENTATION_G1_G1REMSET_INLINE_HPP | |
27 | |
28 #include "gc_implementation/g1/g1RemSet.hpp" | |
29 #include "gc_implementation/g1/heapRegionRemSet.hpp" | |
30 #include "oops/oop.inline.hpp" | |
31 | |
4728
441e946dc1af
7121618: Change type of number of GC workers to unsigned int.
jmasa
parents:
3777
diff
changeset
|
32 inline uint G1RemSet::n_workers() { |
342 | 33 if (_g1->workers() != NULL) { |
34 return _g1->workers()->total_workers(); | |
35 } else { | |
36 return 1; | |
37 } | |
38 } | |
39 | |
1861 | 40 template <class T> |
1960
878b57474103
6978187: G1: assert(ParallelGCThreads> 1 || n_yielded() == _hrrs->occupied()) strikes again
johnc
parents:
1861
diff
changeset
|
41 inline void G1RemSet::write_ref(HeapRegion* from, T* p) { |
878b57474103
6978187: G1: assert(ParallelGCThreads> 1 || n_yielded() == _hrrs->occupied()) strikes again
johnc
parents:
1861
diff
changeset
|
42 par_write_ref(from, p, 0); |
342 | 43 } |
44 | |
1861 | 45 template <class T> |
1960
878b57474103
6978187: G1: assert(ParallelGCThreads> 1 || n_yielded() == _hrrs->occupied()) strikes again
johnc
parents:
1861
diff
changeset
|
46 inline void G1RemSet::par_write_ref(HeapRegion* from, T* p, int tid) { |
845
df6caf649ff7
6700789: G1: Enable use of compressed oops with G1 heaps
ysr
parents:
677
diff
changeset
|
47 oop obj = oopDesc::load_decode_heap_oop(p); |
342 | 48 #ifdef ASSERT |
49 // can't do because of races | |
50 // assert(obj == NULL || obj->is_oop(), "expected an oop"); | |
51 | |
52 // Do the safe subset of is_oop | |
53 if (obj != NULL) { | |
54 #ifdef CHECK_UNHANDLED_OOPS | |
55 oopDesc* o = obj.obj(); | |
56 #else | |
57 oopDesc* o = obj; | |
58 #endif // CHECK_UNHANDLED_OOPS | |
59 assert((intptr_t)o % MinObjAlignmentInBytes == 0, "not oop aligned"); | |
60 assert(Universe::heap()->is_in_reserved(obj), "must be in heap"); | |
61 } | |
62 #endif // ASSERT | |
1705 | 63 |
64 assert(from == NULL || from->is_in_reserved(p), "p is not in from"); | |
65 | |
342 | 66 HeapRegion* to = _g1->heap_region_containing(obj); |
1960
878b57474103
6978187: G1: assert(ParallelGCThreads> 1 || n_yielded() == _hrrs->occupied()) strikes again
johnc
parents:
1861
diff
changeset
|
67 if (to != NULL && from != to) { |
878b57474103
6978187: G1: assert(ParallelGCThreads> 1 || n_yielded() == _hrrs->occupied()) strikes again
johnc
parents:
1861
diff
changeset
|
68 assert(to->rem_set() != NULL, "Need per-region 'into' remsets."); |
878b57474103
6978187: G1: assert(ParallelGCThreads> 1 || n_yielded() == _hrrs->occupied()) strikes again
johnc
parents:
1861
diff
changeset
|
69 to->rem_set()->add_reference(p, tid); |
342 | 70 } |
71 } | |
626
87fa6e083d82
6760309: G1: update remembered sets during Full GCs
apetrusenko
parents:
616
diff
changeset
|
72 |
1861 | 73 template <class T> |
74 inline void UpdateRSOopClosure::do_oop_work(T* p) { | |
626
87fa6e083d82
6760309: G1: update remembered sets during Full GCs
apetrusenko
parents:
616
diff
changeset
|
75 assert(_from != NULL, "from region must be non-NULL"); |
87fa6e083d82
6760309: G1: update remembered sets during Full GCs
apetrusenko
parents:
616
diff
changeset
|
76 _rs->par_write_ref(_from, p, _worker_i); |
87fa6e083d82
6760309: G1: update remembered sets during Full GCs
apetrusenko
parents:
616
diff
changeset
|
77 } |
1705 | 78 |
1861 | 79 template <class T> |
80 inline void UpdateRSetImmediate::do_oop_work(T* p) { | |
1705 | 81 assert(_from->is_in_reserved(p), "paranoia"); |
82 T heap_oop = oopDesc::load_heap_oop(p); | |
83 if (!oopDesc::is_null(heap_oop) && !_from->is_survivor()) { | |
84 _g1_rem_set->par_write_ref(_from, p, 0); | |
85 } | |
86 } | |
87 | |
1972 | 88 #endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1REMSET_INLINE_HPP |