/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/
#include "precompiled.hpp"
#include "gc_implementation/parallelScavenge/parMarkBitMap.hpp"
#include "oops/oop.inline.hpp"
#include "utilities/bitMap.inline.hpp"
#include "services/memTracker.hpp"
#ifdef TARGET_OS_FAMILY_linux
# include "os_linux.inline.hpp"
#endif
#ifdef TARGET_OS_FAMILY_solaris
# include "os_solaris.inline.hpp"
#endif
#ifdef TARGET_OS_FAMILY_windows
# include "os_windows.inline.hpp"
#endif
#ifdef TARGET_OS_FAMILY_bsd
# include "os_bsd.inline.hpp"
#endif
bool
{
// The bits will be divided evenly between two bitmaps; each of them should be
// an integral number of words.
return true;
}
_region_start = 0;
_region_size = 0;
if (_virtual_space != NULL) {
delete _virtual_space;
// Release memory reserved in the space.
}
return false;
}
#ifdef ASSERT
extern size_t mark_bitmap_count;
extern size_t mark_bitmap_size;
#endif // #ifdef ASSERT
bool
{
return true;
}
return false;
}
{
// The bitmap routines require the right boundary to be word-aligned.
} else {
return bits_to_words(live_bits);
}
}
return bits_to_words(live_bits);
}
{
// The bitmap routines require the right boundary to be word-aligned.
}
return bits_to_words(live_bits);
}
{
// The bitmap routines require the right boundary to be word-aligned.
// The obj ends outside the range.
return incomplete;
}
if (status != incomplete) {
return status;
}
// Successfully processed the object; look for the next object.
}
return complete;
}
idx_t dead_range_end) const
{
// The bitmap routines require the right boundary to be word-aligned.
// The range starts with dead space. Look for the next object, then fill.
}
// The obj ends outside the range.
return incomplete;
}
if (status != incomplete) {
return status;
}
// Look for the start of the next object.
if (cur_beg > dead_space_beg) {
// Found dead space; compute the size and invoke the dead closure.
}
}
return complete;
}
#ifndef PRODUCT
{
}
#endif // #ifndef PRODUCT
#ifdef ASSERT
{
assert(*p == 0, "bitmap not clear");
}
}
#endif // #ifdef ASSERT