是否可以将运行 java 应用程序的操作系统的虚拟内存页面大小作为 java int 变量获取?如果是,如何?
2 回答
可以使用未记录的 API。 sun.misc.Unsafe
有一个方法pageSize()根据文档:
报告本机内存页面的大小(以字节为单位)(无论是什么)。该值将始终是 2 的幂。
示例代码:
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 的更高版本而改变。我的建议是,如果您需要获取页面大小信息并想要使用Unsafe
,则使用它存在但如果需要(例如,如果类或方法不再存在)回退到合理的默认值(例如 4K)。
请参阅以下课程;您可以使用 getRuntime() -> http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html获取实例
编辑:正如评论中所建议的,我应该提供更多关于从那里去的细节。您需要为不同的操作系统运行几个不同的脚本;您可以使用System.getProperty()
.
您可以通过谷歌搜索“[os] + [memory page size] + script”找到示例脚本。
请注意,这将是一个相当糟糕的解决方案,我并不是说它很好,只是它是可能的。
另外:当我用谷歌搜索这个时,我得到的另一个想法(虽然我不确定这是否可行,因为我还没有这样做)是从页面上的 Wikipedia 页面获取 C 代码并将其作为本机 java 导入。