annotate src/share/vm/gc_implementation/shared/vmGCOperations.hpp @ 10374:87c64c0438fb

6976350: G1: deal with fragmentation while copying objects during GC Summary: Create G1ParGCAllocBufferContainer to contain two buffers instead of previously using one buffer, in order to hold the first priority buffer longer. Thus, when some large objects hits the value of free space left in the first priority buffer it has an alternative to fit in the second priority buffer while the first priority buffer is given more chances to try allocating smaller objects. Overall, it will improve heap space efficiency. Reviewed-by: johnc, jmasa, brutisso Contributed-by: tamao <tao.mao@oracle.com>
author tamao
date Mon, 03 Jun 2013 14:37:13 -0700
parents 16fb9f942703
children f2110083203d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6885
diff changeset
2 * Copyright (c) 2005, 2013, 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: 1387
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1387
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: 1387
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: 1656
diff changeset
25 #ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_VMGCOPERATIONS_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1656
diff changeset
26 #define SHARE_VM_GC_IMPLEMENTATION_SHARED_VMGCOPERATIONS_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1656
diff changeset
27
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1656
diff changeset
28 #include "memory/heapInspection.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1656
diff changeset
29 #include "runtime/handles.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1656
diff changeset
30 #include "runtime/jniHandles.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1656
diff changeset
31 #include "runtime/synchronizer.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1656
diff changeset
32 #include "runtime/vm_operations.hpp"
2125
7246a374a9f2 6458402: 3 jvmti tests fail with CMS and +ExplicitGCInvokesConcurrent
kamg
parents: 2039
diff changeset
33 #include "prims/jvmtiExport.hpp"
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1656
diff changeset
34
0
a61af66fc99e Initial load
duke
parents:
diff changeset
35 // The following class hierarchy represents
a61af66fc99e Initial load
duke
parents:
diff changeset
36 // a set of operations (VM_Operation) related to GC.
a61af66fc99e Initial load
duke
parents:
diff changeset
37 //
a61af66fc99e Initial load
duke
parents:
diff changeset
38 // VM_Operation
a61af66fc99e Initial load
duke
parents:
diff changeset
39 // VM_GC_Operation
a61af66fc99e Initial load
duke
parents:
diff changeset
40 // VM_GC_HeapInspection
a61af66fc99e Initial load
duke
parents:
diff changeset
41 // VM_GenCollectForAllocation
a61af66fc99e Initial load
duke
parents:
diff changeset
42 // VM_GenCollectFull
a61af66fc99e Initial load
duke
parents:
diff changeset
43 // VM_GenCollectFullConcurrent
a61af66fc99e Initial load
duke
parents:
diff changeset
44 // VM_ParallelGCFailedAllocation
a61af66fc99e Initial load
duke
parents:
diff changeset
45 // VM_ParallelGCSystemGC
a61af66fc99e Initial load
duke
parents:
diff changeset
46 // VM_GC_Operation
a61af66fc99e Initial load
duke
parents:
diff changeset
47 // - implements methods common to all classes in the hierarchy:
a61af66fc99e Initial load
duke
parents:
diff changeset
48 // prevents multiple gc requests and manages lock on heap;
a61af66fc99e Initial load
duke
parents:
diff changeset
49 //
a61af66fc99e Initial load
duke
parents:
diff changeset
50 // VM_GC_HeapInspection
a61af66fc99e Initial load
duke
parents:
diff changeset
51 // - prints class histogram on SIGBREAK if PrintClassHistogram
a61af66fc99e Initial load
duke
parents:
diff changeset
52 // is specified; and also the attach "inspectheap" operation
a61af66fc99e Initial load
duke
parents:
diff changeset
53 //
a61af66fc99e Initial load
duke
parents:
diff changeset
54 // VM_GenCollectForAllocation
a61af66fc99e Initial load
duke
parents:
diff changeset
55 // VM_ParallelGCFailedAllocation
a61af66fc99e Initial load
duke
parents:
diff changeset
56 // - this operation is invoked when allocation is failed;
a61af66fc99e Initial load
duke
parents:
diff changeset
57 // operation performs garbage collection and tries to
a61af66fc99e Initial load
duke
parents:
diff changeset
58 // allocate afterwards;
a61af66fc99e Initial load
duke
parents:
diff changeset
59 //
a61af66fc99e Initial load
duke
parents:
diff changeset
60 // VM_GenCollectFull
a61af66fc99e Initial load
duke
parents:
diff changeset
61 // VM_GenCollectFullConcurrent
a61af66fc99e Initial load
duke
parents:
diff changeset
62 // VM_ParallelGCSystemGC
a61af66fc99e Initial load
duke
parents:
diff changeset
63 // - these operations preform full collection of heaps of
a61af66fc99e Initial load
duke
parents:
diff changeset
64 // different kind
a61af66fc99e Initial load
duke
parents:
diff changeset
65 //
a61af66fc99e Initial load
duke
parents:
diff changeset
66
a61af66fc99e Initial load
duke
parents:
diff changeset
67 class VM_GC_Operation: public VM_Operation {
a61af66fc99e Initial load
duke
parents:
diff changeset
68 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
69 BasicLock _pending_list_basic_lock; // for refs pending list notification (PLL)
a61af66fc99e Initial load
duke
parents:
diff changeset
70 unsigned int _gc_count_before; // gc count before acquiring PLL
a61af66fc99e Initial load
duke
parents:
diff changeset
71 unsigned int _full_gc_count_before; // full gc count before acquiring PLL
a61af66fc99e Initial load
duke
parents:
diff changeset
72 bool _full; // whether a "full" collection
a61af66fc99e Initial load
duke
parents:
diff changeset
73 bool _prologue_succeeded; // whether doit_prologue succeeded
a61af66fc99e Initial load
duke
parents:
diff changeset
74 GCCause::Cause _gc_cause; // the putative cause for this gc op
a61af66fc99e Initial load
duke
parents:
diff changeset
75 bool _gc_locked; // will be set if gc was locked
a61af66fc99e Initial load
duke
parents:
diff changeset
76
a61af66fc99e Initial load
duke
parents:
diff changeset
77 virtual bool skip_operation() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
78
a61af66fc99e Initial load
duke
parents:
diff changeset
79 // java.lang.ref.Reference support
a61af66fc99e Initial load
duke
parents:
diff changeset
80 void acquire_pending_list_lock();
a61af66fc99e Initial load
duke
parents:
diff changeset
81 void release_and_notify_pending_list_lock();
a61af66fc99e Initial load
duke
parents:
diff changeset
82
a61af66fc99e Initial load
duke
parents:
diff changeset
83 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
84 VM_GC_Operation(unsigned int gc_count_before,
2225
c798c277ddd1 7015169: GC Cause not always set
brutisso
parents: 2125
diff changeset
85 GCCause::Cause _cause,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
86 unsigned int full_gc_count_before = 0,
a61af66fc99e Initial load
duke
parents:
diff changeset
87 bool full = false) {
a61af66fc99e Initial load
duke
parents:
diff changeset
88 _full = full;
a61af66fc99e Initial load
duke
parents:
diff changeset
89 _prologue_succeeded = false;
a61af66fc99e Initial load
duke
parents:
diff changeset
90 _gc_count_before = gc_count_before;
a61af66fc99e Initial load
duke
parents:
diff changeset
91
a61af66fc99e Initial load
duke
parents:
diff changeset
92 // A subclass constructor will likely overwrite the following
2225
c798c277ddd1 7015169: GC Cause not always set
brutisso
parents: 2125
diff changeset
93 _gc_cause = _cause;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
94
a61af66fc99e Initial load
duke
parents:
diff changeset
95 _gc_locked = false;
a61af66fc99e Initial load
duke
parents:
diff changeset
96
1656
4e5661ba9d98 6944166: G1: explicit GCs are not always handled correctly
tonyp
parents: 1552
diff changeset
97 _full_gc_count_before = full_gc_count_before;
1387
0bfd3fb24150 6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents: 615
diff changeset
98 // In ParallelScavengeHeap::mem_allocate() collections can be
0bfd3fb24150 6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents: 615
diff changeset
99 // executed within a loop and _all_soft_refs_clear can be set
0bfd3fb24150 6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents: 615
diff changeset
100 // true after they have been cleared by a collection and another
0bfd3fb24150 6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents: 615
diff changeset
101 // collection started so that _all_soft_refs_clear can be true
0bfd3fb24150 6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents: 615
diff changeset
102 // when this collection is started. Don't assert that
0bfd3fb24150 6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents: 615
diff changeset
103 // _all_soft_refs_clear have to be false here even though
0bfd3fb24150 6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents: 615
diff changeset
104 // mutators have run. Soft refs will be cleared again in this
0bfd3fb24150 6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents: 615
diff changeset
105 // collection.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
106 }
1387
0bfd3fb24150 6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents: 615
diff changeset
107 ~VM_GC_Operation() {
0bfd3fb24150 6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents: 615
diff changeset
108 CollectedHeap* ch = Universe::heap();
0bfd3fb24150 6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents: 615
diff changeset
109 ch->collector_policy()->set_all_soft_refs_clear(false);
0bfd3fb24150 6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents: 615
diff changeset
110 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
111
a61af66fc99e Initial load
duke
parents:
diff changeset
112 // Acquire the reference synchronization lock
a61af66fc99e Initial load
duke
parents:
diff changeset
113 virtual bool doit_prologue();
a61af66fc99e Initial load
duke
parents:
diff changeset
114 // Do notifyAll (if needed) and release held lock
a61af66fc99e Initial load
duke
parents:
diff changeset
115 virtual void doit_epilogue();
a61af66fc99e Initial load
duke
parents:
diff changeset
116
a61af66fc99e Initial load
duke
parents:
diff changeset
117 virtual bool allow_nested_vm_operations() const { return true; }
a61af66fc99e Initial load
duke
parents:
diff changeset
118 bool prologue_succeeded() const { return _prologue_succeeded; }
a61af66fc99e Initial load
duke
parents:
diff changeset
119
a61af66fc99e Initial load
duke
parents:
diff changeset
120 void set_gc_locked() { _gc_locked = true; }
a61af66fc99e Initial load
duke
parents:
diff changeset
121 bool gc_locked() const { return _gc_locked; }
a61af66fc99e Initial load
duke
parents:
diff changeset
122
a61af66fc99e Initial load
duke
parents:
diff changeset
123 static void notify_gc_begin(bool full = false);
a61af66fc99e Initial load
duke
parents:
diff changeset
124 static void notify_gc_end();
a61af66fc99e Initial load
duke
parents:
diff changeset
125 };
a61af66fc99e Initial load
duke
parents:
diff changeset
126
a61af66fc99e Initial load
duke
parents:
diff changeset
127
a61af66fc99e Initial load
duke
parents:
diff changeset
128 class VM_GC_HeapInspection: public VM_GC_Operation {
a61af66fc99e Initial load
duke
parents:
diff changeset
129 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
130 outputStream* _out;
a61af66fc99e Initial load
duke
parents:
diff changeset
131 bool _full_gc;
615
c6c601a0f2d6 6797870: Add -XX:+{HeapDump,PrintClassHistogram}{Before,After}FullGC
ysr
parents: 196
diff changeset
132 bool _need_prologue;
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6885
diff changeset
133 bool _csv_format; // "comma separated values" format for spreadsheet.
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6885
diff changeset
134 bool _print_help;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6885
diff changeset
135 bool _print_class_stats;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6885
diff changeset
136 const char* _columns;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
137 public:
615
c6c601a0f2d6 6797870: Add -XX:+{HeapDump,PrintClassHistogram}{Before,After}FullGC
ysr
parents: 196
diff changeset
138 VM_GC_HeapInspection(outputStream* out, bool request_full_gc,
c6c601a0f2d6 6797870: Add -XX:+{HeapDump,PrintClassHistogram}{Before,After}FullGC
ysr
parents: 196
diff changeset
139 bool need_prologue) :
0
a61af66fc99e Initial load
duke
parents:
diff changeset
140 VM_GC_Operation(0 /* total collections, dummy, ignored */,
2225
c798c277ddd1 7015169: GC Cause not always set
brutisso
parents: 2125
diff changeset
141 GCCause::_heap_inspection /* GC Cause */,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
142 0 /* total full collections, dummy, ignored */,
a61af66fc99e Initial load
duke
parents:
diff changeset
143 request_full_gc) {
a61af66fc99e Initial load
duke
parents:
diff changeset
144 _out = out;
a61af66fc99e Initial load
duke
parents:
diff changeset
145 _full_gc = request_full_gc;
615
c6c601a0f2d6 6797870: Add -XX:+{HeapDump,PrintClassHistogram}{Before,After}FullGC
ysr
parents: 196
diff changeset
146 _need_prologue = need_prologue;
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6885
diff changeset
147 _csv_format = false;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6885
diff changeset
148 _print_help = false;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6885
diff changeset
149 _print_class_stats = false;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6885
diff changeset
150 _columns = NULL;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
151 }
a61af66fc99e Initial load
duke
parents:
diff changeset
152
a61af66fc99e Initial load
duke
parents:
diff changeset
153 ~VM_GC_HeapInspection() {}
a61af66fc99e Initial load
duke
parents:
diff changeset
154 virtual VMOp_Type type() const { return VMOp_GC_HeapInspection; }
a61af66fc99e Initial load
duke
parents:
diff changeset
155 virtual bool skip_operation() const;
a61af66fc99e Initial load
duke
parents:
diff changeset
156 virtual bool doit_prologue();
a61af66fc99e Initial load
duke
parents:
diff changeset
157 virtual void doit();
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6885
diff changeset
158 void set_csv_format(bool value) {_csv_format = value;}
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6885
diff changeset
159 void set_print_help(bool value) {_print_help = value;}
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6885
diff changeset
160 void set_print_class_stats(bool value) {_print_class_stats = value;}
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6885
diff changeset
161 void set_columns(const char* value) {_columns = value;}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
162 };
a61af66fc99e Initial load
duke
parents:
diff changeset
163
a61af66fc99e Initial load
duke
parents:
diff changeset
164
a61af66fc99e Initial load
duke
parents:
diff changeset
165 class VM_GenCollectForAllocation: public VM_GC_Operation {
a61af66fc99e Initial load
duke
parents:
diff changeset
166 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
167 HeapWord* _res;
a61af66fc99e Initial load
duke
parents:
diff changeset
168 size_t _size; // size of object to be allocated.
a61af66fc99e Initial load
duke
parents:
diff changeset
169 bool _tlab; // alloc is of a tlab.
a61af66fc99e Initial load
duke
parents:
diff changeset
170 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
171 VM_GenCollectForAllocation(size_t size,
a61af66fc99e Initial load
duke
parents:
diff changeset
172 bool tlab,
a61af66fc99e Initial load
duke
parents:
diff changeset
173 unsigned int gc_count_before)
2225
c798c277ddd1 7015169: GC Cause not always set
brutisso
parents: 2125
diff changeset
174 : VM_GC_Operation(gc_count_before, GCCause::_allocation_failure),
0
a61af66fc99e Initial load
duke
parents:
diff changeset
175 _size(size),
a61af66fc99e Initial load
duke
parents:
diff changeset
176 _tlab(tlab) {
a61af66fc99e Initial load
duke
parents:
diff changeset
177 _res = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
178 }
a61af66fc99e Initial load
duke
parents:
diff changeset
179 ~VM_GenCollectForAllocation() {}
a61af66fc99e Initial load
duke
parents:
diff changeset
180 virtual VMOp_Type type() const { return VMOp_GenCollectForAllocation; }
a61af66fc99e Initial load
duke
parents:
diff changeset
181 virtual void doit();
a61af66fc99e Initial load
duke
parents:
diff changeset
182 HeapWord* result() const { return _res; }
a61af66fc99e Initial load
duke
parents:
diff changeset
183 };
a61af66fc99e Initial load
duke
parents:
diff changeset
184
a61af66fc99e Initial load
duke
parents:
diff changeset
185
a61af66fc99e Initial load
duke
parents:
diff changeset
186 // VM operation to invoke a collection of the heap as a
a61af66fc99e Initial load
duke
parents:
diff changeset
187 // GenCollectedHeap heap.
a61af66fc99e Initial load
duke
parents:
diff changeset
188 class VM_GenCollectFull: public VM_GC_Operation {
a61af66fc99e Initial load
duke
parents:
diff changeset
189 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
190 int _max_level;
a61af66fc99e Initial load
duke
parents:
diff changeset
191 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
192 VM_GenCollectFull(unsigned int gc_count_before,
a61af66fc99e Initial load
duke
parents:
diff changeset
193 unsigned int full_gc_count_before,
a61af66fc99e Initial load
duke
parents:
diff changeset
194 GCCause::Cause gc_cause,
a61af66fc99e Initial load
duke
parents:
diff changeset
195 int max_level)
2225
c798c277ddd1 7015169: GC Cause not always set
brutisso
parents: 2125
diff changeset
196 : VM_GC_Operation(gc_count_before, gc_cause, full_gc_count_before, true /* full */),
c798c277ddd1 7015169: GC Cause not always set
brutisso
parents: 2125
diff changeset
197 _max_level(max_level) { }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
198 ~VM_GenCollectFull() {}
a61af66fc99e Initial load
duke
parents:
diff changeset
199 virtual VMOp_Type type() const { return VMOp_GenCollectFull; }
a61af66fc99e Initial load
duke
parents:
diff changeset
200 virtual void doit();
a61af66fc99e Initial load
duke
parents:
diff changeset
201 };
139
c0492d52d55b 6539517: CR 6186200 should be extended to perm gen allocation to prevent spurious OOM's from perm gen
apetrusenko
parents: 0
diff changeset
202
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 2225
diff changeset
203 class VM_CollectForMetadataAllocation: public VM_GC_Operation {
139
c0492d52d55b 6539517: CR 6186200 should be extended to perm gen allocation to prevent spurious OOM's from perm gen
apetrusenko
parents: 0
diff changeset
204 private:
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 2225
diff changeset
205 MetaWord* _result;
6885
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents: 6725
diff changeset
206 size_t _size; // size of object to be allocated
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 2225
diff changeset
207 Metaspace::MetadataType _mdtype;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 2225
diff changeset
208 ClassLoaderData* _loader_data;
139
c0492d52d55b 6539517: CR 6186200 should be extended to perm gen allocation to prevent spurious OOM's from perm gen
apetrusenko
parents: 0
diff changeset
209 public:
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 2225
diff changeset
210 VM_CollectForMetadataAllocation(ClassLoaderData* loader_data,
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 2225
diff changeset
211 size_t size, Metaspace::MetadataType mdtype,
139
c0492d52d55b 6539517: CR 6186200 should be extended to perm gen allocation to prevent spurious OOM's from perm gen
apetrusenko
parents: 0
diff changeset
212 unsigned int gc_count_before,
c0492d52d55b 6539517: CR 6186200 should be extended to perm gen allocation to prevent spurious OOM's from perm gen
apetrusenko
parents: 0
diff changeset
213 unsigned int full_gc_count_before,
c0492d52d55b 6539517: CR 6186200 should be extended to perm gen allocation to prevent spurious OOM's from perm gen
apetrusenko
parents: 0
diff changeset
214 GCCause::Cause gc_cause)
2225
c798c277ddd1 7015169: GC Cause not always set
brutisso
parents: 2125
diff changeset
215 : VM_GC_Operation(gc_count_before, gc_cause, full_gc_count_before, true),
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 2225
diff changeset
216 _loader_data(loader_data), _size(size), _mdtype(mdtype), _result(NULL) {
139
c0492d52d55b 6539517: CR 6186200 should be extended to perm gen allocation to prevent spurious OOM's from perm gen
apetrusenko
parents: 0
diff changeset
217 }
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 2225
diff changeset
218 ~VM_CollectForMetadataAllocation() {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 2225
diff changeset
219 MetaspaceGC::set_expand_after_GC(false);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 2225
diff changeset
220 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 2225
diff changeset
221 virtual VMOp_Type type() const { return VMOp_CollectForMetadataAllocation; }
139
c0492d52d55b 6539517: CR 6186200 should be extended to perm gen allocation to prevent spurious OOM's from perm gen
apetrusenko
parents: 0
diff changeset
222 virtual void doit();
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 2225
diff changeset
223 MetaWord* result() const { return _result; }
139
c0492d52d55b 6539517: CR 6186200 should be extended to perm gen allocation to prevent spurious OOM's from perm gen
apetrusenko
parents: 0
diff changeset
224 };
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1656
diff changeset
225
2125
7246a374a9f2 6458402: 3 jvmti tests fail with CMS and +ExplicitGCInvokesConcurrent
kamg
parents: 2039
diff changeset
226 class SvcGCMarker : public StackObj {
7246a374a9f2 6458402: 3 jvmti tests fail with CMS and +ExplicitGCInvokesConcurrent
kamg
parents: 2039
diff changeset
227 private:
7246a374a9f2 6458402: 3 jvmti tests fail with CMS and +ExplicitGCInvokesConcurrent
kamg
parents: 2039
diff changeset
228 JvmtiGCMarker _jgcm;
7246a374a9f2 6458402: 3 jvmti tests fail with CMS and +ExplicitGCInvokesConcurrent
kamg
parents: 2039
diff changeset
229 public:
7246a374a9f2 6458402: 3 jvmti tests fail with CMS and +ExplicitGCInvokesConcurrent
kamg
parents: 2039
diff changeset
230 typedef enum { MINOR, FULL, OTHER } reason_type;
7246a374a9f2 6458402: 3 jvmti tests fail with CMS and +ExplicitGCInvokesConcurrent
kamg
parents: 2039
diff changeset
231
7246a374a9f2 6458402: 3 jvmti tests fail with CMS and +ExplicitGCInvokesConcurrent
kamg
parents: 2039
diff changeset
232 SvcGCMarker(reason_type reason ) {
7246a374a9f2 6458402: 3 jvmti tests fail with CMS and +ExplicitGCInvokesConcurrent
kamg
parents: 2039
diff changeset
233 VM_GC_Operation::notify_gc_begin(reason == FULL);
2039
7c5250dbd584 6896624: G1: hotspot:::gc and hotspot:::mem-pool-gc probes are not fired
tonyp
parents: 1972
diff changeset
234 }
7c5250dbd584 6896624: G1: hotspot:::gc and hotspot:::mem-pool-gc probes are not fired
tonyp
parents: 1972
diff changeset
235
2125
7246a374a9f2 6458402: 3 jvmti tests fail with CMS and +ExplicitGCInvokesConcurrent
kamg
parents: 2039
diff changeset
236 ~SvcGCMarker() {
2039
7c5250dbd584 6896624: G1: hotspot:::gc and hotspot:::mem-pool-gc probes are not fired
tonyp
parents: 1972
diff changeset
237 VM_GC_Operation::notify_gc_end();
7c5250dbd584 6896624: G1: hotspot:::gc and hotspot:::mem-pool-gc probes are not fired
tonyp
parents: 1972
diff changeset
238 }
7c5250dbd584 6896624: G1: hotspot:::gc and hotspot:::mem-pool-gc probes are not fired
tonyp
parents: 1972
diff changeset
239 };
7c5250dbd584 6896624: G1: hotspot:::gc and hotspot:::mem-pool-gc probes are not fired
tonyp
parents: 1972
diff changeset
240
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1656
diff changeset
241 #endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_VMGCOPERATIONS_HPP