【问题标题】:Java, 64-bit, JNI - compared to .NET CLRJava,64 位,JNI - 与 .NET CLR 相比
【发布时间】:2010-07-04 19:46:58
【问题描述】:

.NET 程序集 PE 标头具有 32 位/64 位的目标平台,当程序集使用像 P/Invoke 这样的本机互操作时使用该目标平台(否则它将是 Target=AnyCPU)。

当 Java 应用程序通过JNI 与某个本机接口具有接口时,Java 是否有任何等价物? JNI 必须编译为 32 位或 64 位。

有没有解释 Java 64 位架构和开发的文章?我没找到。

【问题讨论】:

    标签: java 64-bit java-native-interface


    【解决方案1】:

    您可以使用以下方法检测 64 位:

    public static final boolean is64bit = (System.getProperty("sun.arch.data.model").indexOf("64") != -1)
    

    您还可以使用 -d32-d64 以 32 位或 64 位启动 Java。

    如果这用于 Web 或桌面应用程序,则可能有一种方法可以从清单文件中指定它。

    【讨论】:

    • 这是 Sun 特定且未记录的系统属性,它可能不适用于其他 JVM 实现或未来的 Oracle Java 版本。
    • 我不想确定我在哪个平台上运行。我的问题是我是否可以将我的代码标记为与 32 位不兼容,这样它就不会在 32 位 Java impl 上运行。当然,这可以使用您建议的技术手动实现
    【解决方案2】:

    可以查看系统属性os.arch

    String osArch = System.getProperty("os.arch");
    

    不幸的是,该属性的可能值没有记录在案,但您可以在不同的系统上试用它以查看它返回的内容(在我的 64 位系统上使用 Sun JDK 6 update 20,它会返回 amd64)。

    有关其他可用系统属性,请参阅java.lang.System.getProperties() 的 API 文档。

    【讨论】:

      猜你喜欢
      • 2014-05-11
      • 2017-04-30
      • 2016-02-28
      • 2011-07-23
      • 2012-02-11
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 2018-11-10
      相关资源
      最近更新 更多