index

src/share/vm/gc_implementation/g1/vm_operations_g1.cpp

Print this page
rev 7780 : imported patch 8072621
   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 #include "precompiled.hpp"
  26 #include "gc_implementation/g1/concurrentMarkThread.inline.hpp"
  27 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
  28 #include "gc_implementation/g1/g1CollectorPolicy.hpp"
  29 #include "gc_implementation/g1/g1Log.hpp"
  30 #include "gc_implementation/g1/vm_operations_g1.hpp"
  31 #include "gc_implementation/shared/gcTimer.hpp"
  32 #include "gc_implementation/shared/gcTraceTime.hpp"
  33 #include "gc_implementation/shared/isGCActiveMark.hpp"
  34 #include "gc_implementation/g1/vm_operations_g1.hpp"
  35 #include "runtime/interfaceSupport.hpp"
  36 
  37 VM_G1CollectForAllocation::VM_G1CollectForAllocation(
  38                                                   unsigned int gc_count_before,
  39                                                   size_t word_size)
  40   : VM_G1OperationWithAllocRequest(gc_count_before, word_size,
  41                                    GCCause::_allocation_failure) {
  42   guarantee(word_size > 0, "an allocation should always be requested");
  43 }
  44 
  45 void VM_G1CollectForAllocation::doit() {
  46   G1CollectedHeap* g1h = G1CollectedHeap::heap();
  47   GCCauseSetter x(g1h, _gc_cause);
  48 
  49   _result = g1h->satisfy_failed_allocation(_word_size, allocation_context(), &_pause_succeeded);
  50   assert(_result == NULL || _pause_succeeded,
  51          "if we get back a result, the pause should have succeeded");
  52 }
  53 
  54 void VM_G1CollectFull::doit() {
  55   G1CollectedHeap* g1h = G1CollectedHeap::heap();
  56   GCCauseSetter x(g1h, _gc_cause);
  57   g1h->do_full_collection(false /* clear_all_soft_refs */);
  58 }
  59 
  60 VM_G1IncCollectionPause::VM_G1IncCollectionPause(
  61                                       unsigned int   gc_count_before,
  62                                       size_t         word_size,
  63                                       bool           should_initiate_conc_mark,
  64                                       double         target_pause_time_ms,
  65                                       GCCause::Cause gc_cause)
  66   : VM_G1OperationWithAllocRequest(gc_count_before, word_size, gc_cause),
  67     _should_initiate_conc_mark(should_initiate_conc_mark),
  68     _target_pause_time_ms(target_pause_time_ms),
  69     _should_retry_gc(false),
  70     _old_marking_cycles_completed_before(0) {
  71   guarantee(target_pause_time_ms > 0.0,
  72             err_msg("target_pause_time_ms = %1.6lf should be positive",
  73                     target_pause_time_ms));
  74   _gc_cause = gc_cause;
  75 }
  76 
  77 bool VM_G1IncCollectionPause::doit_prologue() {
  78   bool res = VM_GC_Operation::doit_prologue();
  79   if (!res) {
  80     if (_should_initiate_conc_mark) {
  81       // The prologue can fail for a couple of reasons. The first is that another GC


   1 /*
   2  * Copyright (c) 2001, 2015, 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 "gc_implementation/g1/concurrentMarkThread.inline.hpp"
  27 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
  28 #include "gc_implementation/g1/g1CollectorPolicy.hpp"
  29 #include "gc_implementation/g1/g1Log.hpp"
  30 #include "gc_implementation/g1/vm_operations_g1.hpp"
  31 #include "gc_implementation/shared/gcTimer.hpp"
  32 #include "gc_implementation/shared/gcTraceTime.hpp"
  33 #include "gc_implementation/shared/isGCActiveMark.hpp"
  34 #include "gc_implementation/g1/vm_operations_g1.hpp"
  35 #include "runtime/interfaceSupport.hpp"
  36 
  37 VM_G1CollectForAllocation::VM_G1CollectForAllocation(uint gc_count_before,

  38                                                      size_t word_size)
  39   : VM_G1OperationWithAllocRequest(gc_count_before, word_size,
  40                                    GCCause::_allocation_failure) {
  41   guarantee(word_size > 0, "an allocation should always be requested");
  42 }
  43 
  44 void VM_G1CollectForAllocation::doit() {
  45   G1CollectedHeap* g1h = G1CollectedHeap::heap();
  46   GCCauseSetter x(g1h, _gc_cause);
  47 
  48   _result = g1h->satisfy_failed_allocation(_word_size, allocation_context(), &_pause_succeeded);
  49   assert(_result == NULL || _pause_succeeded,
  50          "if we get back a result, the pause should have succeeded");
  51 }
  52 
  53 void VM_G1CollectFull::doit() {
  54   G1CollectedHeap* g1h = G1CollectedHeap::heap();
  55   GCCauseSetter x(g1h, _gc_cause);
  56   g1h->do_full_collection(false /* clear_all_soft_refs */);
  57 }
  58 
  59 VM_G1IncCollectionPause::VM_G1IncCollectionPause(uint           gc_count_before,

  60                                                  size_t         word_size,
  61                                                  bool           should_initiate_conc_mark,
  62                                                  double         target_pause_time_ms,
  63                                                  GCCause::Cause gc_cause)
  64   : VM_G1OperationWithAllocRequest(gc_count_before, word_size, gc_cause),
  65     _should_initiate_conc_mark(should_initiate_conc_mark),
  66     _target_pause_time_ms(target_pause_time_ms),
  67     _should_retry_gc(false),
  68     _old_marking_cycles_completed_before(0) {
  69   guarantee(target_pause_time_ms > 0.0,
  70             err_msg("target_pause_time_ms = %1.6lf should be positive",
  71                     target_pause_time_ms));
  72   _gc_cause = gc_cause;
  73 }
  74 
  75 bool VM_G1IncCollectionPause::doit_prologue() {
  76   bool res = VM_GC_Operation::doit_prologue();
  77   if (!res) {
  78     if (_should_initiate_conc_mark) {
  79       // The prologue can fail for a couple of reasons. The first is that another GC


index