1 #ifdef USE_PRAGMA_IDENT_SRC 2 #pragma ident "@(#)referencePolicy.cpp 1.12 07/05/05 17:05:54 JVM" 3 #endif 4 /* 5 * Copyright 2000-2003 Sun Microsystems, Inc. All Rights Reserved. 6 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 7 * 8 * This code is free software; you can redistribute it and/or modify it 9 * under the terms of the GNU General Public License version 2 only, as 10 * published by the Free Software Foundation. 11 * 12 * This code is distributed in the hope that it will be useful, but WITHOUT 13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 14 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15 * version 2 for more details (a copy is included in the LICENSE file that 16 * accompanied this code). 17 * 18 * You should have received a copy of the GNU General Public License version 19 * 2 along with this work; if not, write to the Free Software Foundation, 20 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 21 * 22 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 23 * CA 95054 USA or visit www.sun.com if you need additional information or 24 * have any questions. 25 * 26 */ 27 28 # include "incls/_precompiled.incl" 29 # include "incls/_referencePolicy.cpp.incl" 30 31 LRUCurrentHeapPolicy::LRUCurrentHeapPolicy() { 32 _max_interval = (Universe::get_heap_free_at_last_gc() / M) * SoftRefLRUPolicyMSPerMB; 33 assert(_max_interval >= 0,"Sanity check"); 34 } 35 36 // The oop passed in is the SoftReference object, and not 37 // the object the SoftReference points to. 38 bool LRUCurrentHeapPolicy::should_clear_reference(oop p) { 39 jlong interval = java_lang_ref_SoftReference::clock() - java_lang_ref_SoftReference::timestamp(p); 40 assert(interval >= 0, "Sanity check"); 41 42 // The interval will be zero if the ref was accessed since the last scavenge/gc. 43 if(interval <= _max_interval) { 44 return false; 45 } 46 47 return true; 48 } 49 50 /////////////////////// MaxHeap ////////////////////// 51 52 LRUMaxHeapPolicy::LRUMaxHeapPolicy() { 53 size_t max_heap = MaxHeapSize; 54 max_heap -= Universe::get_heap_used_at_last_gc(); 55 max_heap /= M; 56 57 _max_interval = max_heap * SoftRefLRUPolicyMSPerMB; 58 assert(_max_interval >= 0,"Sanity check"); 59 } 60 61 // The oop passed in is the SoftReference object, and not 62 // the object the SoftReference points to. 63 bool LRUMaxHeapPolicy::should_clear_reference(oop p) { 64 jlong interval = java_lang_ref_SoftReference::clock() - java_lang_ref_SoftReference::timestamp(p); 65 assert(interval >= 0, "Sanity check"); 66 67 // The interval will be zero if the ref was accessed since the last scavenge/gc. 68 if(interval <= _max_interval) { 69 return false; 70 } 71 72 return true; 73 } 74