eclipse.iniでJVMを指定してメモリ関係(ヒープ)のエラーを回避する。ロケールを変更してhtmlエディタのバグを回避する。

d:id:kanonji:20090118でeclipse3.4系であるGanymedeで環境を作りました。
その流れでeclipse.iniにも手を加えたので覚書です。

JavaVMを指定する。

-vm
C:\Program Files\Java\jre6\bin\javaw.exe

これを記述する事で、使用するJavaVMを指定出来ます。
今回指定した理由は、しないとメモリ関係のエラーで起動出来なかったからです。

実はeclipseは環境によっては、メモリ関係のエラーでeclipseが起動し無い事があります。

ZIPを解凍し実行してみるが、下記のようなエラーが出てしまう。
JVM terminated. Exit code=-1
以下省略

Eclipse Foundation公式のPHP開発用プラグイン「PDT 1.0」(Eclipse PHP Development Tools)がリリース。だけど起動時にエラー - プログラマのチラシの裏

この時は、下記を削除する事でエラーが回避出来ましたが、これを消すとJavaVMにヒープ領域の最小と最大値を渡す事が出来ません。

-vmargs
-Xms40m
-Xmx256m

-vmargs以下を消していると、ヒープ領域が128MB程度しか確保されず、どうにも不足がちでした。
どこで見かけたかは忘れましたが、JavaVMを指定する事で、これらを消さなくても起動出来る様になりました。
なお、-vmargsより後に書かれたものは、全てJavaVMへの引数として渡されるので、JavaVMの指定は-vmargsより前に書く必要があります。

ヒープとは

Java VM仮想メモリ上でのイメージは図5のようになります。Javaプログラムを動作させるにはJavaヒープとJava VMスタックが必要になります。Javaヒープにはクラスファイルを展開している領域とJavaクラスのインスタンスが置かれる領域があります。

http://kanonji.clipp.in/entry/49333

元記事があまりに長いので、clippからになっちゃってるけど、Java仮想メモリ領域の一部の事みたいです。

ロケールを英語にする

-Duser.language=en

これを記述*1する事で、ロケールが英語に切り替わります。
なんでわざわざ英語にしているのかというと、eclipse標準のHTMLエディタに、文字コード判別に関するバグがあるからです。

HTMLファイル内にMETAタグ+charset指定が無い場合、驚いたことにロケールがjaの時はこのEncodingGuesserが呼び出されて、JIS/Shift_JIS/EUC-JP/ASCIIの自動判別をやってくれます。すごいぞwst。でもJIS/Shift_JIS/EUC-JP/ASCIIしか判別していないので、それ以外の場合デフォルトのShift_JIS(これは埋め込みの固定)を返してしまいます。

http://blog.goo.ne.jp/atlanto/e/f9c32302055b47f3521df3ee0967992d

Smartyなどのテンプレートエンジンを使っていると、metaタグを含まない断片的なhtmlを編集する事が多々あります。
最近は大抵UTF-8を使うのに、このバグのせいでうっかりShift_JISで保存されて、文字化けです。
しょうがないのでロケールをja以外にし、このバグを無理やり回避しました。

ロケールがenの弊害

補完で入力される日付の表記が「Feb 13 2009」の様になって若干読みにくいです。

ユーザ名を指定する

-Duser.name=username <username@example.com>

DocBlockにはなるべく@authorを書いて、後から誰が作ったメソッドなのか分かる様にしています。
ただ、これを一々入力するのは面倒です。

@author username <username@example.com>

大抵はこの様に書くと思いますが、ちょっと設定してあげると、補完で入力できるようになります。
その際のusernameとメールアドレスの部分を設定できるのが-Duser.nameです。

eclipse.iniのまとめ

元のeclipse.ini
-startup
plugins/org.eclipse.equinox.launcher_1.0.101.R34x_v20080819.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.101.R34x_v20080731
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
-vmargs
-Xms40m
-Xmx256m
変更後のeclipse.ini
-startup
plugins\org.eclipse.equinox.launcher_1.0.101.R34x_v20080819.jar
--launcher.library
plugins\org.eclipse.equinox.launcher.win32.win32.x86_1.0.101.R34x_v20080731
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
-vm
C:\Program Files\Java\jre6\bin\javaw.exe
-vmargs
-Xms40m
-Xmx256m

-Duser.language=en
username <username@example.com>

*1:確認してないけど、-vmargsの後に書いて動作してるから、これもJavaVMへの引数かな?