通过java代码获取虚拟内存页面大小

时间:2013-09-27 09:42:16

标签: java

是否可以将运行java应用程序的操作系统的虚拟内存页面大小作为java int变量?如果是,怎么样?

2 个答案:

答案 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。