388 // iteration completed.
389 HeapWord* object_iterate_careful_m(MemRegion mr,
390 ObjectClosureCareful* cl);
391
392 // Override: provides a DCTO_CL specific to this kind of space.
393 DirtyCardToOopClosure* new_dcto_cl(ExtendedOopClosure* cl,
394 CardTableModRefBS::PrecisionStyle precision,
395 HeapWord* boundary);
396
397 void blk_iterate(BlkClosure* cl);
398 void blk_iterate_careful(BlkClosureCareful* cl);
399 HeapWord* block_start_const(const void* p) const;
400 HeapWord* block_start_careful(const void* p) const;
401 size_t block_size(const HeapWord* p) const;
402 size_t block_size_no_stall(HeapWord* p, const CMSCollector* c) const;
403 bool block_is_obj(const HeapWord* p) const;
404 bool obj_is_alive(const HeapWord* p) const;
405 size_t block_size_nopar(const HeapWord* p) const;
406 bool block_is_obj_nopar(const HeapWord* p) const;
407
408 // Iteration support for promotion
409 void save_marks();
410 bool no_allocs_since_save_marks();
411
412 // Iteration support for sweeping
413 void save_sweep_limit() {
414 _sweep_limit = BlockOffsetArrayUseUnallocatedBlock ?
415 unallocated_block() : end();
416 if (CMSTraceSweeper) {
417 gclog_or_tty->print_cr(">>>>> Saving sweep limit " PTR_FORMAT
418 " for space [" PTR_FORMAT "," PTR_FORMAT ") <<<<<<",
419 p2i(_sweep_limit), p2i(bottom()), p2i(end()));
420 }
421 }
422 NOT_PRODUCT(
423 void clear_sweep_limit() { _sweep_limit = NULL; }
424 )
425 HeapWord* sweep_limit() { return _sweep_limit; }
426
427 // Apply "blk->do_oop" to the addresses of all reference fields in objects
|
388 // iteration completed.
389 HeapWord* object_iterate_careful_m(MemRegion mr,
390 ObjectClosureCareful* cl);
391
392 // Override: provides a DCTO_CL specific to this kind of space.
393 DirtyCardToOopClosure* new_dcto_cl(ExtendedOopClosure* cl,
394 CardTableModRefBS::PrecisionStyle precision,
395 HeapWord* boundary);
396
397 void blk_iterate(BlkClosure* cl);
398 void blk_iterate_careful(BlkClosureCareful* cl);
399 HeapWord* block_start_const(const void* p) const;
400 HeapWord* block_start_careful(const void* p) const;
401 size_t block_size(const HeapWord* p) const;
402 size_t block_size_no_stall(HeapWord* p, const CMSCollector* c) const;
403 bool block_is_obj(const HeapWord* p) const;
404 bool obj_is_alive(const HeapWord* p) const;
405 size_t block_size_nopar(const HeapWord* p) const;
406 bool block_is_obj_nopar(const HeapWord* p) const;
407
408 // Functions for scan_and_{forward,adjust_pointers,compact} support.
409 inline HeapWord* scan_limit() const {
410 return end();
411 }
412
413 inline bool scanned_block_is_obj(const HeapWord* addr) const {
414 return CompactibleFreeListSpace::block_is_obj(addr); // Avoid virtual call
415 }
416
417 inline size_t scanned_block_size(const HeapWord* addr) const {
418 return CompactibleFreeListSpace::block_size(addr); // Avoid virtual call
419 }
420
421 inline size_t adjust_obj_size(size_t size) const {
422 return adjustObjectSize(size);
423 }
424
425 inline size_t obj_size(const HeapWord* addr) const {
426 return adjustObjectSize(oop(addr)->size());
427 }
428
429 // Iteration support for promotion
430 void save_marks();
431 bool no_allocs_since_save_marks();
432
433 // Iteration support for sweeping
434 void save_sweep_limit() {
435 _sweep_limit = BlockOffsetArrayUseUnallocatedBlock ?
436 unallocated_block() : end();
437 if (CMSTraceSweeper) {
438 gclog_or_tty->print_cr(">>>>> Saving sweep limit " PTR_FORMAT
439 " for space [" PTR_FORMAT "," PTR_FORMAT ") <<<<<<",
440 p2i(_sweep_limit), p2i(bottom()), p2i(end()));
441 }
442 }
443 NOT_PRODUCT(
444 void clear_sweep_limit() { _sweep_limit = NULL; }
445 )
446 HeapWord* sweep_limit() { return _sweep_limit; }
447
448 // Apply "blk->do_oop" to the addresses of all reference fields in objects
|