Mercurial > hg > graal-jvmci-8
comparison agent/src/share/classes/sun/jvm/hotspot/interpreter/BytecodeLoadConstant.java @ 2177:3582bf76420e
6990754: Use native memory and reference counting to implement SymbolTable
Summary: move symbols from permgen into C heap and reference count them
Reviewed-by: never, acorn, jmasa, stefank
author | coleenp |
---|---|
date | Thu, 27 Jan 2011 16:11:27 -0800 |
parents | 3b2dea75431e |
children | 1d1603768966 |
comparison
equal
deleted
inserted
replaced
2176:27e4ea99855d | 2177:3582bf76420e |
---|---|
110 ConstantTag ctag = method().getConstants().getTagAt(index()); | 110 ConstantTag ctag = method().getConstants().getTagAt(index()); |
111 return ctag.isKlass() || ctag.isUnresolvedKlass(); | 111 return ctag.isKlass() || ctag.isUnresolvedKlass(); |
112 } | 112 } |
113 | 113 |
114 // return Symbol (if unresolved) or Klass (if resolved) | 114 // return Symbol (if unresolved) or Klass (if resolved) |
115 public Oop getKlass() { | 115 public Object getKlass() { |
116 if (Assert.ASSERTS_ENABLED) { | 116 if (Assert.ASSERTS_ENABLED) { |
117 Assert.that(isKlassConstant(), "not a klass literal"); | 117 Assert.that(isKlassConstant(), "not a klass literal"); |
118 } | 118 } |
119 // tag change from 'unresolved' to 'klass' does not happen atomically. | 119 // tag change from 'unresolved' to 'klass' does not happen atomically. |
120 // We just look at the object at the corresponding index and | 120 // We just look at the object at the corresponding index and |
121 // decide based on the oop type. | 121 // decide based on the oop type. |
122 ConstantPool cpool = method().getConstants(); | 122 ConstantPool cpool = method().getConstants(); |
123 int cpIndex = index(); | 123 int cpIndex = index(); |
124 Oop oop = cpool.getObjAt(cpIndex); | 124 ConstantPool.CPSlot oop = cpool.getSlotAt(cpIndex); |
125 if (oop.isKlass()) { | 125 if (oop.isOop()) { |
126 return (Klass) oop; | 126 return (Klass) oop.getOop(); |
127 } else if (oop.isSymbol()) { | 127 } else if (oop.isMetaData()) { |
128 return (Symbol) oop; | 128 return oop.getSymbol(); |
129 } else { | 129 } else { |
130 throw new RuntimeException("should not reach here"); | 130 throw new RuntimeException("should not reach here"); |
131 } | 131 } |
132 } | 132 } |
133 | 133 |
163 return "<double " + Double.toString(cpool.getDoubleAt(cpIndex)) + "D>"; | 163 return "<double " + Double.toString(cpool.getDoubleAt(cpIndex)) + "D>"; |
164 } else if (ctag.isString() || ctag.isUnresolvedString()) { | 164 } else if (ctag.isString() || ctag.isUnresolvedString()) { |
165 // tag change from 'unresolved' to 'string' does not happen atomically. | 165 // tag change from 'unresolved' to 'string' does not happen atomically. |
166 // We just look at the object at the corresponding index and | 166 // We just look at the object at the corresponding index and |
167 // decide based on the oop type. | 167 // decide based on the oop type. |
168 Oop obj = cpool.getObjAt(cpIndex); | 168 ConstantPool.CPSlot obj = cpool.getSlotAt(cpIndex); |
169 if (obj.isSymbol()) { | 169 if (obj.isMetaData()) { |
170 Symbol sym = (Symbol) obj; | 170 Symbol sym = obj.getSymbol(); |
171 return "<String \"" + sym.asString() + "\">"; | 171 return "<String \"" + sym.asString() + "\">"; |
172 } else if (obj.isInstance()) { | 172 } else if (obj.isOop()) { |
173 return "<String \"" + OopUtilities.stringOopToString(obj) + "\">"; | 173 return "<String \"" + OopUtilities.stringOopToString(obj.getOop()) + "\">"; |
174 } else { | 174 } else { |
175 throw new RuntimeException("should not reach here"); | 175 throw new RuntimeException("should not reach here"); |
176 } | 176 } |
177 } else if (ctag.isKlass() || ctag.isUnresolvedKlass()) { | 177 } else if (ctag.isKlass() || ctag.isUnresolvedKlass()) { |
178 // tag change from 'unresolved' to 'klass' does not happen atomically. | 178 // tag change from 'unresolved' to 'klass' does not happen atomically. |
179 // We just look at the object at the corresponding index and | 179 // We just look at the object at the corresponding index and |
180 // decide based on the oop type. | 180 // decide based on the oop type. |
181 Oop obj = cpool.getObjAt(cpIndex); | 181 ConstantPool.CPSlot obj = cpool.getSlotAt(cpIndex); |
182 if (obj.isKlass()) { | 182 if (obj.isOop()) { |
183 Klass k = (Klass) obj; | 183 Klass k = (Klass) obj.getOop(); |
184 return "<Class " + k.getName().asString() + "@" + k.getHandle() + ">"; | 184 return "<Class " + k.getName().asString() + "@" + k.getHandle() + ">"; |
185 } else if (obj.isSymbol()) { | 185 } else if (obj.isMetaData()) { |
186 Symbol sym = (Symbol) obj; | 186 Symbol sym = obj.getSymbol(); |
187 return "<Class " + sym.asString() + ">"; | 187 return "<Class " + sym.asString() + ">"; |
188 } else { | 188 } else { |
189 throw new RuntimeException("should not reach here"); | 189 throw new RuntimeException("should not reach here"); |
190 } | 190 } |
191 } else if (ctag.isMethodHandle()) { | 191 } else if (ctag.isMethodHandle()) { |
192 Oop x = getCachedConstant(); | 192 Oop x = getCachedConstant(); |