Javaアプリケーションが実行されているOSの仮想メモリページサイズをJava int変数として取得することはできますか? はいの場合、どのように?
2 に答える
文書化されていない API を使用することは可能です。 ドキュメントによるとsun.misc.Unsafe
、メソッドpageSize()があります。
ネイティブ メモリ ページのサイズをバイト単位で報告します (それが何であれ)。この値は常に 2 の累乗になります。
サンプルコード:
import java.lang.reflect.Field;
import sun.misc.Unsafe;
public class PageInfo
{
public static void main(String... args)
throws Exception
{
Field f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
Unsafe unsafe = (Unsafe)f.get(null);
int pageSize = unsafe.pageSize();
System.out.println("Page size: " + pageSize);
}
}
sun.misc.Unsafe
ドキュメント化されておらず、サポートされておらず、JDK の以降のリリースで変更される可能性があることに注意してください。ページサイズ情報を取得する必要があり、 を使用したい場合Unsafe
、それを使用することをお勧めしますが、必要に応じて適切なデフォルト (4K など) にフォールバックします (クラスまたはメソッドが存在しない場合など)。
次のクラスを参照してください。getRuntime() でインスタンスを取得できます -> http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html
編集:コメントで提案されているように、そこからどこへ行くべきかについての詳細を提供する必要があります。OS ごとにいくつかの異なるスクリプトを実行する必要があります。を使用して型を取得できますSystem.getProperty()
。
サンプル スクリプトは、「[os] + [メモリ ページ サイズ] + スクリプト」でググると見つかります。
これはかなり厄介な解決策になることに注意してください。
また、これをグーグルで検索したときに得たもう1つのアイデアは(まだ行っていないので、これが機能するかどうかはわかりません)、ページのWikipediaページからCコードを取得し、ネイティブJavaとしてインポートすることです.