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

Qua*_*hey 4 java

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

pru*_*nge 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,sun.misc.Unsafe未记录的内容,不受支持的内容可能会在JDK的更高版本中发生更改。我的建议是,如果您需要获取页面大小信息并想要使用Unsafe,则可以使用它,但是如果需要的话,可以使用合理的默认值(例如4K)(例如,如果类或方法不再存在)。