< prev index next >

src/hotspot/share/ci/ciMethodData.cpp

Concurrent class unloading

169   _current_mileage = MethodData::mileage_of(mdo->method());                                                                          
170   _invocation_counter = mdo->invocation_count();                                                                                     
171   _backedge_counter = mdo->backedge_count();                                                                                         
172   _state = mdo->is_mature()? mature_state: immature_state;                                                                           
173 
174   _eflags = mdo->eflags();                                                                                                           
175   _arg_local = mdo->arg_local();                                                                                                     
176   _arg_stack = mdo->arg_stack();                                                                                                     
177   _arg_returned  = mdo->arg_returned();                                                                                              
178 #ifndef PRODUCT                                                                                                                      
179   if (ReplayCompiles) {                                                                                                              
180     ciReplay::initialize(this);                                                                                                      
181   }                                                                                                                                  
182 #endif                                                                                                                               
183 }                                                                                                                                    
184 
185 void ciReceiverTypeData::translate_receiver_data_from(const ProfileData* data) {                                                     
186   for (uint row = 0; row < row_limit(); row++) {                                                                                     
187     Klass* k = data->as_ReceiverTypeData()->receiver(row);                                                                           
188     if (k != NULL) {                                                                                                                 
189       ciKlass* klass = CURRENT_ENV->get_klass(k);                                                                                    
190       set_receiver(row, klass);                                                                                                      
                                                                                                                                     
                                                                                                                                     
                                                                                                                                     
                                                                                                                                     
                                                                                                                                     
191     }                                                                                                                                
192   }                                                                                                                                  
193 }                                                                                                                                    
194 
195 
196 void ciTypeStackSlotEntries::translate_type_data_from(const TypeStackSlotEntries* entries) {                                         
197   for (int i = 0; i < number_of_entries(); i++) {                                                                                    
198     intptr_t k = entries->type(i);                                                                                                   
199     TypeStackSlotEntries::set_type(i, translate_klass(k));                                                                           
200   }                                                                                                                                  
201 }                                                                                                                                    
202 
203 void ciReturnTypeEntry::translate_type_data_from(const ReturnTypeEntry* ret) {                                                       
204   intptr_t k = ret->type();                                                                                                          
205   set_type(translate_klass(k));                                                                                                      
206 }                                                                                                                                    
207 
208 void ciSpeculativeTrapData::translate_from(const ProfileData* data) {                                                                
209   Method* m = data->as_SpeculativeTrapData()->method();                                                                              

169   _current_mileage = MethodData::mileage_of(mdo->method());
170   _invocation_counter = mdo->invocation_count();
171   _backedge_counter = mdo->backedge_count();
172   _state = mdo->is_mature()? mature_state: immature_state;
173 
174   _eflags = mdo->eflags();
175   _arg_local = mdo->arg_local();
176   _arg_stack = mdo->arg_stack();
177   _arg_returned  = mdo->arg_returned();
178 #ifndef PRODUCT
179   if (ReplayCompiles) {
180     ciReplay::initialize(this);
181   }
182 #endif
183 }
184 
185 void ciReceiverTypeData::translate_receiver_data_from(const ProfileData* data) {
186   for (uint row = 0; row < row_limit(); row++) {
187     Klass* k = data->as_ReceiverTypeData()->receiver(row);
188     if (k != NULL) {
189       if (k->is_loader_alive()) {
190         ciKlass* klass = CURRENT_ENV->get_klass(k);
191         set_receiver(row, klass);
192       } else {
193         // With concurrent class unloading, the MDO could have stale metadata; override it
194         clear_row(row);
195       }
196     }
197   }
198 }
199 
200 
201 void ciTypeStackSlotEntries::translate_type_data_from(const TypeStackSlotEntries* entries) {
202   for (int i = 0; i < number_of_entries(); i++) {
203     intptr_t k = entries->type(i);
204     TypeStackSlotEntries::set_type(i, translate_klass(k));
205   }
206 }
207 
208 void ciReturnTypeEntry::translate_type_data_from(const ReturnTypeEntry* ret) {
209   intptr_t k = ret->type();
210   set_type(translate_klass(k));
211 }
212 
213 void ciSpeculativeTrapData::translate_from(const ProfileData* data) {
214   Method* m = data->as_SpeculativeTrapData()->method();
< prev index next >