2017-08-13 6 views
1

私はjavaでいくつかのプログラムを書いていますが、32ビットか64ビットかどうかを知りたいのですが、それは64ビットであれば32ビットコンピュータでどのように動作するのでしょうか?私が書き込むプログラムが32ビットか64ビットかどうかをどのように知ることができますか?

+8

何か特別なjavaがあなたのためにすべてを処理しない限り、あなたはそれを実行します。通常のJavaコードは、64ビットまたは32ビットのjv​​mで実行する場合は気にしません。 – Oleg

+4

Javaプログラムは32または64ビットではありません。適切なJVMがあれば、どちらでも実行されます。 – EJP

答えて

4

私はJavaでプログラムをいくつか書きましたが、私は、彼らが32ビットまたは64ビット

でもないかどうかを知りたいと思います。 Javaプログラムは、特に32ビットまたは64ビットではありません。

すべてのJavaプログラムは、すべての最新のJava実装で実行する必要があります。

Javaプログラムをコンパイルすると、それはJava bytecodeになります。これは、コンパイルするプラットフォームや実行するプラットフォームに依存しないことがよくあります。

この質問はあなたのためにいくつかの質問に答える必要があります。Java 32-bit vs 64-bit compatibility

64ビットのJava実装は、より良い、いくつかの64ビット演算を扱うかもしれませんが、プログラムがどのように動作するかのように差があってはならない(」あなたが上がらないと仮定すると64ビットの実装を必要とするライブラリを使用して)。

1

JREによって決定されます。 JREの32ビットバージョンと64ビットバージョンが存在します。

2

コンパイルされたJavaプログラムは、システムのアーキテクチャに依存しません。あなたには、いくつかの特定のケースのためのJVMのビットサイズを確認したい場合は ケースでは、一般的に、我々は32ビットまたは64ビットを言うことができるコードを書くことはありません

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

を使用することができます。 実際にはJREとマシンに依存します。 残りのものはJVMとCPUによって管理されます。

例えば、32ビットマシンでlongまたはdoubleのような64ビットプリミティブを使用すると、の場合でも、long var = 10l;のような割り当て操作でさえ、アトミックな操作にはなりません。 32ビットの2つのフェーズで発生します。

しかし、同じ割り当て操作は64ビットでアトミック操作になります。

+0

あなたは正しい答えです。http://howtodoinjava.com/core-java/basics/difference-between-32-bit-java-vs-64-bit-java/から情報を追加して、後で参考にしてください – Pfeiffer

+1

long型とdouble型の読み込みと書き込みの値は、64ビットjvmでは絶対不可能です。jvmはそれを指定しません。また、jlsは次のように定義します。 'Javaプログラミング言語メモリモデルの目的では、揮発性のlong値またはdouble値は、2つの別個の書き込みとして扱われます。 Java VirtualMachineのインプリメンテーションは、long値とdouble値への書き込みをアトミックまたは2つの部分で自由に実行できます。」32ビットまたは64ビットは必要ありません – dabaicai

+0

@Pfeifferいいえ、この回答は正しくありません。 **この回答は非常に間違っています。** Java仕様[17.7。非アトミックな2倍と長い処理](http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7):明示的には*** 'volatile 'とマークされていない限り、' double'または 'long' **へのアトミック書き込みの保証はありません。 JVM実装*はアトミックな書き込みを実行するかもしれませんが、Javaプログラマはそれに頼るべきではありません。マルチスレッドの場合は、半分書かれた64ビット番号の不適切な読み取りから保護する必要があります。実際 –

関連する問題