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?
解决方案
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).