80 } |
80 } |
81 |
81 |
82 // Attach GC data to nmethod |
82 // Attach GC data to nmethod |
83 ZNMethodData* data = gc_data(nm); |
83 ZNMethodData* data = gc_data(nm); |
84 if (data == NULL) { |
84 if (data == NULL) { |
85 data = ZNMethodData::create(nm); |
85 data = new ZNMethodData(); |
86 set_gc_data(nm, data); |
86 set_gc_data(nm, data); |
87 } |
87 } |
88 |
88 |
89 // Attach oops in GC data |
89 // Attach oops in GC data |
90 ZNMethodDataOops* const new_oops = ZNMethodDataOops::create(immediate_oops, non_immediate_oops); |
90 ZNMethodDataOops* const new_oops = ZNMethodDataOops::create(immediate_oops, non_immediate_oops); |
91 ZNMethodDataOops* const old_oops = data->swap_oops(new_oops); |
91 ZNMethodDataOops* const old_oops = data->swap_oops(new_oops); |
92 ZNMethodDataOops::destroy(old_oops); |
92 ZNMethodDataOops::destroy(old_oops); |
93 } |
93 } |
94 |
94 |
95 void ZNMethod::detach_gc_data(nmethod* nm) { |
|
96 // Destroy GC data |
|
97 ZNMethodData::destroy(gc_data(nm)); |
|
98 set_gc_data(nm, NULL); |
|
99 } |
|
100 |
|
101 ZReentrantLock* ZNMethod::lock_for_nmethod(nmethod* nm) { |
95 ZReentrantLock* ZNMethod::lock_for_nmethod(nmethod* nm) { |
102 ZNMethodData* const data = gc_data(nm); |
96 return gc_data(nm)->lock(); |
103 if (data == NULL) { |
|
104 return NULL; |
|
105 } |
|
106 return data->lock(); |
|
107 } |
97 } |
108 |
98 |
109 void ZNMethod::log_register(const nmethod* nm) { |
99 void ZNMethod::log_register(const nmethod* nm) { |
110 LogTarget(Trace, gc, nmethod) log; |
100 LogTarget(Trace, gc, nmethod) log; |
111 if (!log.is_enabled()) { |
101 if (!log.is_enabled()) { |