4

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

4

2 回答 2

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)。

于 2013-09-30T11:45:29.873 回答
-3

请参阅以下课程;您可以使用 getRuntime() -> http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html获取实例

编辑:正如评论中所建议的,我应该提供更多关于从那里去的细节。您需要为不同的操作系统运行几个不同的脚本;您可以使用System.getProperty().

您可以通过谷歌搜索“[os] + [memory page size] + script”找到示例脚本。

请注意,这将是一个相当糟糕的解决方案,我并不是说它很好,只是它是可能的。

另外:当我用谷歌搜索这个时,我得到的另一个想法(虽然我不确定这是否可行,因为我还没有这样做)是从页面上的 Wikipedia 页面获取 C 代码并将其作为本机 java 导入。

于 2013-09-27T09:46:03.520 回答