これらは, メモリ管理用のユーティリティ・クラス (See: here for details).
メモリ管理用のユーティリティ・クラス. 仮想メモリ空間内の「連続したメモリ領域」を表す.
メモリ中の特定の範囲(連続領域)を表したい場面で汎用的に用いられている.
(なお, このオブジェクト自体はものすごく小さいので VALUE_OBJ クラスになっている)
((cite: hotspot/src/share/vm/memory/memRegion.hpp))
// A very simple data structure representing a contigous region
// region of address space.
// Note that MemRegions are passed by value, not by reference.
// The intent is that they remain very small and contain no
// objects.
class MemRegion VALUE_OBJ_CLASS_SPEC {
HotSpot 内の様々な箇所で使用されている. (#TODO)
内部には2つのフィールド(のみ)を保持する (領域の開始アドレスと領域長).
((cite: hotspot/src/share/vm/memory/memRegion.hpp))
HeapWord* _start;
size_t _word_size;
メソッドとしては, 指定のポインタが領域内に入っているかどうかを判定する contains() メソッドなどを備える.
((cite: hotspot/src/share/vm/memory/memRegion.hpp))
bool contains(const void* addr) const {
return addr >= (void*)_start && addr < (void*)end();
}
領域同士の集合演算を行うメソッド等も用意されている.
((cite: hotspot/src/share/vm/memory/memRegion.hpp))
MemRegion intersection(const MemRegion mr2) const;
// regions must overlap or be adjacent
MemRegion _union(const MemRegion mr2) const;
// minus will fail a guarantee if mr2 is interior to this,
// since there's no way to return 2 disjoint regions.
MemRegion minus(const MemRegion mr2) const;
See: here for details
MemRegion に対して何らかの処理を行う Closure クラスの基底クラス.
(なお, このクラスは Closure クラスのサブクラスではなく, StackObj のサブクラスになっている)
((cite: hotspot/src/share/vm/memory/memRegion.hpp))
// For iteration over MemRegion's.
class MemRegionClosure : public StackObj {
MemRegion を処理する do_MemRegion() メソッドを備えている.
なお, このクラス自体は abstract class であり, 実際に使われるのはサブクラス.
((cite: hotspot/src/share/vm/memory/memRegion.hpp))
virtual void do_MemRegion(MemRegion mr) = 0;
See: here for details
MemRegionClosure の類似品.
スタック上に確保される MemRegionClosure と異なり, こちらのクラスは ResourceArea 内に確保される.
((cite: hotspot/src/share/vm/memory/memRegion.hpp))
// A ResourceObj version of MemRegionClosure
class MemRegionClosureRO: public MemRegionClosure {
new が ResourceObj として確保するように変更されている (そして delete は何もしない). この点以外に MemRegionClosure との違いはない.
なお, このクラス自体は abstract class であり, 実際に使われるのはサブクラス.
((cite: hotspot/src/share/vm/memory/memRegion.hpp))
void* operator new(size_t size, ResourceObj::allocation_type type) {
return ResourceObj::operator new(size, type);
}
void* operator new(size_t size, Arena *arena) {
return ResourceObj::operator new(size, arena);
}
void* operator new(size_t size) {
return ResourceObj::operator new(size);
}
void operator delete(void* p) {} // nothing to do
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.