2153 NMethodOopInitializer init;
2154 nm->oops_do(&init);
2155 nm->fix_oop_relocations();
2156 }
2157
2158 void ShenandoahHeap::unregister_nmethod(nmethod* nm) {
2159 }
2160
2161 void ShenandoahHeap::pin_object(oop o) {
2162 heap_region_containing(o)->pin();
2163 }
2164
2165 void ShenandoahHeap::unpin_object(oop o) {
2166 heap_region_containing(o)->unpin();
2167 }
2168
2169
2170 GCTimer* ShenandoahHeap::gc_timer() const {
2171 return _gc_timer;
2172 }
|
2153 NMethodOopInitializer init;
2154 nm->oops_do(&init);
2155 nm->fix_oop_relocations();
2156 }
2157
2158 void ShenandoahHeap::unregister_nmethod(nmethod* nm) {
2159 }
2160
2161 void ShenandoahHeap::pin_object(oop o) {
2162 heap_region_containing(o)->pin();
2163 }
2164
2165 void ShenandoahHeap::unpin_object(oop o) {
2166 heap_region_containing(o)->unpin();
2167 }
2168
2169
2170 GCTimer* ShenandoahHeap::gc_timer() const {
2171 return _gc_timer;
2172 }
2173
2174 class ShenandoahCountGarbageClosure : public ShenandoahHeapRegionClosure {
2175 private:
2176 size_t _garbage;
2177 public:
2178 ShenandoahCountGarbageClosure() : _garbage(0) {
2179 }
2180
2181 bool doHeapRegion(ShenandoahHeapRegion* r) {
2182 if (! r->is_humongous() && ! r->is_pinned() && ! r->in_collection_set()) {
2183 _garbage += r->garbage();
2184 }
2185 return false;
2186 }
2187
2188 size_t garbage() {
2189 return _garbage;
2190 }
2191 };
2192
2193 size_t ShenandoahHeap::garbage() {
2194 ShenandoahCountGarbageClosure cl;
2195 heap_region_iterate(&cl);
2196 return cl.garbage();
2197 }
|