Getting virtual memory page size by java code

前端 未结 2 1833
醉梦人生
醉梦人生 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条回答
  • 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).

    0 讨论(0)
  • 2021-01-06 07:49

    See the following class; you can get an instance with getRuntime() -> http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html

    EDIT: As has been suggested in the comments, I should provide more details on where to go from there. You'd need to run a couple different scripts for different OS-es; you can get the type by using System.getProperty().

    You can find sample scripts by googling for "[os] + [memory page size] + script".

    Note this would be a rather chippy solution, and I'm not saying it's nice, just that it's possible.

    ALSO: Another idea I got when I googled this (though I'm not sure if this will work, as I've not done it) is to get the C code from the Wikipedia page on pages and import it as native java.

    0 讨论(0)
提交回复
热议问题