169 return false; 170 } 171 172 uint ZHeap::nconcurrent_worker_threads() const { 173 return _workers.nconcurrent(); 174 } 175 176 uint ZHeap::nconcurrent_no_boost_worker_threads() const { 177 return _workers.nconcurrent_no_boost(); 178 } 179 180 void ZHeap::set_boost_worker_threads(bool boost) { 181 _workers.set_boost(boost); 182 } 183 184 void ZHeap::threads_do(ThreadClosure* tc) const { 185 _page_allocator.threads_do(tc); 186 _workers.threads_do(tc); 187 } 188 189 // Adapter class from AbstractGangTask to Ztask 190 class ZAbstractGangTaskAdapter : public ZTask { 191 private: 192 AbstractGangTask* _task; 193 194 public: 195 ZAbstractGangTaskAdapter(AbstractGangTask* task) : 196 ZTask(task->name()), 197 _task(task) { } 198 199 virtual void work() { 200 _task->work(ZThread::worker_id()); 201 } 202 }; 203 204 void ZHeap::run_task(AbstractGangTask* task) { 205 ZAbstractGangTaskAdapter ztask(task); 206 _workers.run_parallel(&ztask); 207 } 208 209 void ZHeap::out_of_memory() { 210 ResourceMark rm; 211 212 ZStatInc(ZCounterOutOfMemory); 213 log_info(gc)("Out Of Memory (%s)", Thread::current()->name()); 214 } 215 216 ZPage* ZHeap::alloc_page(uint8_t type, size_t size, ZAllocationFlags flags) { 217 ZPage* const page = _page_allocator.alloc_page(type, size, flags); 218 if (page != NULL) { 219 // Insert page table entry 220 _page_table.insert(page); 221 } 222 223 return page; 224 } 225 226 void ZHeap::undo_alloc_page(ZPage* page) { 227 assert(page->is_allocating(), "Invalid page state"); 228 | 169 return false; 170 } 171 172 uint ZHeap::nconcurrent_worker_threads() const { 173 return _workers.nconcurrent(); 174 } 175 176 uint ZHeap::nconcurrent_no_boost_worker_threads() const { 177 return _workers.nconcurrent_no_boost(); 178 } 179 180 void ZHeap::set_boost_worker_threads(bool boost) { 181 _workers.set_boost(boost); 182 } 183 184 void ZHeap::threads_do(ThreadClosure* tc) const { 185 _page_allocator.threads_do(tc); 186 _workers.threads_do(tc); 187 } 188 189 void ZHeap::out_of_memory() { 190 ResourceMark rm; 191 192 ZStatInc(ZCounterOutOfMemory); 193 log_info(gc)("Out Of Memory (%s)", Thread::current()->name()); 194 } 195 196 ZPage* ZHeap::alloc_page(uint8_t type, size_t size, ZAllocationFlags flags) { 197 ZPage* const page = _page_allocator.alloc_page(type, size, flags); 198 if (page != NULL) { 199 // Insert page table entry 200 _page_table.insert(page); 201 } 202 203 return page; 204 } 205 206 void ZHeap::undo_alloc_page(ZPage* page) { 207 assert(page->is_allocating(), "Invalid page state"); 208 |