これらは, 「スタック」として働くユーティリティ・クラス.
(<= ちなみに, 現状では GC 関連の処理からしか使われていないように見えるが... #TODO)
内部的には, 必要に応じてメモリ領域を追加し, リスト状につないで管理している.
以下は利用にあたっての注意点等:
((cite: hotspot/src/share/vm/utilities/stack.hpp))
// Class Stack (below) grows and shrinks by linking together "segments" which
// are allocated on demand. Segments are arrays of the element type (E) plus an
// extra pointer-sized field to store the segment link. Recently emptied
// segments are kept in a cache and reused.
//
// Notes/caveats:
//
// The size of an element must either evenly divide the size of a pointer or be
// a multiple of the size of a pointer.
//
// Destructors are not called for elements popped off the stack, so element
// types which rely on destructors for things like reference counting will not
// work properly.
//
// Class Stack allocates segments from the C heap. However, two protected
// virtual methods are used to alloc/free memory which subclasses can override:
//
// virtual void* alloc(size_t bytes);
// virtual void free(void* addr, size_t bytes);
//
// The alloc() method must return storage aligned for any use. The
// implementation in class Stack assumes that alloc() will terminate the process
// if the allocation fails.
スタックとして働くクラスの基底クラス.
((cite: hotspot/src/share/vm/utilities/stack.hpp))
// StackBase holds common data/methods that don't depend on the element type,
// factored out to reduce template code duplication.
class StackBase
なお, このクラス自体は abstract class であり, 実際に使われるのはサブクラス.
See: here for details
StackBase クラスの具象サブクラス.
いわゆる「スタック」を表すクラス. なお要素の型は template でパラメタライズされている.
((cite: hotspot/src/share/vm/utilities/stack.hpp))
template <class E>
class Stack: public StackBase
各種 GC 処理中で(のみ)使用されている. (#TODO)
See: here for details
特殊な Stack クラス.
ResourceObj クラスとの多重継承になっている.
(ResourceObj なので一時的に使いたい場合用??)
((cite: hotspot/src/share/vm/utilities/stack.hpp))
template <class E> class ResourceStack: public Stack<E>, public ResourceObj
?? (このクラスは使用箇所が見当たらない...)
See: here for details
Stack オブジェクト内の要素をたどるためのイテレータクラス(StackObjクラス).
((cite: hotspot/src/share/vm/utilities/stack.hpp))
template <class E>
class StackIterator: public StackObj
MarkSweep::adjust_marks() 内で(のみ)使用されている.
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.