通过java代码获取虚拟内存页面大小 [英] Getting virtual memory page size by java code

查看:765
本文介绍了通过java代码获取虚拟内存页面大小的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Is it possible to get virtual memory page size of the OS on which a java application is running as a java int variable? If yes, how?

推荐答案

可以使用未记录的API。 sun.misc.Unsafe 有一个方法 pageSize()根据文档:

It is possible using undocumented APIs. sun.misc.Unsafe has a method pageSize() which according to the documentation:


报告本机内存的大小(以字节为单位)页面(无论是什么)。
此值始终为2的幂。

Report the size in bytes of a native memory page (whatever that is). This value will always be a power of two.

示例代码:

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的更高版本而更改。我的建议,如果您需要获取页面大小信息并想要使用不安全,则使用它存在但是如果需要则回退到合理的默认值(例如4K)(例如,如果类或方法不再存在)。

Be aware that sun.misc.Unsafe is undocumented, unsupported and may change with later releases of JDK. My suggestion, if you need to get page size info and want to use Unsafe, is to use it exists but fall-back to a sensible default (e.g. 4K) if needed (e.g. if the class or method no longer exists).

这篇关于通过java代码获取虚拟内存页面大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆