这些库函数是否使用本机系统的功能?

时间:2015-12-26 09:46:14

标签: java

我只是想知道这两个库使用系统功能吗?

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

1 个答案:

答案 0 :(得分:1)

此代码不安全且不兼容跨平台。

  • 获取Unsafe本身的方式是来自包java.lang.reflect的公共支持的Java API。此代码将在所有平台上运行,包含JVM的所有实现,因为它是Java公共API的一部分。
  • 使用公共支持的API本身获得的对象un不存在于Oracle / Sun JVM之外的任何JVM上,因为它是该JVM实现的私有API。例如,您的代码将无法在IBM JVM上运行,因为那里不会出现sun.misc.Unsafe

我认为Oracle / Sun的Java 8 javac编译器甚至会在编译代码时向您发出警告(如果您使用Eclipse的内置功能构建项目,则不使用此编译器),因为您使用的是私有API。

是的,您的解决方案将返回本机内存页面大小,但它可能无法在所有平台上运行。