< prev index next >
src/share/vm/gc/g1/heapRegionType.hpp
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2014, 2016, Oracle and/or its affiliates. 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,7 ----
/*
! * Copyright (c) 2014, 2017, Oracle and/or its affiliates. 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.
*** 41,64 ****
//
// If there's need to increase the number of minor types in the
// future, we'll have to increase the size of the latter and hence
// decrease the size of the former.
//
! // 0000 0 [ 0] Free
//
! // 0001 0 [ 2] Young Mask
! // 0001 0 [ 2] Eden
! // 0001 1 [ 3] Survivor
//
- // 0010 0 [ 4] Humongous Mask
- // 0100 0 [ 8] Pinned Mask
- // 0110 0 [12] Starts Humongous
- // 0110 1 [13] Continues Humongous
- //
- // 1000 0 [16] Old Mask
- //
- // 1100 0 [24] Archive
typedef enum {
FreeTag = 0,
YoungMask = 2,
EdenTag = YoungMask,
--- 41,67 ----
//
// If there's need to increase the number of minor types in the
// future, we'll have to increase the size of the latter and hence
// decrease the size of the former.
//
! // 00000 0 [ 0] Free
//
! // 00001 0 [ 2] Young Mask
! // 00001 0 [ 2] Eden
! // 00001 1 [ 3] Survivor
! //
! // 00010 0 [ 4] Humongous Mask
! // 00100 0 [ 8] Pinned Mask
! // 00110 0 [12] Starts Humongous
! // 00110 1 [13] Continues Humongous
! //
! // 01000 0 [16] Old Mask
! //
! // 10000 0 [32] Archive Mask
! // 11100 0 [56] Open Archive
! // 11100 1 [57] Closed Archive
//
typedef enum {
FreeTag = 0,
YoungMask = 2,
EdenTag = YoungMask,
*** 70,80 ****
ContinuesHumongousTag = HumongousMask | PinnedMask + 1,
OldMask = 16,
OldTag = OldMask,
! ArchiveTag = PinnedMask | OldMask
} Tag;
volatile Tag _tag;
static bool is_valid(Tag tag);
--- 73,94 ----
ContinuesHumongousTag = HumongousMask | PinnedMask + 1,
OldMask = 16,
OldTag = OldMask,
! // Archive regions are regions with immutable content (i.e. not reclaimed, and
! // not allocated into during regular operation). They differ in the kind of references
! // allowed for the contained objects:
! // - Closed archive regions form a separate self-contained (closed) object graph
! // within the set of all of these regions. No references outside of closed
! // archive regions are allowed.
! // - Open archive regions have no restrictions on the references of their objects.
! // Objects within these regions are allowed to have references to objects
! // contained in any other kind of regions.
! ArchiveMask = 32,
! OpenArchiveTag = ArchiveMask | PinnedMask | OldMask,
! ClosedArchiveTag = ArchiveMask | PinnedMask | OldMask + 1
} Tag;
volatile Tag _tag;
static bool is_valid(Tag tag);
*** 113,123 ****
bool is_humongous() const { return (get() & HumongousMask) != 0; }
bool is_starts_humongous() const { return get() == StartsHumongousTag; }
bool is_continues_humongous() const { return get() == ContinuesHumongousTag; }
! bool is_archive() const { return get() == ArchiveTag; }
// is_old regions may or may not also be pinned
bool is_old() const { return (get() & OldMask) != 0; }
bool is_old_or_humongous() const { return (get() & (OldMask | HumongousMask)) != 0; }
--- 127,139 ----
bool is_humongous() const { return (get() & HumongousMask) != 0; }
bool is_starts_humongous() const { return get() == StartsHumongousTag; }
bool is_continues_humongous() const { return get() == ContinuesHumongousTag; }
! bool is_archive() const { return (get() & ArchiveMask) != 0; }
! bool is_open_archive() const { return get() == OpenArchiveTag; }
! bool is_closed_archive() const { return get() == ClosedArchiveTag; }
// is_old regions may or may not also be pinned
bool is_old() const { return (get() & OldMask) != 0; }
bool is_old_or_humongous() const { return (get() & (OldMask | HumongousMask)) != 0; }
*** 136,146 ****
void set_starts_humongous() { set_from(StartsHumongousTag, FreeTag); }
void set_continues_humongous() { set_from(ContinuesHumongousTag, FreeTag); }
void set_old() { set(OldTag); }
! void set_archive() { set_from(ArchiveTag, FreeTag); }
// Misc
const char* get_str() const;
const char* get_short_str() const;
--- 152,182 ----
void set_starts_humongous() { set_from(StartsHumongousTag, FreeTag); }
void set_continues_humongous() { set_from(ContinuesHumongousTag, FreeTag); }
void set_old() { set(OldTag); }
! // Change the current region type to be of an old region type if not already done so.
! // Returns whether the region type has been changed or not.
! bool relabel_as_old() {
! //assert(!is_free(), "Should not try to move Free region");
! assert(!is_humongous(), "Should not try to move Humongous region");
! if (is_old()) {
! return false;
! }
! if (is_eden()) {
! set_from(OldTag, EdenTag);
! return true;
! } else if (is_free()) {
! set_from(OldTag, FreeTag);
! return true;
! } else {
! set_from(OldTag, SurvTag);
! return true;
! }
! }
! void set_open_archive() { set_from(OpenArchiveTag, FreeTag); }
! void set_closed_archive() { set_from(ClosedArchiveTag, FreeTag); }
// Misc
const char* get_str() const;
const char* get_short_str() const;
< prev index next >