hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.cpp
// The first argument r is the heap region at which iteration begins.
// This operation runs fastest when r is NULL, or the heap region for
// which a HeapRegionClosure most recently returned true, or the
// heap region immediately to its right in the sequence. In all
// other cases a linear search is required to find the index of r.
void HeapRegionSeq::iterate_from(HeapRegion* r, HeapRegionClosure* blk) {
{- -------------------------------------------
(1)
---------------------------------------- -}
// :::: FIXME ::::
// Static cache value is bad, especially when we start doing parallel
// remembered set update. For now just don't cache anything (the
// code in the def'd out blocks).
{- -------------------------------------------
(1) (??)
---------------------------------------- -}
#if 0
static int cached_j = 0;
#endif
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
int len = _regions.length();
int j = 0;
{- -------------------------------------------
(1) (??)
(色々コメントアウトされすぎて何もしていないような... #TODO
r 引数に対応する index を見つけたいんだと思うが...)
---------------------------------------- -}
// Find the index of r.
if (r != NULL) {
#if 0
assert(cached_j >= 0, "Invariant.");
if ((cached_j < len) && (r == _regions.at(cached_j))) {
j = cached_j;
} else if ((cached_j + 1 < len) && (r == _regions.at(cached_j + 1))) {
j = cached_j + 1;
} else {
j = find(r);
#endif
if (j < 0) {
j = 0;
}
#if 0
}
#endif
}
{- -------------------------------------------
(1) 「r 引数に対応する index (= j)」よりも大きな index を持つ全ての HeapRegion に対して,
blk 引数で与えられた HeapRegionClosure オブジェクトを適用する.
(もし途中で返値として true が返された場合は, HeapRegionClosure::incomplete() を呼んだ後, その時点でリターン)
---------------------------------------- -}
int i;
for (i = j; i < len; i += 1) {
int res = blk->doHeapRegion(_regions.at(i));
if (res) {
#if 0
cached_j = i;
#endif
blk->incomplete();
return;
}
}
{- -------------------------------------------
(1) 「r 引数に対応する index (= j)」よりも小さな index を持つ全ての HeapRegion に対して,
blk 引数で与えられた HeapRegionClosure オブジェクトを適用する.
(もし途中で返値として true が返された場合は, HeapRegionClosure::incomplete() を呼んだ後, その時点でリターン)
---------------------------------------- -}
for (i = 0; i < j; i += 1) {
int res = blk->doHeapRegion(_regions.at(i));
if (res) {
#if 0
cached_j = i;
#endif
blk->incomplete();
return;
}
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.