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;
|
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-2008 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 setup();
33 }
34
35 // Capture state (of-the-VM) information needed to evaluate the policy
36 void LRUCurrentHeapPolicy::setup() {
37 _max_interval = (Universe::get_heap_free_at_last_gc() / M) * SoftRefLRUPolicyMSPerMB;
38 assert(_max_interval >= 0,"Sanity check");
39 }
40
41 // The oop passed in is the SoftReference object, and not
42 // the object the SoftReference points to.
43 bool LRUCurrentHeapPolicy::should_clear_reference(oop p) {
44 jlong interval = java_lang_ref_SoftReference::clock() - java_lang_ref_SoftReference::timestamp(p);
45 assert(interval >= 0, "Sanity check");
46
47 // The interval will be zero if the ref was accessed since the last scavenge/gc.
48 if(interval <= _max_interval) {
49 return false;
50 }
51
52 return true;
53 }
54
55 /////////////////////// MaxHeap //////////////////////
56
57 LRUMaxHeapPolicy::LRUMaxHeapPolicy() {
58 setup();
59 }
60
61 // Capture state (of-the-VM) information needed to evaluate the policy
62 void LRUMaxHeapPolicy::setup() {
63 size_t max_heap = MaxHeapSize;
64 max_heap -= Universe::get_heap_used_at_last_gc();
65 max_heap /= M;
66
67 _max_interval = max_heap * SoftRefLRUPolicyMSPerMB;
68 assert(_max_interval >= 0,"Sanity check");
69 }
70
71 // The oop passed in is the SoftReference object, and not
72 // the object the SoftReference points to.
73 bool LRUMaxHeapPolicy::should_clear_reference(oop p) {
74 jlong interval = java_lang_ref_SoftReference::clock() - java_lang_ref_SoftReference::timestamp(p);
75 assert(interval >= 0, "Sanity check");
76
77 // The interval will be zero if the ref was accessed since the last scavenge/gc.
78 if(interval <= _max_interval) {
79 return false;
80 }
81
82 return true;
|