【问题标题】:How can I tell if a program I write is 32 bit or 64 bit? [duplicate]如何判断我编写的程序是 32 位还是 64 位? [复制]
【发布时间】:2018-01-21 12:45:31
【问题描述】:

我用java写了一些程序,但我想知道它们是32位还是64位,我的意思是如果它是64位,它将如何在32位计算机上运行?

【问题讨论】:

  • 你只会运行它,除非你做一些特殊的事情,java会为你处理一切。普通的 java 代码不管你是在 64 位还是 32 位 jvm 上运行。
  • Java 程序既不是 32 位也不是 64 位。只要有合适的 JVM,它就可以在其中一个上运行。

标签: java cpu processor


【解决方案1】:

我用java写了一些程序,但我想知道它们是32位还是64位

两者都不是。您的 Java 程序不是专门为 32 位或 64 位的。

所有 Java 程序都应该在每个最新的 Java 实现上运行。

当你编译一个java程序时,它会变成Java bytecode,这通常与你编译它的平台和运行它的平台无关。

这个问题应该为你解答一些问题:Java 32-bit vs 64-bit compatibility

虽然 64 位 Java 实现可能更好地处理一些 64 位操作,但程序的行为方式应该没有区别(假设您没有使用需要 64 位实现的库)。

【讨论】:

    【解决方案2】:

    通常我们从不编写可以说是 32 位或 64 位的代码。 它实际上取决于 JRE 和 machine 。 其余的事情由 JVM 和 CPU 管理。

    例如,如果我们在 32 位机器上使用 64 位原语,如 long 或 double 那么即使像long var = 10l; 这样的赋值操作也不会是原子操作。它将在 32 位的两个阶段发生。

    但相同的赋值操作将是 64 位的原子操作。

    【讨论】:

    • 你的答案是正确的,你可以从howtodoinjava.com/core-java/basics/…添加信息以供将来参考和完整性
    • 64位jvm下long和double类型值的读写肯定不是原子的。jvm没有指定。jls定义:For the purposes of the Java programming language memory model, a single writeto a non-volatile long or double value is treated as two separate writes: one to each32-bit half. An implementation of the Java VirtualMachine is free to perform writes to long and double values atomically or in two parts.,不需要32位或 64 位
    • @Pfeiffer 不,这个答案不正确。 这个答案非常错误。 阅读 Java 规范 17.7. Non-atomic Treatment of double and long:它明确表示 no 保证原子写入 double 或 @987654326 @ 除非标记为volatile。 JVM 实现可能执行原子写入,但没有 Java 程序员应该依赖它。如果是多线程的,则必须防止不正确地读取半写的 64 位数字。
    • @BasilBourque 确实,线程。我的错误,感谢您的注意。
    【解决方案3】:

    编译的 Java 程序独立于系统架构。 万一,如果您想检查某些特定情况下的 JVM 位大小,您可以使用

    System.out.println("JVM Bit size: " + System.getProperty("sun.arch.data.model"));
    

    【讨论】:

      【解决方案4】:

      它由 JRE 决定。 JRE 存在 32 位版本和 64 位版本。

      【讨论】:

        猜你喜欢
        • 2014-05-06
        • 2018-06-14
        • 2013-01-11
        • 2010-09-20
        • 1970-01-01
        • 2016-02-06
        • 2010-10-23
        • 2011-10-18
        • 1970-01-01
        相关资源
        最近更新 更多