comparison agent/src/share/classes/sun/jvm/hotspot/memory/CompactingPermGenGen.java @ 0:a61af66fc99e jdk7-b24

Initial load
author duke
date Sat, 01 Dec 2007 00:00:00 +0000
parents
children c18cbe5936b8
comparison
equal deleted inserted replaced
-1:000000000000 0:a61af66fc99e
1 /*
2 * Copyright 2000-2005 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 * CA 95054 USA or visit www.sun.com if you need additional information or
21 * have any questions.
22 *
23 */
24
25 package sun.jvm.hotspot.memory;
26
27 import java.io.*;
28 import java.util.*;
29
30 import sun.jvm.hotspot.debugger.*;
31 import sun.jvm.hotspot.runtime.*;
32 import sun.jvm.hotspot.types.*;
33
34 /** This is the "generation" view of a CompactingPermGen. */
35 public class CompactingPermGenGen extends OneContigSpaceCardGeneration {
36 private static AddressField unsharedBottomField;
37 private static AddressField unsharedEndField;
38 private static AddressField sharedBottomField;
39 private static AddressField sharedEndField;
40 private static AddressField readOnlyBottomField;
41 private static AddressField readOnlyEndField;
42 private static AddressField readWriteBottomField;
43 private static AddressField readWriteEndField;
44 private static AddressField roSpaceField;
45 private static AddressField rwSpaceField;
46
47 static {
48 VM.registerVMInitializedObserver(new Observer() {
49 public void update(Observable o, Object data) {
50 initialize(VM.getVM().getTypeDataBase());
51 }
52 });
53 }
54
55 private static synchronized void initialize(TypeDataBase db) {
56 Type type = db.lookupType("CompactingPermGenGen");
57 unsharedBottomField = type.getAddressField("unshared_bottom");
58 unsharedEndField = type.getAddressField("unshared_end");
59 sharedBottomField = type.getAddressField("shared_bottom");
60 sharedEndField = type.getAddressField("shared_end");
61 readOnlyBottomField = type.getAddressField("readonly_bottom");
62 readOnlyEndField = type.getAddressField("readonly_end");
63 readWriteBottomField = type.getAddressField("readwrite_bottom");
64 readWriteEndField = type.getAddressField("readwrite_end");
65 roSpaceField = type.getAddressField("_ro_space");
66 rwSpaceField = type.getAddressField("_rw_space");
67 }
68
69 public boolean isSharingEnabled() {
70 return VM.getVM().isSharingEnabled();
71 }
72
73 // NEEDS_CLEANUP
74 public CompactingPermGenGen(Address addr) {
75 super(addr);
76 }
77
78 public OffsetTableContigSpace roSpace() {
79 return newOffsetTableContigSpace(roSpaceField.getValue(addr));
80 }
81
82 public OffsetTableContigSpace rwSpace() {
83 return newOffsetTableContigSpace(rwSpaceField.getValue(addr));
84 }
85
86 public String name() {
87 return "compacting permanent generation";
88 }
89
90 public static Address unsharedBottom() {
91 return unsharedBottomField.getValue();
92 }
93
94 public static Address unsharedEnd() {
95 return unsharedEndField.getValue();
96 }
97
98 public static Address sharedBottom() {
99 return sharedBottomField.getValue();
100 }
101
102 public static Address sharedEnd() {
103 return sharedEndField.getValue();
104 }
105
106 public static Address readOnlyBottom() {
107 return readOnlyBottomField.getValue();
108 }
109
110 public static Address readOnlyEnd() {
111 return readOnlyEndField.getValue();
112 }
113
114 public static Address readWriteBottom() {
115 return readWriteBottomField.getValue();
116 }
117
118 public static Address readWriteEnd() {
119 return readWriteEndField.getValue();
120 }
121
122 public static boolean isShared(Address p) {
123 return sharedBottom().lessThanOrEqual(p) && sharedEnd().greaterThan(p);
124 }
125
126 public static boolean isSharedReadOnly(Address p) {
127 return readOnlyBottom().lessThanOrEqual(p) && readOnlyEnd().greaterThan(p);
128 }
129
130 public static boolean isSharedReadWrite(Address p) {
131 return readWriteBottom().lessThanOrEqual(p) && readWriteEnd().greaterThan(p);
132 }
133
134 public boolean isIn(Address p) {
135 return unsharedBottom().lessThanOrEqual(p) && sharedEnd().greaterThan(p);
136 }
137
138 public void spaceIterate(SpaceClosure blk, boolean usedOnly) {
139 super.spaceIterate(blk, usedOnly);
140 if (isSharingEnabled()) {
141 blk.doSpace(roSpace());
142 blk.doSpace(rwSpace());
143 }
144 }
145
146 public void printOn(PrintStream tty) {
147 tty.print(" perm");
148 theSpace().printOn(tty);
149 if (isSharingEnabled()) {
150 tty.print(" ro space: ");
151 roSpace().printOn(tty);
152 tty.print(", rw space: ");
153 rwSpace().printOn(tty);
154 }
155 }
156
157 private OffsetTableContigSpace newOffsetTableContigSpace(Address addr) {
158 return (OffsetTableContigSpace) VMObjectFactory.newObject(
159 OffsetTableContigSpace.class, addr);
160 }
161 }