これらは, メモリ管理用の補助クラス. より具体的に言うと, 仮想メモリ空間の制御(領域の予約,領域のコミット)を行うためのユーティリティ・クラス (要するに mmap() や VirtualAlloc() のラッパークラス) (See: here for details).
指定したサイズの連続領域を仮想メモリ空間上に予約(reserve)するためのユーティリティ・クラス(ValueObjクラス).
(なお, ここでの「予約(reserve)」は 「仮想空間は確保したがアクセスすると segmentation fault になるかもしれない状態」を意味する. 領域のコミット処理は VirtualSpace が行う. (まぁ Linux とかならあまり関係ないけど...))
((cite: hotspot/src/share/vm/runtime/virtualspace.hpp))
// ReservedSpace is a data structure for reserving a contiguous address range.
class ReservedSpace VALUE_OBJ_CLASS_SPEC {
(なお, large page を使いたい場合や特定のアドレスから開始させたい場合にはそれも指定できる. ただし成功するとは限らないが...)
(コンストラクタ内でメモリ空間の予約処理が行われる. なお, 生成した ReservedSpace オブジェクトの ReservedSpace.is_reserved() が false を返したら予約が失敗したことを意味する)
ReservedSpace クラスの各種のメソッドで, 予約できたアドレスに関する情報が取得できる (ReservedSpace::base(), ReservedSpace::size()).
また ReservedSpace::first_part() メソッド及び ReservedSpace::last_part() メソッドで, 「予約したアドレス範囲中の前方から N バイトの領域」/「〃 前方 N バイトを除いた残りの領域」を表す ReservedSpace オブジェクトを生成することもできる.
以下が, メモリ空間予約のために局所変数が生成されている箇所の一覧.
なぜか永続的に存在しているインスタンスも存在する.
See: here for details
特殊な ReservedSpace クラス. このクラスは Java ヒープ用のメモリ領域の予約に特化している.
(といってもあまり違いはなく UseCompressedOops 機能のための処理が入っている程度. 0 スタートの領域の予約を試みたり, 駄目だった場合は先頭ページにプロテクションを張ったりする) (See: here for details).
((cite: hotspot/src/share/vm/runtime/virtualspace.hpp))
// Class encapsulating behavior specific of memory space reserved for Java heap
class ReservedHeapSpace : public ReservedSpace {
以下の箇所で(のみ)使用されている.
処理としては, スーパークラスである ReservedSpace とほとんど同じ.
See: here for details
See: here for details
See: here for details
CodeHeap クラス内で使用される補助クラス.
特殊な ReservedSpace クラス. このクラスは CodeBlob 用のメモリ領域の予約に特化している (といってもあまり違いはなく, 実行属性が true になっている程度).
((cite: hotspot/src/share/vm/runtime/virtualspace.hpp))
// Class encapsulating behavior specific memory space for Code
class ReservedCodeSpace : public ReservedSpace {
CodeHeap::reserve() 内で(のみ)使用されている.
処理としては, スーパークラスである ReservedSpace とほとんど同じ.
See: here for details
See: here for details
仮想メモリ空間上の指定した連続領域をコミット(commit)するためのユーティリティ・クラス(ValueObjクラス).
(なお, コミット対象のメモリ空間の予約は ReservedSpace で行う)
((cite: hotspot/src/share/vm/runtime/virtualspace.hpp))
// VirtualSpace is data structure for committing a previously reserved address range in smaller chunks.
class VirtualSpace VALUE_OBJ_CLASS_SPEC {
あらかじめ, コミットしたい領域を示す ReservedSpace オブジェクトを作っておく.
VirtualSpace オブジェクトを生成する
(現状では, 局所変数としての生成はなく, 基本的に何らかのクラスのフィールドとして(のみ)生成されている)
(VirtualSpace オブジェクトが初期化されるとともに, 対応するアドレス範囲がコミットされる)
(また VirtualSpace::expand_by() や VirtualSpace::shrink_by() で後から領域を伸ばす(縮める), といったこともできる)
以下の箇所に(のみ)格納されている.
(上記のフィールドは全て, ポインタ型ではなく実体なので, 格納しているオブジェクトの生成時に一緒に生成される)
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.