1/*
2 * Copyright (c) 2001, 2017, 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#include "precompiled.hpp"
26#include "classfile/javaClasses.hpp"
27#include "classfile/stringTable.hpp"
28#include "classfile/symbolTable.hpp"
29#include "classfile/systemDictionary.hpp"
30#include "classfile/vmSymbols.hpp"
31#include "code/codeCache.hpp"
32#include "code/icBuffer.hpp"
33#include "gc/serial/genMarkSweep.hpp"
34#include "gc/shared/collectedHeap.inline.hpp"
35#include "gc/shared/gcHeapSummary.hpp"
36#include "gc/shared/gcTimer.hpp"
37#include "gc/shared/gcTrace.hpp"
38#include "gc/shared/gcTraceTime.inline.hpp"
39#include "gc/shared/genCollectedHeap.hpp"
40#include "gc/shared/generation.hpp"
41#include "gc/shared/genOopClosures.inline.hpp"
42#include "gc/shared/modRefBarrierSet.hpp"
43#include "gc/shared/referencePolicy.hpp"
44#include "gc/shared/space.hpp"
45#include "gc/shared/strongRootsScope.hpp"
46#include "oops/instanceRefKlass.hpp"
47#include "oops/oop.inline.hpp"
48#include "prims/jvmtiExport.hpp"
49#include "runtime/handles.inline.hpp"
50#include "runtime/synchronizer.hpp"
51#include "runtime/thread.inline.hpp"
52#include "runtime/vmThread.hpp"
53#include "utilities/copy.hpp"
54#include "utilities/events.hpp"
55#include "utilities/stack.inline.hpp"
56
57void GenMarkSweep::invoke_at_safepoint(ReferenceProcessor* rp, bool clear_all_softrefs) {
58  assert(SafepointSynchronize::is_at_safepoint(), "must be at a safepoint");
59
60  GenCollectedHeap* gch = GenCollectedHeap::heap();
61#ifdef ASSERT
62  if (gch->collector_policy()->should_clear_all_soft_refs()) {
63    assert(clear_all_softrefs, "Policy should have been checked earlier");
64  }
65#endif
66
67  // hook up weak ref data so it can be used during Mark-Sweep
68  assert(ref_processor() == NULL, "no stomping");
69  assert(rp != NULL, "should be non-NULL");
70  set_ref_processor(rp);
71  rp->setup_policy(clear_all_softrefs);
72
73  gch->trace_heap_before_gc(_gc_tracer);
74
75  // When collecting the permanent generation Method*s may be moving,
76  // so we either have to flush all bcp data or convert it into bci.
77  CodeCache::gc_prologue();
78
79  // Increment the invocation count
80  _total_invocations++;
81
82  // Capture used regions for each generation that will be
83  // subject to collection, so that card table adjustments can
84  // be made intelligently (see clear / invalidate further below).
85  gch->save_used_regions();
86
87  allocate_stacks();
88
89  mark_sweep_phase1(clear_all_softrefs);
90
91  mark_sweep_phase2();
92
93  // Don't add any more derived pointers during phase3
94#if defined(COMPILER2) || INCLUDE_JVMCI
95  assert(DerivedPointerTable::is_active(), "Sanity");
96  DerivedPointerTable::set_active(false);
97#endif
98
99  mark_sweep_phase3();
100
101  mark_sweep_phase4();
102
103  restore_marks();
104
105  // Set saved marks for allocation profiler (and other things? -- dld)
106  // (Should this be in general part?)
107  gch->save_marks();
108
109  deallocate_stacks();
110
111  // If compaction completely evacuated the young generation then we
112  // can clear the card table.  Otherwise, we must invalidate
113  // it (consider all cards dirty).  In the future, we might consider doing
114  // compaction within generations only, and doing card-table sliding.
115  CardTableRS* rs = gch->rem_set();
116  Generation* old_gen = gch->old_gen();
117
118  // Clear/invalidate below make use of the "prev_used_regions" saved earlier.
119  if (gch->young_gen()->used() == 0) {
120    // We've evacuated the young generation.
121    rs->clear_into_younger(old_gen);
122  } else {
123    // Invalidate the cards corresponding to the currently used
124    // region and clear those corresponding to the evacuated region.
125    rs->invalidate_or_clear(old_gen);
126  }
127
128  CodeCache::gc_epilogue();
129  JvmtiExport::gc_epilogue();
130
131  // refs processing: clean slate
132  set_ref_processor(NULL);
133
134  // Update heap occupancy information which is used as
135  // input to soft ref clearing policy at the next gc.
136  Universe::update_heap_info_at_gc();
137
138  // Update time of last gc for all generations we collected
139  // (which currently is all the generations in the heap).
140  // We need to use a monotonically non-decreasing time in ms
141  // or we will see time-warp warnings and os::javaTimeMillis()
142  // does not guarantee monotonicity.
143  jlong now = os::javaTimeNanos() / NANOSECS_PER_MILLISEC;
144  gch->update_time_of_last_gc(now);
145
146  gch->trace_heap_after_gc(_gc_tracer);
147}
148
149void GenMarkSweep::allocate_stacks() {
150  GenCollectedHeap* gch = GenCollectedHeap::heap();
151  // Scratch request on behalf of old generation; will do no allocation.
152  ScratchBlock* scratch = gch->gather_scratch(gch->old_gen(), 0);
153
154  // $$$ To cut a corner, we'll only use the first scratch block, and then
155  // revert to malloc.
156  if (scratch != NULL) {
157    _preserved_count_max =
158      scratch->num_words * HeapWordSize / sizeof(PreservedMark);
159  } else {
160    _preserved_count_max = 0;
161  }
162
163  _preserved_marks = (PreservedMark*)scratch;
164  _preserved_count = 0;
165}
166
167
168void GenMarkSweep::deallocate_stacks() {
169  if (!UseG1GC) {
170    GenCollectedHeap* gch = GenCollectedHeap::heap();
171    gch->release_scratch();
172  }
173
174  _preserved_mark_stack.clear(true);
175  _preserved_oop_stack.clear(true);
176  _marking_stack.clear();
177  _objarray_stack.clear(true);
178}
179
180void GenMarkSweep::mark_sweep_phase1(bool clear_all_softrefs) {
181  // Recursively traverse all live objects and mark them
182  GCTraceTime(Info, gc, phases) tm("Phase 1: Mark live objects", _gc_timer);
183
184  GenCollectedHeap* gch = GenCollectedHeap::heap();
185
186  // Because follow_root_closure is created statically, cannot
187  // use OopsInGenClosure constructor which takes a generation,
188  // as the Universe has not been created when the static constructors
189  // are run.
190  follow_root_closure.set_orig_generation(gch->old_gen());
191
192  // Need new claim bits before marking starts.
193  ClassLoaderDataGraph::clear_claimed_marks();
194
195  {
196    StrongRootsScope srs(1);
197
198    gch->full_process_roots(&srs,
199                            false, // not the adjust phase
200                            GenCollectedHeap::SO_None,
201                            ClassUnloading, // only strong roots if ClassUnloading
202                                            // is enabled
203                            &follow_root_closure,
204                            &follow_cld_closure);
205  }
206
207  // Process reference objects found during marking
208  {
209    GCTraceTime(Debug, gc, phases) tm_m("Reference Processing", gc_timer());
210
211    ref_processor()->setup_policy(clear_all_softrefs);
212    ReferenceProcessorPhaseTimes pt(_gc_timer, ref_processor()->num_q());
213    const ReferenceProcessorStats& stats =
214      ref_processor()->process_discovered_references(
215        &is_alive, &keep_alive, &follow_stack_closure, NULL, &pt);
216    pt.print_all_references();
217    gc_tracer()->report_gc_reference_stats(stats);
218  }
219
220  // This is the point where the entire marking should have completed.
221  assert(_marking_stack.is_empty(), "Marking should have completed");
222
223  {
224    GCTraceTime(Debug, gc, phases) tm_m("Class Unloading", gc_timer());
225
226    // Unload classes and purge the SystemDictionary.
227    bool purged_class = SystemDictionary::do_unloading(&is_alive, gc_timer());
228
229    // Unload nmethods.
230    CodeCache::do_unloading(&is_alive, purged_class);
231
232    // Prune dead klasses from subklass/sibling/implementor lists.
233    Klass::clean_weak_klass_links(&is_alive);
234  }
235
236  {
237    GCTraceTime(Debug, gc, phases) t("Scrub String Table", gc_timer());
238    // Delete entries for dead interned strings.
239    StringTable::unlink(&is_alive);
240  }
241
242  {
243    GCTraceTime(Debug, gc, phases) t("Scrub Symbol Table", gc_timer());
244    // Clean up unreferenced symbols in symbol table.
245    SymbolTable::unlink();
246  }
247
248  gc_tracer()->report_object_count_after_gc(&is_alive);
249}
250
251
252void GenMarkSweep::mark_sweep_phase2() {
253  // Now all live objects are marked, compute the new object addresses.
254
255  // It is imperative that we traverse perm_gen LAST. If dead space is
256  // allowed a range of dead object may get overwritten by a dead int
257  // array. If perm_gen is not traversed last a Klass* may get
258  // overwritten. This is fine since it is dead, but if the class has dead
259  // instances we have to skip them, and in order to find their size we
260  // need the Klass*!
261  //
262  // It is not required that we traverse spaces in the same order in
263  // phase2, phase3 and phase4, but the ValidateMarkSweep live oops
264  // tracking expects us to do so. See comment under phase4.
265
266  GenCollectedHeap* gch = GenCollectedHeap::heap();
267
268  GCTraceTime(Info, gc, phases) tm("Phase 2: Compute new object addresses", _gc_timer);
269
270  gch->prepare_for_compaction();
271}
272
273class GenAdjustPointersClosure: public GenCollectedHeap::GenClosure {
274public:
275  void do_generation(Generation* gen) {
276    gen->adjust_pointers();
277  }
278};
279
280void GenMarkSweep::mark_sweep_phase3() {
281  GenCollectedHeap* gch = GenCollectedHeap::heap();
282
283  // Adjust the pointers to reflect the new locations
284  GCTraceTime(Info, gc, phases) tm("Phase 3: Adjust pointers", gc_timer());
285
286  // Need new claim bits for the pointer adjustment tracing.
287  ClassLoaderDataGraph::clear_claimed_marks();
288
289  // Because the closure below is created statically, we cannot
290  // use OopsInGenClosure constructor which takes a generation,
291  // as the Universe has not been created when the static constructors
292  // are run.
293  adjust_pointer_closure.set_orig_generation(gch->old_gen());
294
295  {
296    StrongRootsScope srs(1);
297
298    gch->full_process_roots(&srs,
299                            true,  // this is the adjust phase
300                            GenCollectedHeap::SO_AllCodeCache,
301                            false, // all roots
302                            &adjust_pointer_closure,
303                            &adjust_cld_closure);
304  }
305
306  gch->gen_process_weak_roots(&adjust_pointer_closure);
307
308  adjust_marks();
309  GenAdjustPointersClosure blk;
310  gch->generation_iterate(&blk, true);
311}
312
313class GenCompactClosure: public GenCollectedHeap::GenClosure {
314public:
315  void do_generation(Generation* gen) {
316    gen->compact();
317  }
318};
319
320void GenMarkSweep::mark_sweep_phase4() {
321  // All pointers are now adjusted, move objects accordingly
322
323  // It is imperative that we traverse perm_gen first in phase4. All
324  // classes must be allocated earlier than their instances, and traversing
325  // perm_gen first makes sure that all Klass*s have moved to their new
326  // location before any instance does a dispatch through it's klass!
327
328  // The ValidateMarkSweep live oops tracking expects us to traverse spaces
329  // in the same order in phase2, phase3 and phase4. We don't quite do that
330  // here (perm_gen first rather than last), so we tell the validate code
331  // to use a higher index (saved from phase2) when verifying perm_gen.
332  GenCollectedHeap* gch = GenCollectedHeap::heap();
333
334  GCTraceTime(Info, gc, phases) tm("Phase 4: Move objects", _gc_timer);
335
336  GenCompactClosure blk;
337  gch->generation_iterate(&blk, true);
338}
339