< prev index next >

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

Print this page
rev 7799 : [mq]: 8073466-remove-ratining-functionality-in-pargcallocbuffer
   1 /*
   2  * Copyright (c) 2014, 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  *


 103     _g1h->alloc_buffer_stats(InCSetState::Old)->adjust_desired_plab_sz(no_of_gc_workers);
 104   }
 105 }
 106 
 107 void G1DefaultAllocator::abandon_gc_alloc_regions() {
 108   assert(survivor_gc_alloc_region(AllocationContext::current())->get() == NULL, "pre-condition");
 109   assert(old_gc_alloc_region(AllocationContext::current())->get() == NULL, "pre-condition");
 110   _retained_old_gc_alloc_region = NULL;
 111 }
 112 
 113 G1ParGCAllocBuffer::G1ParGCAllocBuffer(size_t gclab_word_size) :
 114   ParGCAllocBuffer(gclab_word_size), _retired(true) { }
 115 
 116 HeapWord* G1ParGCAllocator::allocate_direct_or_new_plab(InCSetState dest,
 117                                                         size_t word_sz,
 118                                                         AllocationContext_t context) {
 119   size_t gclab_word_size = _g1h->desired_plab_sz(dest);
 120   if (word_sz * 100 < gclab_word_size * ParallelGCBufferWastePct) {
 121     G1ParGCAllocBuffer* alloc_buf = alloc_buffer(dest, context);
 122     add_to_alloc_buffer_waste(alloc_buf->words_remaining());
 123     alloc_buf->retire(false /* end_of_gc */, false /* retain */);
 124 
 125     HeapWord* buf = _g1h->par_allocate_during_gc(dest, gclab_word_size, context);
 126     if (buf == NULL) {
 127       return NULL; // Let caller handle allocation failure.
 128     }
 129     // Otherwise.
 130     alloc_buf->set_word_size(gclab_word_size);
 131     alloc_buf->set_buf(buf);
 132 
 133     HeapWord* const obj = alloc_buf->allocate(word_sz);
 134     assert(obj != NULL, "buffer was definitely big enough...");
 135     return obj;
 136   } else {
 137     return _g1h->par_allocate_during_gc(dest, word_sz, context);
 138   }
 139 }
 140 
 141 G1DefaultParGCAllocator::G1DefaultParGCAllocator(G1CollectedHeap* g1h) :
 142   G1ParGCAllocator(g1h),
 143   _surviving_alloc_buffer(g1h->desired_plab_sz(InCSetState::Young)),
 144   _tenured_alloc_buffer(g1h->desired_plab_sz(InCSetState::Old)) {
 145   for (uint state = 0; state < InCSetState::Num; state++) {
 146     _alloc_buffers[state] = NULL;
 147   }
 148   _alloc_buffers[InCSetState::Young] = &_surviving_alloc_buffer;
 149   _alloc_buffers[InCSetState::Old]  = &_tenured_alloc_buffer;
 150 }
 151 
 152 void G1DefaultParGCAllocator::retire_alloc_buffers() {
 153   for (uint state = 0; state < InCSetState::Num; state++) {
 154     G1ParGCAllocBuffer* const buf = _alloc_buffers[state];
 155     if (buf != NULL) {
 156       add_to_alloc_buffer_waste(buf->words_remaining());
 157       buf->flush_stats_and_retire(_g1h->alloc_buffer_stats(state),
 158                                   true /* end_of_gc */,
 159                                   false /* retain */);
 160     }
 161   }
 162 }
   1 /*
   2  * Copyright (c) 2014, 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  *


 103     _g1h->alloc_buffer_stats(InCSetState::Old)->adjust_desired_plab_sz(no_of_gc_workers);
 104   }
 105 }
 106 
 107 void G1DefaultAllocator::abandon_gc_alloc_regions() {
 108   assert(survivor_gc_alloc_region(AllocationContext::current())->get() == NULL, "pre-condition");
 109   assert(old_gc_alloc_region(AllocationContext::current())->get() == NULL, "pre-condition");
 110   _retained_old_gc_alloc_region = NULL;
 111 }
 112 
 113 G1ParGCAllocBuffer::G1ParGCAllocBuffer(size_t gclab_word_size) :
 114   ParGCAllocBuffer(gclab_word_size), _retired(true) { }
 115 
 116 HeapWord* G1ParGCAllocator::allocate_direct_or_new_plab(InCSetState dest,
 117                                                         size_t word_sz,
 118                                                         AllocationContext_t context) {
 119   size_t gclab_word_size = _g1h->desired_plab_sz(dest);
 120   if (word_sz * 100 < gclab_word_size * ParallelGCBufferWastePct) {
 121     G1ParGCAllocBuffer* alloc_buf = alloc_buffer(dest, context);
 122     add_to_alloc_buffer_waste(alloc_buf->words_remaining());
 123     alloc_buf->retire();
 124 
 125     HeapWord* buf = _g1h->par_allocate_during_gc(dest, gclab_word_size, context);
 126     if (buf == NULL) {
 127       return NULL; // Let caller handle allocation failure.
 128     }
 129     // Otherwise.
 130     alloc_buf->set_word_size(gclab_word_size);
 131     alloc_buf->set_buf(buf);
 132 
 133     HeapWord* const obj = alloc_buf->allocate(word_sz);
 134     assert(obj != NULL, "buffer was definitely big enough...");
 135     return obj;
 136   } else {
 137     return _g1h->par_allocate_during_gc(dest, word_sz, context);
 138   }
 139 }
 140 
 141 G1DefaultParGCAllocator::G1DefaultParGCAllocator(G1CollectedHeap* g1h) :
 142   G1ParGCAllocator(g1h),
 143   _surviving_alloc_buffer(g1h->desired_plab_sz(InCSetState::Young)),
 144   _tenured_alloc_buffer(g1h->desired_plab_sz(InCSetState::Old)) {
 145   for (uint state = 0; state < InCSetState::Num; state++) {
 146     _alloc_buffers[state] = NULL;
 147   }
 148   _alloc_buffers[InCSetState::Young] = &_surviving_alloc_buffer;
 149   _alloc_buffers[InCSetState::Old]  = &_tenured_alloc_buffer;
 150 }
 151 
 152 void G1DefaultParGCAllocator::retire_alloc_buffers() {
 153   for (uint state = 0; state < InCSetState::Num; state++) {
 154     G1ParGCAllocBuffer* const buf = _alloc_buffers[state];
 155     if (buf != NULL) {
 156       add_to_alloc_buffer_waste(buf->words_remaining());
 157       buf->flush_and_retire_stats(_g1h->alloc_buffer_stats(state));


 158     }
 159   }
 160 }
< prev index next >