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