164 assert(obj->is_constantPoolCache(), "should be constant pool"); |
164 assert(obj->is_constantPoolCache(), "should be constant pool"); |
165 return constantPoolCacheOop(obj)->is_conc_safe(); |
165 return constantPoolCacheOop(obj)->is_conc_safe(); |
166 } |
166 } |
167 |
167 |
168 #ifndef SERIALGC |
168 #ifndef SERIALGC |
169 void constantPoolCacheKlass::oop_copy_contents(PSPromotionManager* pm, |
|
170 oop obj) { |
|
171 assert(obj->is_constantPoolCache(), "should be constant pool"); |
|
172 if (EnableInvokeDynamic) { |
|
173 constantPoolCacheOop cache = (constantPoolCacheOop)obj; |
|
174 // during a scavenge, it is safe to inspect my pool, since it is perm |
|
175 constantPoolOop pool = cache->constant_pool(); |
|
176 assert(pool->is_constantPool(), "should be constant pool"); |
|
177 if (pool->has_invokedynamic()) { |
|
178 for (int i = 0; i < cache->length(); i++) { |
|
179 ConstantPoolCacheEntry* e = cache->entry_at(i); |
|
180 oop* p = (oop*)&e->_f1; |
|
181 if (e->is_secondary_entry()) { |
|
182 if (PSScavenge::should_scavenge(p)) |
|
183 pm->claim_or_forward_breadth(p); |
|
184 assert(!(e->is_vfinal() && PSScavenge::should_scavenge((oop*)&e->_f2)), |
|
185 "no live oops here"); |
|
186 } |
|
187 } |
|
188 } |
|
189 } |
|
190 } |
|
191 |
|
192 void constantPoolCacheKlass::oop_push_contents(PSPromotionManager* pm, |
169 void constantPoolCacheKlass::oop_push_contents(PSPromotionManager* pm, |
193 oop obj) { |
170 oop obj) { |
194 assert(obj->is_constantPoolCache(), "should be constant pool"); |
171 assert(obj->is_constantPoolCache(), "should be constant pool"); |
195 if (EnableInvokeDynamic) { |
172 if (EnableInvokeDynamic) { |
196 constantPoolCacheOop cache = (constantPoolCacheOop)obj; |
173 constantPoolCacheOop cache = (constantPoolCacheOop)obj; |