6.2 f90_gc
ガベージコレクタをより細かく制御するために“F90_GC
”と呼ば
れるモジュールが提供されています。
それには以下に記すような手続きが含まれています。
個々の手続きの記述において、KIND
が‘*’と表記されている引数はその
種別の任意の値を受け入れることができます。
他のKIND
表示にはF90_KIND
モジュールで規定されている名前付きパラ
メータが使用されています。しかしこれらの名前付きパラメータはF90_GC
から
エクスポートされていません。
SUBROUTINE ENABLE_INCREMENTAL_GC()増分的なガベージコレクションを有効にします。一旦有効にするとそれを無効にする ことはできません。 フルコレクションは“Full GC frequency”の設定によって規定される頻度に基 づき実行されます(
GET_FULL_GC_FREQUENCY
とSET_FULL_GC_FREQUENCY
を参照)。
LOGICAL(word) FUNCTION EXPAND_HEAP(N) INTEGER(*),INTENT(IN) :: Nこの関数はヒープ(heap)をN ブロック(1ブロックは4KB)だけ拡張しようと 試み、成功した場合に限り
.TRUE.
を応答として返します。
これはヒープ拡張に関する設定(GET_HEAP_EXPANSION
と
SET_HEAP_EXPANSION
)には影響されません。
ある種のシステムにおいては、OSがメモリの割付けを実際に使用するときにまで遅ら すため、成功したかのような偽りの応答が返されることがあります(実際にアクセス する段になってプログラムは異常終了させられます)。 従ってシステムの全仮想記憶を割付けようという試みにこの関数を使用すべきではあ りません。
SUBROUTINE GCOLLECT()手動でガベージコレクションを起動します。これはたとえ増分的コレクション (
ENABLE_INCREMENTAL_GC
参照)が有効になっている場合であってもフ
ルコレクションとなります。
これは“GC allowed”の設定(GET_GC_ALLOWED
と
SET_GC_ALLOWED
参照)によって影響されません。
SUBROUTINE GET_BYTES_SINCE_GC(NBYTES) INTEGER(int32 or int64),INTENT(OUT) :: NBYTES
最後のコレクション以降割付けられたバイト数を応答として返します。
SUBROUTINE GET_FREE_BYTES(NBYTES) INTEGER(int32 or int64),INTENT(OUT) :: NBYTES
ヒープ中における空きバイト数に関する控え目な見積もりを応答として返します。
SUBROUTINE GET_FULL_GC_FREQUENCY(FREQUENCY) INTEGER(int16 or int32 or int64),INTENT(OUT) :: FREQUENCY
増分的コレクションが有効な場合(ENABLE_INCREMENTAL_GC
参照)に、フル
コレクションとフルコレクションの間に実行される部分的コレクションの回数を
応答として返します。
手動コレクション(GCOLLECT
参照)の場合、あるいは増分的コレクションが
有効になっていない場合には、何の効果ももたらしません。
リリース5.2におけるデフォルト値は4です。
SUBROUTINE GET_GC_ALLOWED(ALLOWED) LOGICAL(*),INTENT(OUT) :: ALLOWED
“GC allowed”の設定を応答として返します。デフォルトの設定は.TRUE.
です。
SUBROUTINE GET_GC_VERBOSITY(VERBOSITY) INTEGER(*),INTENT(OUT) :: VERBOSITY“GC verbosity”レベルを応答として返します。値の範囲は0-100で、デフォルト のレベルは0です。 verbosity(饒舌さ)のレベルを上げるとガベージコレクション中に発行される情報 メッセージの数が増加して行きます。 リリース5.2において意味のあるverbosityレベルは0と10のみです。
SUBROUTINE GET_HEAP_EXPANSION(ALLOWED) LOGICAL(*),INTENT(OUT) :: ALLOWED
自動ヒープ拡張に関する設定を応答として返します。デフォルトの設定は
.TRUE.
です。
自動ヒープ拡張が無効になっていても、割当て要求を満たすために必要であればヒー
プの拡張は依然行われます。
SUBROUTINE GET_HEAP_SIZE(NBYTES) INTEGER(int32 or int64),INTENT(OUT) :: NBYTES
現行ヒープサイズをバイト単位で返します。ヒープサイズが整数変数で表現できない
場合(すなわち現行ヒープサイズが2GBより大きく、整数変数が32ビットの場合)には
-1
が応答として返されます。
SUBROUTINE GET_MAX_GC_RETRIES(N_RETRIES) INTEGER(*),INTENT(OUT) :: N_RETRIES呼出し元に失敗を報告する前に試みられたガベージコレクションの最大回数を応答とし て返します。割当てが
STAT=
節を伴うALLOCATE
文で起動されたものでは
ない場合、これはプログラム終了をもたらします。
リリース5.2におけるデフォルト値は0です。
SUBROUTINE GET_MAX_HEAP_SIZE(NBYTES) INTEGER(int32 or int64),INTENT(OUT) :: NBYTES
最大ヒープサイズの設定を応答として返します。最大ヒープサイズが設定されていない 場合には0が返されます。デフォルトの設定は0です。
INTEGER(int32) FUNCTION NCOLLECTIONS()それまでに実行されたガベージコレクションの回数を応答として返します。
SUBROUTINE SET_FULL_GC_FREQUENCY(FREQUENCY) INTEGER(int16 or int32 or int64),INTENT(IN) :: FREQUENCY
フルコレクションとフルコレクションの間に実行される部分的コレクションの回数を
設定します。増分的コレクション(ENABLE_INCREMENTAL_GC
参照)が有効とな
らないうちは何の効果も持ちません。
使用中のブロック数が大きく増加した場合にはフルコレクションが行われることもあ
ります。
SUBROUTINE SET_GC_ALLOWED(ALLOWED) LOGICAL(*),INTENT(IN) :: ALLOWED
“GC allowed”の設定を制御します。この設定が.FALSE.
の場合、自動
ガベージコレクションは抑止されます。
これは手動のガベージコレクション(GCOLLECT
参照)には影響しません。
SUBROUTINE SET_GC_VERBOSITY(VERBOSITY) INTEGER(*),INTENT(IN) :: VERBOSITY
饒舌さ(verbosity)のレベルを設定します。デフォルト値は0であり、設定値の範囲 は0-100に限られます。 リリース5.2において意味のあるverbosityレベルは0と10のみです。
SUBROUTINE SET_HEAP_EXPANSION(ALLOWED) LOGICAL(*),INTENT(IN) :: ALLOWED自動ヒープ拡張を許可するかどうかを制御します。これが
.FALSE.
の場合、自動
ヒープ拡張は割当て要求を満たす上で必要な場合にのみ実行されます(通常ヒープは
ヒューリスティックな判断に基づき、必要と判断されたときに拡張が行われます)。
これは手動のヒープ拡張(EXPAND_HEAP
参照)には影響しません。
SUBROUTINE SET_MAX_GC_RETRIES(N_RETRIES) INTEGER(*),INTENT(IN) :: N_RETRIES
ヒープ拡張に失敗した(すなわちOSに拒絶された)後、メモリ不足をレポートする前に 最大何回のガベージコレクションを試みるかを指定します。 リリース5.2におけるデフォルト値は0です。
SUBROUTINE SET_MAX_HEAP_SIZE(N) INTEGER(int32 or int64),INTENT(IN) :: N
ヒープの最大サイズをN バイトにセットします。 これによりヒープの自動拡張は指定された上限を越えることはなくなります。既に上限 を越えていた場合には自動拡張が抑止されます。