1

Java ライブラリを使用する Python でいくつかのコードを作成し、Jython を使用して解釈しましたが、少し遅いです。スクリプトを起動するたびにこのコードを解釈する代わりに、どうにかしてこのコードをコンパイルできますか? (私はjythoncについて読みましたが、Jythonの新しいバージョンでは非推奨です)

4

1 に答える 1

3

Jython、javac、および jythonc

Jython は常に起動時にアプリケーションをコンパイルします。つまり、アプリケーションを起動すると、Python コードが Java VM バイトコードにコンパイルされます。その後、VM はこのバイトコードを実行します。Jython と javac の違いは、javac はバイトコードを含む .class ファイルを作成するのに対し、Jython は実行時にバイトコードを作成することです。

jythonc は Python コードに対して javac が Java コードに対して行うのと同じことを行います。つまり、コードを .class ファイルにコンパイルし、ディスクに保存します。パフォーマンスに関しては、これは Jython の標準的な動作よりも優れているわけではありませんが、他の JVM 言語で Jython コードを使用/拡張することが可能になります。

jythonc は、プログラムのパフォーマンスをまったく向上させません。

パフォーマンスの向上

プロファイラーを使用して、コードのホット スポットを検出します。プロファイラーは、プログラムがほとんどの時間を費やしている場所に関する情報を表示します。

アナグラムのコンストラクターがアプリケーション実行時間の 70% を超えていることを示す NetBeans プロファイラーの出力例。

アプリケーションのホットスポットがわかれば、そのパフォーマンスを最適化する方法がわかります。上のスクリーンショットでは、アプリケーションの時間の 70% 以上がコンストラクターで費やされています ( <init>)。

次に、いくつかの手法を使用してパフォーマンスを向上させることができます。

  1. より良いアルゴリズムを使用してください。該当する場合、これはパフォーマンスに最も大きな影響を与えます。

  2. スペースの取引実行時間。頻繁に呼び出す関数の結果をキャッシュします。特に、データベースやネットワーク アクセスによって取得されたデータなど、関数が比較的遅い場合はそうです。

  3. オーバーヘッドの少ない言語でホットスポットを再実装します。あなたの場合、Java でホットスポットを再実装し、Jython から呼び出すことができます。

于 2012-07-09T12:46:47.330 に答える