Javaでは、弱参照はメモリが不足した場合にガベージコレクションされます。Linuxでは、malloc()
常に強力な参照を返します。呼び出し元がfree()
関数を呼び出すまで、ポインターが解放されることはありません。
次のように、メモリが不足したときに自動的に解放できるキャッシュ用のバッファを割り当てたいと思います。
cache_t cache;
if (! cache_alloc(&cache))
die("Memory out");
cache_lock(&cache); // realloc cache mem if it is collected
if (! cache->user_init) { // The "user_init" maybe reset if the cache mem is collected
// lazy-init the cache...
load_contents(cache->mem, ...);
cache->user_init = 1;
}
// do with cache..
stuff_t *stuff = (stuff_t *) cache->mem;
...
cache_unlock(&cache);
の出力にbuff
はディスクIOが関連しているようです。cache
vmstat
$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 51604 554220 13384 314852 3 10 411 420 702 1063 8 3 75 14
さて、私の例のキャッシュがvmstat出力の「cache」列に反映されるかどうかについてもっと知りたいです。