我只是想知道这两个库使用系统功能吗?
Field f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
Unsafe un = (Unsafe) f.get(null);
int ps = un.pageSize();
System.out.println("Page size: " + ps);
答案 0 :(得分:1)
此代码不安全且不兼容跨平台。
Unsafe
本身的方式是来自包java.lang.reflect
的公共支持的Java API。此代码将在所有平台上运行,包含JVM的所有实现,因为它是Java公共API的一部分。un
不存在于Oracle / Sun JVM之外的任何JVM上,因为它是该JVM实现的私有API。例如,您的代码将无法在IBM JVM上运行,因为那里不会出现sun.misc.Unsafe
。我认为Oracle / Sun的Java 8 javac
编译器甚至会在编译代码时向您发出警告(如果您使用Eclipse的内置功能构建项目,则不使用此编译器),因为您使用的是私有API。
是的,您的解决方案将返回本机内存页面大小,但它可能无法在所有平台上运行。