86 }
87 int resolved_klass_index() const {
88 assert(_resolved_klass_index != _temp_resolved_klass_index, "constant pool merging was incomplete");
89 return _resolved_klass_index;
90 }
91 };
92
93 class KlassSizeStats;
94
95 class ConstantPool : public Metadata {
96 friend class VMStructs;
97 friend class JVMCIVMStructs;
98 friend class BytecodeInterpreter; // Directly extracts a klass in the pool for fast instanceof/checkcast
99 friend class Universe; // For null constructor
100 private:
101 Array<u1>* _tags; // the tag array describing the constant pool's contents
102 ConstantPoolCache* _cache; // the cache holding interpreter runtime information
103 InstanceKlass* _pool_holder; // the corresponding class
104 Array<u2>* _operands; // for variable-sized (InvokeDynamic) nodes, usually empty
105
106 // ... will be changed to support compressed pointers
107 Array<Klass*>* _resolved_klasses;
108
109 enum {
110 _has_preresolution = 1, // Flags
111 _on_stack = 2,
112 _is_shared = 4
113 };
114
115 int _flags; // old fashioned bit twiddling
116 int _length; // number of elements in the array
117
118 union {
119 // set for CDS to restore resolved references
120 int _resolved_reference_length;
121 // keeps version number for redefined classes (used in backtrace)
122 int _version;
123 } _saved;
124
125 void set_tags(Array<u1>* tags) { _tags = tags; }
126 void tag_at_put(int which, jbyte t) { tags()->at_put(which, t); }
|
86 }
87 int resolved_klass_index() const {
88 assert(_resolved_klass_index != _temp_resolved_klass_index, "constant pool merging was incomplete");
89 return _resolved_klass_index;
90 }
91 };
92
93 class KlassSizeStats;
94
95 class ConstantPool : public Metadata {
96 friend class VMStructs;
97 friend class JVMCIVMStructs;
98 friend class BytecodeInterpreter; // Directly extracts a klass in the pool for fast instanceof/checkcast
99 friend class Universe; // For null constructor
100 private:
101 Array<u1>* _tags; // the tag array describing the constant pool's contents
102 ConstantPoolCache* _cache; // the cache holding interpreter runtime information
103 InstanceKlass* _pool_holder; // the corresponding class
104 Array<u2>* _operands; // for variable-sized (InvokeDynamic) nodes, usually empty
105
106 // Consider using an array of compressed klass pointers to
107 // save space on 64-bit platforms.
108 Array<Klass*>* _resolved_klasses;
109
110 enum {
111 _has_preresolution = 1, // Flags
112 _on_stack = 2,
113 _is_shared = 4
114 };
115
116 int _flags; // old fashioned bit twiddling
117 int _length; // number of elements in the array
118
119 union {
120 // set for CDS to restore resolved references
121 int _resolved_reference_length;
122 // keeps version number for redefined classes (used in backtrace)
123 int _version;
124 } _saved;
125
126 void set_tags(Array<u1>* tags) { _tags = tags; }
127 void tag_at_put(int which, jbyte t) { tags()->at_put(which, t); }
|