src/share/vm/utilities/growableArray.cpp

Thu, 20 Nov 2008 16:56:09 -0800

author
ysr
date
Thu, 20 Nov 2008 16:56:09 -0800
changeset 888
c96030fff130
parent 435
a61af66fc99e
child 1031
83ef1482304c
permissions
-rw-r--r--

6684579: SoftReference processing can be made more efficient
Summary: For current soft-ref clearing policies, we can decide at marking time if a soft-reference will definitely not be cleared, postponing the decision of whether it will definitely be cleared to the final reference processing phase. This can be especially beneficial in the case of concurrent collectors where the marking is usually concurrent but reference processing is usually not.
Reviewed-by: jmasa

duke@435 1 /*
duke@435 2 * Copyright 1997-2005 Sun Microsystems, Inc. All Rights Reserved.
duke@435 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
duke@435 4 *
duke@435 5 * This code is free software; you can redistribute it and/or modify it
duke@435 6 * under the terms of the GNU General Public License version 2 only, as
duke@435 7 * published by the Free Software Foundation.
duke@435 8 *
duke@435 9 * This code is distributed in the hope that it will be useful, but WITHOUT
duke@435 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
duke@435 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
duke@435 12 * version 2 for more details (a copy is included in the LICENSE file that
duke@435 13 * accompanied this code).
duke@435 14 *
duke@435 15 * You should have received a copy of the GNU General Public License version
duke@435 16 * 2 along with this work; if not, write to the Free Software Foundation,
duke@435 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
duke@435 18 *
duke@435 19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
duke@435 20 * CA 95054 USA or visit www.sun.com if you need additional information or
duke@435 21 * have any questions.
duke@435 22 *
duke@435 23 */
duke@435 24 # include "incls/_precompiled.incl"
duke@435 25 # include "incls/_growableArray.cpp.incl"
duke@435 26
duke@435 27 #ifdef ASSERT
duke@435 28 void GenericGrowableArray::set_nesting() {
duke@435 29 if (on_stack()) {
duke@435 30 _nesting = Thread::current()->resource_area()->nesting();
duke@435 31 }
duke@435 32 }
duke@435 33
duke@435 34 void GenericGrowableArray::check_nesting() {
duke@435 35 // Check for insidious allocation bug: if a GrowableArray overflows, the
duke@435 36 // grown array must be allocated under the same ResourceMark as the original.
duke@435 37 // Otherwise, the _data array will be deallocated too early.
duke@435 38 if (on_stack() &&
duke@435 39 _nesting != Thread::current()->resource_area()->nesting()) {
duke@435 40 fatal("allocation bug: GrowableArray could grow within nested ResourceMark");
duke@435 41 }
duke@435 42 }
duke@435 43 #endif
duke@435 44
duke@435 45 void* GenericGrowableArray::raw_allocate(int elementSize) {
duke@435 46 if (on_stack()) {
duke@435 47 return (void*)resource_allocate_bytes(elementSize * _max);
duke@435 48 } else if (on_C_heap()) {
duke@435 49 return (void*)AllocateHeap(elementSize * _max, "GrET in " __FILE__);
duke@435 50 } else {
duke@435 51 return _arena->Amalloc(elementSize * _max);
duke@435 52 }
duke@435 53 }

mercurial