< prev index next >

src/hotspot/share/gc/z/zHeap.cpp

Print this page

        

*** 23,32 **** --- 23,33 ---- #include "precompiled.hpp" #include "gc/shared/gcArguments.hpp" #include "gc/shared/oopStorage.hpp" #include "gc/z/zAddress.hpp" + #include "gc/z/zArray.inline.hpp" #include "gc/z/zGlobals.hpp" #include "gc/z/zHeap.inline.hpp" #include "gc/z/zHeapIterator.hpp" #include "gc/z/zList.inline.hpp" #include "gc/z/zLock.inline.hpp"
*** 384,393 **** --- 385,410 ---- // during the resurrection block window, since such referents // are only Finalizable marked. _reference_processor.enqueue_references(); } + class ZHeapReclaimPagesTask : public ZTask { + private: + ZArrayParallelIterator<ZPage*> _iter; + + public: + ZHeapReclaimPagesTask(ZArray<ZPage*>* pages) : + ZTask("ZHeapReclaimPagesTask"), + _iter(pages) {} + + virtual void work() { + for (ZPage* page; _iter.next(&page);) { + ZHeap::heap()->free_page(page, true /* reclaimed */); + } + } + }; + void ZHeap::select_relocation_set() { // Do not allow pages to be deleted _page_allocator.enable_deferred_delete(); // Register relocatable pages with selector
*** 401,421 **** if (page->is_marked()) { // Register live page selector.register_live_page(page); } else { ! // Register garbage page ! selector.register_garbage_page(page); ! ! // Reclaim page immediately ! free_page(page, true /* reclaimed */); } } // Allow pages to be deleted _page_allocator.disable_deferred_delete(); // Select pages to relocate selector.select(&_relocation_set); // Setup forwarding table ZRelocationSetIterator rs_iter(&_relocation_set); --- 418,439 ---- if (page->is_marked()) { // Register live page selector.register_live_page(page); } else { ! // Register reclaimable page ! selector.register_reclaimable_page(page); } } // Allow pages to be deleted _page_allocator.disable_deferred_delete(); + // Free reclaimable page + ZHeapReclaimPagesTask task(selector.reclaimable()); + _workers.run_concurrent(&task); + // Select pages to relocate selector.select(&_relocation_set); // Setup forwarding table ZRelocationSetIterator rs_iter(&_relocation_set);
< prev index next >