是否可以将运行java应用程序的操作系统的虚拟内存页面大小作为java int变量?如果是,怎么样?
答案 0 :(得分:5)
可以使用未记录的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)(例如,如果类或方法不再存在) )。
答案 1 :(得分:-3)
参见以下课程;你可以用getRuntime() - >获得一个实例http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html
编辑:正如评论中所建议的那样,我应该提供更多详细信息,从那里开始。您需要为不同的操作系统运行几个不同的脚本;您可以使用System.getProperty()
获取该类型。
您可以通过Google搜索“[os] + [内存页面大小] +脚本”找到示例脚本。
请注意,这将是一个相当愚蠢的解决方案,我并不是说这很好,只是有可能。
另外:当我用Google搜索时我得到的另一个想法(虽然我不确定这是否可行,因为我还没有这样做)是从Wikipedia page on pages获取C代码并将其导入为原生java。