1年前のエントリ訂正&Windows上で32bitと64bitのJavaがある場合

エントリ訂正

JavaFXやSwingのアプリケーションをLinux(Mint17)で実行した時に、インライン入力ができないなあと1年ほど前に書いていたんですが、実は単にXIMを有効にしてなかっただけなので追記しました。恥ずかし……。

mokake.hatenablog.com

Windows上での32/64bit JREの共存

Java実行環境(JRE)にも、32bitと64bitがあります。 最近はWindowsも64bit版がかなり多いと思いますが、64bit版では両方が動きます。 「Java仮想マシンで動くのだから、どちらでもいいのでは?」と思ってしまいます。

Oracle(Sunかな?)の公式見解はFAQにあります。

Frequently Asked Questions About the Java HotSpot VM

実のところ、「本当に100% Pure Java」かつ「扱うデータが大きくない(GiB未満ぐらい)」なら、どちらでもあまり問題はありません。 例えばNetBeansは、1つのバイナリで32bit, 64bit両方のJRE上で動作します。

bit数が問題になるのは、例えば次のような場合でしょう。

  • ブラウザから呼び出す場合、ブラウザと整合するJREが必要
  • Javaアプリケーションが他プログラムと(JNIなどで)やりとりする場合、相手と整合するJREが必要

なお、後者の中には、「SWTで作られたプログラム」も含まれます。 SWTswt.jarがネイティブ環境と直接やり取りするため、JREのバージョンがあってないといけません。

SWT代表(というよりSWTの親玉)のEclipseは、両方入った環境でも適切に動作します。

また、64bit版Windowsに両方のJREを入れた場合、Javaを直接動かすと、64bit版が優先されるようです。 コントロールパネルの「Java」を開いても、両方あることは示されません。 WindowsのPATHでは %PROGRAMDATA%\Oracle\Java\javapath にあるjava.exeが使われるように見えるのですが、ここを32bitのショートカットにしてもデフォルトは64bitのままです。

ということで、場合によっては64bitのJREを削除する必要が出てくるかもしれません。 起動バッチファイルを書けばいいのでしょうけどね。

(このエントリは、SWTで作った簡易ツールが、64bitのJREを入れたら突然動かなくなったので書きました)

なお、セキュリティ面については、JRE 8 Update 20(8u20)以降なら、適切に更新されるようになったそうです。

www.atmarkit.co.jp

JRE 8 Update 20以降がインストール済みであれば、前述のJavaコントロールパネルからの更新手順により、自動的にインストール済みのJREが32bit版か64bit版か自動的に判別され、適切に更新される。

以前は片方しか更新されず、しれっとセキュリティホールになっていたので、この点はよかったと思います。