annotate src/share/vm/memory/sharedHeap.cpp @ 24234:ea6f94ab283b default tip

Added tag jvmci-0.36 for changeset 8128b98d4736
author Gilles Duboscq <gilles.m.duboscq@oracle.com>
date Mon, 18 Sep 2017 18:49:45 +0200
parents dd9cc155639c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
17937
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13060
diff changeset
2 * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 989
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 989
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: 989
diff changeset
21 * questions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1833
diff changeset
25 #include "precompiled.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1833
diff changeset
26 #include "classfile/symbolTable.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1833
diff changeset
27 #include "classfile/systemDictionary.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1833
diff changeset
28 #include "code/codeCache.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1833
diff changeset
29 #include "gc_interface/collectedHeap.inline.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1833
diff changeset
30 #include "memory/sharedHeap.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1833
diff changeset
31 #include "oops/oop.inline.hpp"
20278
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20258
diff changeset
32 #include "runtime/atomic.inline.hpp"
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1833
diff changeset
33 #include "runtime/fprofiler.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1833
diff changeset
34 #include "runtime/java.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1833
diff changeset
35 #include "utilities/copy.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1833
diff changeset
36 #include "utilities/workgroup.hpp"
0
a61af66fc99e Initial load
duke
parents:
diff changeset
37
17937
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13060
diff changeset
38 PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13060
diff changeset
39
0
a61af66fc99e Initial load
duke
parents:
diff changeset
40 SharedHeap* SharedHeap::_sh;
a61af66fc99e Initial load
duke
parents:
diff changeset
41
a61af66fc99e Initial load
duke
parents:
diff changeset
42 SharedHeap::SharedHeap(CollectorPolicy* policy_) :
a61af66fc99e Initial load
duke
parents:
diff changeset
43 CollectedHeap(),
a61af66fc99e Initial load
duke
parents:
diff changeset
44 _collector_policy(policy_),
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 4728
diff changeset
45 _rem_set(NULL),
0
a61af66fc99e Initial load
duke
parents:
diff changeset
46 _strong_roots_parity(0),
1833
8b10f48633dc 6984287: Regularize how GC parallel workers are specified.
jmasa
parents: 1552
diff changeset
47 _workers(NULL)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
48 {
a61af66fc99e Initial load
duke
parents:
diff changeset
49 _sh = this; // ch is static, should be set only once.
a61af66fc99e Initial load
duke
parents:
diff changeset
50 if ((UseParNewGC ||
11975
ca9dedeebdec 6412968: CMS Long initial mark pauses
jmasa
parents: 10991
diff changeset
51 (UseConcMarkSweepGC && (CMSParallelInitialMarkEnabled ||
ca9dedeebdec 6412968: CMS Long initial mark pauses
jmasa
parents: 10991
diff changeset
52 CMSParallelRemarkEnabled)) ||
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents: 113
diff changeset
53 UseG1GC) &&
0
a61af66fc99e Initial load
duke
parents:
diff changeset
54 ParallelGCThreads > 0) {
1833
8b10f48633dc 6984287: Regularize how GC parallel workers are specified.
jmasa
parents: 1552
diff changeset
55 _workers = new FlexibleWorkGang("Parallel GC Threads", ParallelGCThreads,
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents: 113
diff changeset
56 /* are_GC_task_threads */true,
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents: 113
diff changeset
57 /* are_ConcurrentGC_threads */false);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
58 if (_workers == NULL) {
a61af66fc99e Initial load
duke
parents:
diff changeset
59 vm_exit_during_initialization("Failed necessary allocation.");
1833
8b10f48633dc 6984287: Regularize how GC parallel workers are specified.
jmasa
parents: 1552
diff changeset
60 } else {
8b10f48633dc 6984287: Regularize how GC parallel workers are specified.
jmasa
parents: 1552
diff changeset
61 _workers->initialize_workers();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
62 }
a61af66fc99e Initial load
duke
parents:
diff changeset
63 }
a61af66fc99e Initial load
duke
parents:
diff changeset
64 }
a61af66fc99e Initial load
duke
parents:
diff changeset
65
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents: 113
diff changeset
66 bool SharedHeap::heap_lock_held_for_gc() {
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents: 113
diff changeset
67 Thread* t = Thread::current();
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents: 113
diff changeset
68 return Heap_lock->owned_by_self()
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents: 113
diff changeset
69 || ( (t->is_GC_task_thread() || t->is_VM_thread())
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents: 113
diff changeset
70 && _thread_holds_heap_lock_for_gc);
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents: 113
diff changeset
71 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
72
4728
441e946dc1af 7121618: Change type of number of GC workers to unsigned int.
jmasa
parents: 4095
diff changeset
73 void SharedHeap::set_par_threads(uint t) {
1833
8b10f48633dc 6984287: Regularize how GC parallel workers are specified.
jmasa
parents: 1552
diff changeset
74 assert(t == 0 || !UseSerialGC, "Cannot have parallel threads");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
75 _n_par_threads = t;
20278
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20258
diff changeset
76 }
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20258
diff changeset
77
0
a61af66fc99e Initial load
duke
parents:
diff changeset
78 void SharedHeap::change_strong_roots_parity() {
a61af66fc99e Initial load
duke
parents:
diff changeset
79 // Also set the new collection parity.
a61af66fc99e Initial load
duke
parents:
diff changeset
80 assert(_strong_roots_parity >= 0 && _strong_roots_parity <= 2,
a61af66fc99e Initial load
duke
parents:
diff changeset
81 "Not in range.");
a61af66fc99e Initial load
duke
parents:
diff changeset
82 _strong_roots_parity++;
a61af66fc99e Initial load
duke
parents:
diff changeset
83 if (_strong_roots_parity == 3) _strong_roots_parity = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
84 assert(_strong_roots_parity >= 1 && _strong_roots_parity <= 2,
a61af66fc99e Initial load
duke
parents:
diff changeset
85 "Not in range.");
a61af66fc99e Initial load
duke
parents:
diff changeset
86 }
a61af66fc99e Initial load
duke
parents:
diff changeset
87
20278
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20258
diff changeset
88 SharedHeap::StrongRootsScope::StrongRootsScope(SharedHeap* heap, bool activate)
22909
38d6febe66af 8075210: Refactor strong root processing in order to allow G1 to evolve separately from GenCollectedHeap
mgerdin
parents: 20282
diff changeset
89 : MarkScope(activate), _sh(heap)
989
148e5441d916 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 579
diff changeset
90 {
148e5441d916 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 579
diff changeset
91 if (_active) {
20278
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20258
diff changeset
92 _sh->change_strong_roots_parity();
10991
01522ca68fc7 8015237: Parallelize string table scanning during strong root processing
johnc
parents: 10361
diff changeset
93 // Zero the claimed high water mark in the StringTable
01522ca68fc7 8015237: Parallelize string table scanning during strong root processing
johnc
parents: 10361
diff changeset
94 StringTable::clear_parallel_claimed_index();
989
148e5441d916 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 579
diff changeset
95 }
148e5441d916 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 579
diff changeset
96 }
148e5441d916 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 579
diff changeset
97
0
a61af66fc99e Initial load
duke
parents:
diff changeset
98 void SharedHeap::set_barrier_set(BarrierSet* bs) {
a61af66fc99e Initial load
duke
parents:
diff changeset
99 _barrier_set = bs;
a61af66fc99e Initial load
duke
parents:
diff changeset
100 // Cached barrier set for fast access in oops
a61af66fc99e Initial load
duke
parents:
diff changeset
101 oopDesc::set_bs(bs);
a61af66fc99e Initial load
duke
parents:
diff changeset
102 }
a61af66fc99e Initial load
duke
parents:
diff changeset
103
a61af66fc99e Initial load
duke
parents:
diff changeset
104 void SharedHeap::post_initialize() {
13060
8f07aa079343 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents: 11975
diff changeset
105 CollectedHeap::post_initialize();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
106 ref_processing_init();
a61af66fc99e Initial load
duke
parents:
diff changeset
107 }
a61af66fc99e Initial load
duke
parents:
diff changeset
108
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 4728
diff changeset
109 void SharedHeap::ref_processing_init() {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
110
a61af66fc99e Initial load
duke
parents:
diff changeset
111 // Some utilities.
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents: 113
diff changeset
112 void SharedHeap::print_size_transition(outputStream* out,
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents: 113
diff changeset
113 size_t bytes_before,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
114 size_t bytes_after,
a61af66fc99e Initial load
duke
parents:
diff changeset
115 size_t capacity) {
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents: 113
diff changeset
116 out->print(" %d%s->%d%s(%d%s)",
0
a61af66fc99e Initial load
duke
parents:
diff changeset
117 byte_size_in_proper_unit(bytes_before),
a61af66fc99e Initial load
duke
parents:
diff changeset
118 proper_unit_for_byte_size(bytes_before),
a61af66fc99e Initial load
duke
parents:
diff changeset
119 byte_size_in_proper_unit(bytes_after),
a61af66fc99e Initial load
duke
parents:
diff changeset
120 proper_unit_for_byte_size(bytes_after),
a61af66fc99e Initial load
duke
parents:
diff changeset
121 byte_size_in_proper_unit(capacity),
a61af66fc99e Initial load
duke
parents:
diff changeset
122 proper_unit_for_byte_size(capacity));
a61af66fc99e Initial load
duke
parents:
diff changeset
123 }