Getting virtual memory page size by java code

前端 未结 2 1864
醉梦人生
醉梦人生 2021-01-06 07:11

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?

2条回答
  •  不要未来只要你来
    2021-01-06 07:45

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

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

    Sample code:

    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);
        }
    }
    

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

提交回复
热议问题