eclipse europaのヒープサイズ変更で起動に失敗

Windows XPとSunのJREで確認した。eclipse.iniに記述してあるデフォルトのヒープサイズ

 -Xms40m
 -Xms256m

を下記のように変更

 -Xms128m
 -Xms768m

すると、eclipseが起動しなくなる。

回避方法

コマンドラインで-vmオプションを使ってデフォルトで使われるパブリックJREjvm.dllをjavaw.exeへ置き換える事。

eclipse -vm "C:\Program Files\Java\jre1.6.0_04\bin\javaw.exe"

これで行ける。バッチファイルを作って起動するようにした。

以下は現象の詳細と解決に至るまで

eclipse Europaを使っていてデフォルト設定のヒープサイズではすぐにOut of Memoryになってしまうので、eclipse.iniに記述してあるヒープサイズを拡大。
すると起動しない…。

eclipsec.exeで起動して、メッセージを確認すると、コンソールに下記のようなメッセージ

Error occurred during initialization of VM
Could not reserve enough space for object heap

さらにダイアログに下記のようなログ(抜粋)

-vm C\jdk1.6.0_04\jre\bin\client\jvm.dll

ん?3.2(callist)までは、javaw.exe使って起動してなかったっけ?と思ったので、-vmの指定を置き換える方法を探すことにして、先に書いた方法に行き当たった。その後、納得いかなかったので、いろいろ試した。

  • JREのバージョンを変更
    • jre1.4.0_13 NG
    • jre1.5.0_14 NG
    • jre1.6.0_04 NG
  • eclipseのバージョンを変更
    • callist OK

うーん。やっぱ、europaのランチャーがおかしいのか?
結局回避方法はわかったものの、原因はよくわからない。
なんでeuropaで起動方法を変えたんだろうか?



追記
europaからじゃないみたいだ。
eclipse3.2.2でも同じ現象が起きた。
eclipse3.2.1は大丈夫だった。



さらに追記
なぜjvm.dllを使うようになったかというのは、おそらくjvm.dllを使うと、プロセスが1つになるからだと思われる。タスクマネージャで確認すると、"eclipse.exe"はあるが"javaw.exe"のプロセスがない。でも開発環境だし、メモリ食うしヒープサイズの設定ができないのは致命傷だと思う。そもそもjvm.dllでなぜヒープサイズの拡大設定ができないのかも疑問だ。

今日買った本

RESTful Webサービス

RESTful Webサービス


珠玉のプログラミング―本質を見抜いたアルゴリズムとデータ構造

珠玉のプログラミング―本質を見抜いたアルゴリズムとデータ構造


あとで感想を書く。

*1今年の目標

今年こそ懐刀としてスクリプト言語を何か1つマスターする。
ということで。

  • 以下候補とその理由
    • Python 今のところ最有力(長いものにまかれとけという意味で)
    • Ruby なんか癪にさわるので避けたいが、ブームは続く
    • JavaScript 話題性とその万人受けがうらやましい
    • Scheme 関数型プログラミングを体感したい(スクリプトってわけでもないけど)

うーん。
ならべて見ると、妥当な動機があるSchemeかなー。
ということで、Schemeをがんばる。

でも結局マイノリティーだなぁ…フヒヒ

関さば君

自分は関さば君らしい。
ある女性向け雑誌の占いの結果らしい。

  • 関さば君の特徴
    • 12正座別にセフレをコレクションしている
    • 女漁りの天才
    • ベッドの上でもわがまま
    • 趣味はハメド

コーヒー噴いた。
わー…。

最近の女性向け雑誌ってこんなんばっかなん?

ディレクトリの表示切替

セキュリティ上の理由で、ディレクトリ表示をやめたい場合に、Apacheだと、httpd.confにOptions Indexes で設定するけど、Tomcatだとどうやるかという話。
まず、Tomcatは、全アプリケーション共通の設定を$TOMCAT_HOME/conf/web.xmlに持っているのでここがあやしいんじゃないかと思って見てみると、そのものずばりdefaultという名前のサーブレットがあるじゃないか。ってなるので、さらにそのパラメータを見る。listingsがどうもそれっぽいので値をfalseに変えると...。
でけたー!
以下は変更後のdefaultサーブレットの記述。

<servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>
          org.apache.catalina.servlets.DefaultServlet
        </servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
</servlet>