comparison src/share/vm/runtime/reflectionUtils.hpp @ 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 f95d63e2154a
children 1d1603768966
comparison
equal deleted inserted replaced
2176:27e4ea99855d 2177:3582bf76420e
98 // A FieldStream streams over all fields in a class, superclasses and (super)interfaces. 98 // A FieldStream streams over all fields in a class, superclasses and (super)interfaces.
99 // Streaming is done in reverse order (subclasses first, fields in reverse order) 99 // Streaming is done in reverse order (subclasses first, fields in reverse order)
100 // Usage: 100 // Usage:
101 // 101 //
102 // for (FieldStream st(k, false, false); !st.eos(); st.next()) { 102 // for (FieldStream st(k, false, false); !st.eos(); st.next()) {
103 // symbolOop field_name = st.name(); 103 // Symbol* field_name = st.name();
104 // ... 104 // ...
105 // } 105 // }
106 106
107 107
108 class FieldStream : public KlassStream { 108 class FieldStream : public KlassStream {
124 AccessFlags access_flags() const { 124 AccessFlags access_flags() const {
125 AccessFlags flags; 125 AccessFlags flags;
126 flags.set_flags(fields()->ushort_at(index() + instanceKlass::access_flags_offset)); 126 flags.set_flags(fields()->ushort_at(index() + instanceKlass::access_flags_offset));
127 return flags; 127 return flags;
128 } 128 }
129 symbolOop name() const { 129 Symbol* name() const {
130 int name_index = fields()->ushort_at(index() + instanceKlass::name_index_offset); 130 int name_index = fields()->ushort_at(index() + instanceKlass::name_index_offset);
131 return constants()->symbol_at(name_index); 131 return constants()->symbol_at(name_index);
132 } 132 }
133 symbolOop signature() const { 133 Symbol* signature() const {
134 int signature_index = fields()->ushort_at(index() + 134 int signature_index = fields()->ushort_at(index() +
135 instanceKlass::signature_index_offset); 135 instanceKlass::signature_index_offset);
136 return constants()->symbol_at(signature_index); 136 return constants()->symbol_at(signature_index);
137 } 137 }
138 // missing: initval() 138 // missing: initval()
195 // fields in reverse order) 195 // fields in reverse order)
196 // 196 //
197 // Usage: 197 // Usage:
198 // 198 //
199 // for (FilteredFieldStream st(k, false, false); !st.eos(); st.next()) { 199 // for (FilteredFieldStream st(k, false, false); !st.eos(); st.next()) {
200 // symbolOop field_name = st.name(); 200 // Symbol* field_name = st.name();
201 // ... 201 // ...
202 // } 202 // }
203 203
204 class FilteredFieldStream : public FieldStream { 204 class FilteredFieldStream : public FieldStream {
205 private: 205 private: