●ザウルス版Java高速起動ツール Mercurius
Ver:0.1
形式:ipk
言語:Java, Ruby
環境:Zaurus SL-C760
備考:
⇒ Download
■紹介
Javaアプリケーションの起動速度を高速にするツールとして、Torutkさん
の「Mercury版Javaクラス高速起動ツール」というものがあります。それを
ザウルス用に改造してみました。
どのような処理を行い、高速化しているかなどの解説は、Torutkさんの
ページを参照してください。簡単に言うと、Java実行環境をあらかじめ立
ち上げておいて、そこに実行したいプログラムをロードし、実行する方法
らしいです。
なお、ポート12345のソケット通信を使用しますが、ローカル127.0.0.1
以外からの接続は拒否するようにしてあります。
■Java高速起動ツールの効果
あまりにも遅いJavaアプリケーションの起動速度向上が見込めます。
Java起動までのストレスが軽減されるかもしれません。ただし、使用した
いアプリケーション以外のプログラムもメモリにロードしている状態とな
るので、メモリ消費量は多少増大します。
【制限事項1】
現在のバージョンでは、一度に1つのアプリケーションしか起動しませ
ん。アプリケーション実行中に、再度下記のRUNコマンドを送信すると、
起動中のアプリケーションを解放し、新たに指定されたアプリケーション
が起動します。(終了するわけではありません)
また、アプリケーションの作りによっては、KeyHelperのShift+Home
起動で切替が出来ない場合があります。その場合は、再度高速起動用の
アイコンから起動しなおしてください。
【制限事項2】
二回目の高速起動後、十秒ほどで画面が一瞬消えますが、高速起動ツー
ルの画面がアクティブになれば再表示されます。
(そのままにしておけば、すぐに再表示されます)
■画面
・Application : 起動中のアプリケーション
・Free Memory : Java仮想マシンの空メモリ量
・Total Memory : Java仮想マシンの総メモリ量
・テキスト領域 : システムプロパティのリスト
・切替ボタン : 起動中アプリケーションに切替ます
・更新ボタン : メモリ情報を更新します
・終了ボタン : Mercuriusを終了します
■ダウンロード
「mercurius_0.1_arm.ipk」をダウンロード後、ザウルスのメニュー
からインストールしてください。
また、アプリケーションを高速起動するためには、高速起動ツールの
他に、高速起動に対応するためのソフトウェアをインストールする必要
があります。
→ ザウルス版Java高速起動ツール mercurius_0.1_arm.ipk
■高速起動ツールを試してみる
私が公開しているツールで高速起動を試してみます。
→ ザウルス用Ftpクライアント JFtp(jftp_0.18_arm.ipk)
→ ザウルス用ダウンロードツール JLoader(jloader_1.5_arm.ipk)
→ ザウルス向けJavaメーラー 鳴家(yanari_0.8.1_arm.ipk)
→ 高速起動用Rubyスクリプト fastup_test4_all.ipk
上記のipkファイルをインストールしてください。
インストール後、JFtpFSSアイコンまたはJLoaderFSSアイコンから起動
時、2回目以降から起動時間が短縮されます。JFtpアイコンやJLoaderア
イコンからの起動は通常起動となり、起動時間は短縮されないことに注
意してください。
■Java高速起動ツールへの対応方法
Javaアプリケーション起動時、以下のコマンドを使用して高速起動ツー
ルに起動するクラスを指定する必要があります。私はRubyでスクリプトを
書きましたが、ソケット通信ができるものであれば何でも良いです。
(ただし、Javaだとその起動に時間がかかって意味がなくなります)
【コマンド】
・PATH classpath(必須)
クラスパスを追加するコマンドです。クラスパスが設定されていない
と、下記のコマンドを送信してもエラーとなってしまいます。
「file:/home/QtPalmtop/java/JFtp.jar」のように、インストール
先のパスやJarファイルを指定します。
例:"PATH file:/home/QtPalmtop/java/JFtp.jar"
・CLASS classname(CLASS or NEW必須)
起動クラスを指定するコマンドです。インスタンスは作成しないため、
インスタンスを作成し、起動クラスを指定する場合は、以下のNEWコマン
ドを使用してください。
スタティックメソッドからアプリケーションを起動する場合に、この
コマンドを使用します。
例:"CLASS jp.ne.sakura.andyou.jftp.JFtp"
・NEW classname(CLASS or NEW必須)
起動クラスを指定するコマンドです。CLASSコマンドとは異なり、イン
スタンスを作成し、そのオブジェクトに対してメソッドを実行すること
になります。
例:"NEW jp.ne.sakura.andyou.jftp.JFtp"
・RUN method args(必須)
指定されたメソッドおよび引数を用いて、アプリケーションを起動し
ます。クラスやインスタンス指定がない場合は、実行できません。
なお、引数はString配列または引数なしのものしか指定できません。
また、main(String args[])のようにString配列を引数として持つメ
ソッドを指定する場合、引数を渡す必要がなくとも何か適当な値を与え
てください。
例:"RUN main Fastup"
・QUIT(必須)
ソケット接続を切断します。最後に必ず送信してください。
例:"QUIT"
以下にJFtpの高速起動用Rubyスクリプトを公開しておきます。
(fastup_test_all.ipkに含まれているスクリプトです)
→ JFtpFSS.rb
→ JLoaderFSS.rb
【アプリケーション側の対応】
・System.exit(0)を使用しない
Java高速起動ツールでは1つのJVMで複数のJavaアプリを実行させる
ため、System.exit(0)でJVMを終了されると高速起動の恩恵が受けられ
ません。
引数を与えられてmainから起動された場合はSystem.exit(0)を呼ば
ないようにするなどの、対応を入れておいてください。
【例:staticクラス起動】
public class Test{
// 高速起動判定用フラグ
private static Boolean Fastup;
private static Frame myFrame;
// アプリケーション起動
public static void main( String args[] ){
if( args.length != 0 ){
Fastup = Boolean.TRUE;
// 起動済みなら再表示
if( myFrame != null ){
myFrame.show();
return;
}
}
〜 色々な処理 〜
}
// アプリケーション終了
public static void exit(){
myFrame.hide();
myFrame.dispose();
if( FastUp == null ){
System.exit(0);
}
}
}
・GUIアプリは起動クラスでWindowまたはFrameを継承
GUIアプリの場合は、起動クラスでWindowまたはFrameを継承しておき、
「NEW classname」で起動クラスを指定し、「RUN show」で起動した方
がよいです。
今の所、指定クラスがWindowのサブクラスでインスタンスが作成され
ている場合、起動ツールのウィンドウがアクティブになった時点で起動
中のアプリに対してshowするので、KeyHelperのShift+Homeで切替を行っ
た時に前面に表示されます。
【例:インスタンス起動】
public class Test extends java.awt.Frame{
// 高速起動判定用フラグ
private static boolean Fastup = true;
// アプリケーション起動(アイコンから起動)
public static void main( String args[] ){
Fastup = false;
Test test = new Test( args[] );
test.show();
}
// コンストラクタ(高速起動ツールから起動)
public Test(){
this();
}
// コンストラクタ
public test( String args[] ){
〜 色々な処理 〜
}
// アプリケーション終了
public void exit(){
this.hide();
this.dispose();
if( !FastUp ){
System.exit(0);
}
}
}
■高速起動ツールの変更点
このページで公開している「ザウルス版Java高速起動ツール」は、
Torutkさんの「Mercury版Javaクラス高速起動ツール」とは多少異なって
います。
ザウルスでも満足に使えるように試行錯誤しているうちに、変更点をま
とめるのが面倒になってそのままです。クラスやメソッドに対してコメン
トがまったくない部分は、確実に私が原因です(^^;
【変更点】
・ザウルスでは動作しないString.splitメソッドの削除
・ローカル127.0.0.1以外からの通信は受け付けないように修正
・QUITコマンドが送信されるまでソケット接続を維持するように修正
・デフォルトの待受けポート番号を2345→12345に変更(なんとなく)
・Java仮想マシン部は常にコマンドを受け付けるようにしました
・処理実行Method.invokeメソッドを別スレッドにしました
・起動メッセージ出力時期の変更(スクリプトで応答を取得するため)
・その他もあるかも(試行錯誤を繰り返してるうちに忘れました)
■ライセンス
ザウルス版Java高速起動ツールはGPLです。
ソースはクラスファイルと同じくjarに固めてあります。
ライセンスには疎いので、必要なコメントなどはごっそり抜けてると思
います。(何回か読んだけど、難しくてよくわかりません)
また、GPLが伝播する状況は、静的リンクおよび動的リンク、リフレク
ションを行われた側がGPLだった場合だと思うので、単に高速起動ツール
を使用して高速起動を行った場合は、GPLは伝播しないと思っています。
起動そのものを高速起動ツールに依存しているわけでもないですし。
何か誤りがありましたら、教えていただければ幸いです。
■履歴
ザウルスでJava高速起動に挑む
・2004/08/01公開
|
【 Back 】