hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp
Print this page
rev 611 : Merge
*** 1,10 ****
#ifdef USE_PRAGMA_IDENT_HDR
#pragma ident "@(#)compactibleFreeListSpace.hpp 1.91 07/05/05 17:05:45 JVM"
#endif
/*
! * Copyright 2001-2006 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
--- 1,10 ----
#ifdef USE_PRAGMA_IDENT_HDR
#pragma ident "@(#)compactibleFreeListSpace.hpp 1.91 07/05/05 17:05:45 JVM"
#endif
/*
! * Copyright 2001-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 419,429 ****
// Return the free chunk at the end of the space. If no such
// chunk exists, return NULL.
FreeChunk* find_chunk_at_end();
! bool adaptive_freelists() { return _adaptive_freelists; }
void set_collector(CMSCollector* collector) { _collector = collector; }
// Support for parallelization of rescan and marking
const size_t rescan_task_size() const { return _rescan_task_size; }
--- 419,429 ----
// Return the free chunk at the end of the space. If no such
// chunk exists, return NULL.
FreeChunk* find_chunk_at_end();
! bool adaptive_freelists() const { return _adaptive_freelists; }
void set_collector(CMSCollector* collector) { _collector = collector; }
// Support for parallelization of rescan and marking
const size_t rescan_task_size() const { return _rescan_task_size; }
*** 503,513 ****
CardTableModRefBS::PrecisionStyle precision,
HeapWord* boundary);
void blk_iterate(BlkClosure* cl);
void blk_iterate_careful(BlkClosureCareful* cl);
! HeapWord* block_start(const void* p) const;
HeapWord* block_start_careful(const void* p) const;
size_t block_size(const HeapWord* p) const;
size_t block_size_no_stall(HeapWord* p, const CMSCollector* c) const;
bool block_is_obj(const HeapWord* p) const;
bool obj_is_alive(const HeapWord* p) const;
--- 503,513 ----
CardTableModRefBS::PrecisionStyle precision,
HeapWord* boundary);
void blk_iterate(BlkClosure* cl);
void blk_iterate_careful(BlkClosureCareful* cl);
! HeapWord* block_start_const(const void* p) const;
HeapWord* block_start_careful(const void* p) const;
size_t block_size(const HeapWord* p) const;
size_t block_size_no_stall(HeapWord* p, const CMSCollector* c) const;
bool block_is_obj(const HeapWord* p) const;
bool obj_is_alive(const HeapWord* p) const;
*** 541,551 ****
// Allocation support
HeapWord* allocate(size_t size);
HeapWord* par_allocate(size_t size);
! oop promote(oop obj, size_t obj_size, oop* ref);
void gc_prologue();
void gc_epilogue();
// This call is used by a containing CMS generation / collector
// to inform the CFLS space that a sweep has been completed
--- 541,551 ----
// Allocation support
HeapWord* allocate(size_t size);
HeapWord* par_allocate(size_t size);
! oop promote(oop obj, size_t obj_size);
void gc_prologue();
void gc_epilogue();
// This call is used by a containing CMS generation / collector
// to inform the CFLS space that a sweep has been completed
*** 567,577 ****
size_t expansionSpaceRequired(size_t obj_size) const;
FreeChunk* allocateScratch(size_t size);
// returns true if either the small or large linear allocation buffer is empty.
! bool linearAllocationWouldFail();
// Adjust the chunk for the minimum size. This version is called in
// most cases in CompactibleFreeListSpace methods.
inline static size_t adjustObjectSize(size_t size) {
return (size_t) align_object_size(MAX2(size, (size_t)MinChunkSize));
--- 567,577 ----
size_t expansionSpaceRequired(size_t obj_size) const;
FreeChunk* allocateScratch(size_t size);
// returns true if either the small or large linear allocation buffer is empty.
! bool linearAllocationWouldFail() const;
// Adjust the chunk for the minimum size. This version is called in
// most cases in CompactibleFreeListSpace methods.
inline static size_t adjustObjectSize(size_t size) {
return (size_t) align_object_size(MAX2(size, (size_t)MinChunkSize));
*** 586,595 ****
--- 586,598 ----
virtual size_t minimum_free_block_size() const { return MinChunkSize; }
void removeFreeChunkFromFreeLists(FreeChunk* chunk);
void addChunkAndRepairOffsetTable(HeapWord* chunk, size_t size,
bool coalesced);
+ // Support for decisions regarding concurrent collection policy
+ bool should_concurrent_collect() const;
+
// Support for compaction
void prepare_for_compaction(CompactPoint* cp);
void adjust_pointers();
void compact();
// reset the space to reflect the fact that a compaction of the
*** 623,633 ****
// coalescing of smaller chucks, etc. The counts in the
// census is used to make decisions on splitting and
// coalescing of chunks during the sweep of garbage.
// Print the statistics for the free lists.
! void printFLCensus(int sweepCt) const;
// Statistics functions
// Initialize census for lists before the sweep.
void beginSweepFLCensus(float sweep_current,
float sweep_estimate);
--- 626,636 ----
// coalescing of smaller chucks, etc. The counts in the
// census is used to make decisions on splitting and
// coalescing of chunks during the sweep of garbage.
// Print the statistics for the free lists.
! void printFLCensus(size_t sweep_count) const;
// Statistics functions
// Initialize census for lists before the sweep.
void beginSweepFLCensus(float sweep_current,
float sweep_estimate);
*** 636,651 ****
// Set the hint for each of the free lists.
void setFLHints();
// Clear the census for each of the free lists.
void clearFLCensus();
// Perform functions for the census after the end of the sweep.
! void endSweepFLCensus(int sweepCt);
// Return true if the count of free chunks is greater
// than the desired number of free chunks.
bool coalOverPopulated(size_t size);
-
// Record (for each size):
//
// split-births = #chunks added due to splits in (prev-sweep-end,
// this-sweep-start)
// split-deaths = #chunks removed for splits in (prev-sweep-end,
--- 639,653 ----
// Set the hint for each of the free lists.
void setFLHints();
// Clear the census for each of the free lists.
void clearFLCensus();
// Perform functions for the census after the end of the sweep.
! void endSweepFLCensus(size_t sweep_count);
// Return true if the count of free chunks is greater
// than the desired number of free chunks.
bool coalOverPopulated(size_t size);
// Record (for each size):
//
// split-births = #chunks added due to splits in (prev-sweep-end,
// this-sweep-start)
// split-deaths = #chunks removed for splits in (prev-sweep-end,