AbstractICache クラスの具象サブクラス (なお, 現在は (x86 用としては) このクラスが唯一のサブクラス) (See: here for details).
(なおコメントには, x86 では何もしていない(no-op), と書かれているが, 実際には ICacheStubGenerator::generate_icache_flush() にはいろいろと処理が書いてある)
((cite: hotspot/src/cpu/x86/vm/icache_x86.hpp))
// Interface for updating the instruction cache. Whenever the VM modifies
// code, part of the processor instruction cache potentially has to be flushed.
// On the x86, this is a no-op -- the I-cache is guaranteed to be consistent
// after the next jump, and the VM never modifies instructions directly ahead
// of the instruction fetch path.
// [phh] It's not clear that the above comment is correct, because on an MP
// system where the dcaches are not snooped, only the thread doing the invalidate
// will see the update. Even in the snooped case, a memory fence would be
// necessary if stores weren't ordered. Fortunately, they are on all known
// x86 implementations.
class ICache : public AbstractICache {
処理のほとんどは AbstractICache に丸投げしている.
このクラスが行っているのは, 処理に関する以下の定数値(キャッシュラインサイズ等)をオーバーライドしているだけ.
((cite: hotspot/src/cpu/x86/vm/icache_x86.hpp))
#ifdef AMD64
enum {
stub_size = 64, // Size of the icache flush stub in bytes
line_size = 32, // Icache line size in bytes
log2_line_size = 5 // log2(line_size)
};
// Use default implementation
#else
enum {
stub_size = 16, // Size of the icache flush stub in bytes
line_size = BytesPerWord, // conservative
log2_line_size = LogBytesPerWord // log2(line_size)
};
#endif // AMD64
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.