2011-07-22 17 views
2

私はVortex86チップ上のLinuxとWindows XP Embeddedの両方で実行されているいくつかのJavaソフトウェアを書いています。ソフトウェアは通常、Windows XPでは2〜3秒でロードされますが、Linuxでロードしようとすると約10〜12秒かかります。私はHello Worldプログラムを実行するのに1秒かかるので、コード最適化の問題とは思わない。JVMの速度を上げるにはどうすればよいですか?

ご意見をいただければ幸いです。マシンがこれらのプログラムを実行しているだけなので、Javaをプリロードすることはオプションですが、どのように行うのかわかりません。

+1

あまりにも多くの可能性のある要因が、少なくともさらなる情報なしでは言えません。 –

+0

これは実行可能なjarですか?あなたは春のような容器を使っていますか?これに影響する可能性のあるブートストラップコードはありますか?我々は本当により多くの情報が必要です。すなわち、xpマシンとlinuxマシンのハードウェア情報は同じですか?彼らは同じjvmを実行していますか?どのjvmを使用していますか? – marcelog

+1

両方のプラットフォームで同じjvmを使用していますか?サーバーのランタイムは遅くなりますが、通常のjreより速く実行されます。 – Joshua

答えて

2

マットが指摘したように、遊びには多くの要因があります。あなたの記述が不完全な場合は、目標とする推奨事項を作ることは不可能です。バージョンのことを確認し

  • GCとあなたのプログラム(javaの-Xms512m -Xmx512m)に割り当てられたメモリを増やす:

    • を-verboseを使用してメモリ使用率プロフィール:しようとするいくつかのことがあり、ここで、と述べましたあなたは、パフォーマンスを測定しているときに、両方のマシンが静かであるかどうかJavaが両方のマシンにほぼ相当し、両方のマシンのハードウェアはほぼ同じであることを
    • チェック
    • チェック
    • 両方が32ビットまたは64のいずれかで実行されていることを確認してくださいあなたが混在した結果を報告しているわけではありませんプロファイル。あなたのプログラムが一つのプラットフォームのために使用することができるが、他のために欠落している可能性があり、起動スクリプトのための
    • チェック(例えばA run.properties)
    +0

    これは同じマシンで、Javaは両方のオペレーティングシステムで同じです。私は32ビットで動作しています。また、私がロードしている実行可能なJarファイルです。 – amadeobellotti

    +0

    OK - プロファイラをアタッチし、プログラムの動作が異なるかどうかを確認します。あなたのプログラムはI/Oをしていますか? –

    +0

    また、どのように同じマシンにすることができますか?それらの1つは虚像ですか?それは確かにあなたを遅らせるでしょう! –

    2

    あなたが前のJavaを実行している場合は、共有ファイルおよびRT。瓶は記憶に残る。すなわちあなたのために予め装填される。 Linuxマシンのメモリが非常に少なく、毎回ディスクからすべてのものをロードしなければならないことは想像できます。

    自分のLinuxボックス

    $ time java -cp . HelloWorld 
    Hello World. 
    
    real  0m0.043s 
    user  0m0.030s 
    sys  0m0.010s 
    

    に開始および実行するための合計時間は0.043秒です。こんにちはの世界と同様のテストをすることができますか?

    +0

    実数0m1.002;ユーザー0m0.730s。 sys 0m0.83s; – amadeobellotti

    +0

    使用しているハードウェアは?どのくらいの空きメモリがありますか? –

    +2

    1GHzプロセッサを使用し、私は約300MBのRAMを持っています – amadeobellotti

    関連する問題