私は友人と私がJavaで書いているという小さなゲームを持っています。これはひどくコード化されており、リファクタリングに取り組んでいますが、それは今のところ問題ではありません。我々の両方が64ビットマシンを持っていると我々は両方の32ビットJDKを使用していた前に、私は推測するが、最近、私はいくつかの問題を持っていたので、私はすべてのJDKを削除し、最新の64ビットJDKをインストールして、私は時にはよく分からないが、私の友人でもあります64ビットJDKを実行しています。私たちのゲームは32ビットJDKで正常に動作していましたが、64ビットバージョンではゲームは開始しません。私は日食でそれをデバッグしようとしてきましたが、それは少し痛みでした。64ビットJVMのバグや非互換性はありますか?
当社のゲームは、ネットワークとマルチスレッドであり、私たちは私たちが物事を同期する方法をいくつかの問題を(私は前にそれを書いていたとき、私は完全に同期の全体的なアイデアを理解していない)などがあると思います。私たちは、実行()メソッドは効果がありませんどの同期していたが、私たちのコードの大部分の愚かにもかかわらず、ものはまだ32ビットJVM(WindowsおよびLinux)上で実行されます。一人がゲームをホストする場所
ゲームが起動し、ホストがゲームを開始することを決定するまで、他の人が参加することができます。その後、すべてのプレイヤーにプロンプトを送信して、開始するかどうかを尋ね、すべてが「はい」と答えた場合、ゲームが開始されます。どのような64ビットJVM上で起こっていることは、それがメッセージを送信することですが、応答が失われたか何か、またはサーバはゲームが実際に開始されないため、誰もがOKedたことを正確にカウントされていないばかりいるように思えます。実際には、ホストは、他のプレイヤーが取得していないメッセージをもう少し受け取って、ゲームを始めるのに少し余裕ができますが、サーバーはどこかに詰まっているようです。
問題が何であるか任意のアイデア?誰かが見たいと思えば私達のコードはgithubに上がっています。あなたがしたら私は非常に満足しているだろうが、誰かが私たちの醜いコードを歩き回ることを期待していない。ありがとう!
ところで、私たちは64ビットWindows VistaとJDK 1.6 u12とu14の両方で動作していますが、64ビットLinux JVMでまだテストすることはできませんでしたが、Linuxも実行します。 ああ、私が64ビットJVMを発行している理由についてもっと詳しく知りたいのですが:
私たちは基本的に秋セメスターでこれをやっていましたし、しばらく作業をやめました。 6ヵ月後、私たちはそれをもう一度手に取って、私たちの恐ろしいコードをずらして、それをきれいにしようとします。それから、私たちのどちらも、それを適切に実行できないことを認識します。私は動作するリビジョンを見つけようとしますが、今夏に作業を開始する前から最後のリビジョンになりますが、まだ動作していません。私は以前にコンパイルしたバイナリ(.jars)をチェックしても、64ビットJVMでは動作しませんでした。私はその後、Sun JDK1.6 JVMを実行している32ビットのLinux VMをチェックし、うまくいきました。したがって、同じバイナリが完全に動作する前から64ビット問題だとはっきりと確信しています。
自分のマシン(127.0.0.1ではなく0:0:0:0:1)上のサーバーに接続するときに、何らかの理由でVistaが自分のソケットにIPv6アドレスを割り当てていることにも気付きました。私はIPv4固有のものはすべて修正していますが、まだ動作していません。
私は実際に私のgithubリポジトリに別の問題を作成しましたが、それは別のマシンで最新のビルドをテストすることはできません。しかし、リファクタリング前の最後のビルドは32ビットJVM上でデュアルコアでうまく動作するため、競合状態には見えません。
他にも、LinuxでOpenJDK 6 64ビットで動作する全く同じ問題。私はそれが64ビットバージョンが何とか持ち出す競争状態だと思っています。
なぜ64bit JVMをまったく使用する必要があると思いますか?私が知っている唯一の利点は、許容されるヒープサイズが大きいことです。それはビッグアイアンのサーバーにのみ関連しています。 – skaffman
理由はありません。私はちょうどそれをインストールしたばかりです。要点は、64ビットJVMまたは私自身のコードの根底にある問題のために、私が持っている問題があるかどうかを知りたいということです。私は今、後者に向かっている。 – Ibrahim