私はカスタムJavaランダムフォレストの実装をCythonを利用するSciKit実装と比較しています。アルゴリズムは非常に似ており、私は同じデータセットでそれらをテストしました。 Javaの実装には、Pythonよりもはるかに多くのメモリが必要です。私はこれがいくつかの原因によって引き起こされる可能性があることを知っていますが、そのうちのどれがJavaのスペース効率に対してどれくらいの割合を占めているかを把握したいと思っていました。両方のアルゴリズムが最適に書かれていると仮定するか、少なくともほとんど最適であると仮定すると、メモリ使用量にどの程度の違いがあると思いますか?Java対Cythonメモリ効率
答えて
LinuxまたはMacの場合は、「time」コマンドを使用してテストできます。これにより、各プログラム(Java、Python、C)が実行されるのにどれくらい時間がかかります。メモリ効率をテストする場合は、デバッガ(Cのgdbなど)を使用して、コードをステップ実行して、「ボンネットの下で」何が起こっているのかを正確に確認することができます。私はそれが本当にそれになると思う、いくつかのベンチマークテストを実行する必要があります。
私が見つけたことは、いくつかの状況ではJavaがCより高速で実行されることがありますが、時にはCがより良いメモリ使用と最適化を持つことがあります。私はこれが役立つことを願っています
私は、リンゴからJavaへの実装が、Pythonバージョンに匹敵することを期待しています。あなたが言うように、ここには多くの要因がありますが、メモリ使用量に大きな違いが見られる場合は、Java実装の記述方法に何かがある可能性が最も高いです。
私の経験では、Javaプログラムは、それが必要以上に多くのメモリを使用する場合、通常、その理由は、アプリケーションのようなものやっているということであるということである。
- は、一度に入力レコード1を取り、コレクションにそれを置きます
- つまり
一度にコレクション1からプロセスの各レコードは、それが不必要にヒープ内の大量のデータを保存するということで、それはアプリケーションのデザインについてですが、Javaの程度の基本的な何もありません。
メモリが500%増えると、これはJava固有の可能性はほとんどありません。これは、アルゴリズムで使用されるすべてのバイトに対してJavaが5バイトのオーバーヘッドを持つことを意味します。それが現実であれば、Javaは非常に高価になります。 GoogleやAWS上で動作するクラウドソフトウェアの多くを実行することは実際には実行可能ではなく、Androidには意味をなさないだろう。ソースがなければ、なぜ誰があなたにこれを見ているのかを伝えることはそれほど多くありません。
私が考えることができるのは、Cythonが各単語に8バイトを置いているときに64ビットを使って1バイトを保持するようなものだけです。これが当てはまる場合は、Javaバージョンで修正できるものです。
CythonではなくPythonを明確にするために。つまり、CコードとJavaコードの効率を比較しています。 – user123959
@ user123959 cython.orgのメインページによると、 "Cython言語はPython言語のスーパーセットです。"多くの言語はC言語にコンパイルされており、Javaもそうです。生成されるCの「効率」は、コンパイラによって異なります。 CとJavaを単に比較しているわけではありません。 CythonにJavaよりも少ないメモリを使うことを可能にするいくつかのトリックがあるかもしれないが、私はそれがJavaコードが書かれている方法である可能性が高いと思う。 – JimmyJames
- 1. Java効率 - ポイント対座標
- 2. AESのメモリ効率
- 3. メモリ効率の良いパワーセットアルゴリズム
- 4. サブフォルダのEnumerateFilesメモリ効率
- 5. cython共有メモリ - ブロック
- 6. Javaループ効率
- 7. Java、メモリ不足、非効率的な機能
- 8. 計算効率:スパース対フル
- 9. unfoldr対zipの効率
- 10. 削除対象効率
- 11. FORTRANメモリ使用率 - 静的対動的
- 12. Mysqlのメモリ効率と型宣言
- 13. gettextの効率:メモリ内変換
- 14. Java:効率的なArrayListフィルタリング?
- 15. 多対多テーブルの効率的なクエリ
- 16. コード対DBのトランザクションの効率
- 17. Webプロキシスクリプト対HTTPプロキシの効率性?
- 18. メモリ内のJavaオブジェクトのサイズを効率的に判断する方法は?
- 19. Excelファイルを読み込むメモリ効率のよいJavaライブラリですか?
- 20. 効率的なJavaオブジェクトグラフのシリアル化
- 21. Javaの効率的なマルチスレッド・アレイ構築
- 22. 私のJavaのパワーメソッドの効率?
- 23. メモリ効率が良い、SQLiteデータベースかXML文字列[]ですか?
- 24. シンプルで効率的なメモリ割り当てアルゴリズムが必要
- 25. fork()とコピーライト時のメモリ共有の効率化
- 26. python numpyとメモリ効率(参照渡しと値渡し)
- 27. はPHPのfile_get_contentsメモリとデータ効率が良いですか?
- 28. メモリ/プロセッサはどれが効率的ですか?
- 29. メモリ効率のよいC++文字列(インターン、ロープ、コピーオンライトなど)
- 30. メモリ効率的かつ迅速なiPhone/Androidの辞書ストレージ/アクセス
「require」と言ったときに、Python実装が使用しているものの周りに最大ヒープサイズを設定すると、メモリエラーが発生することになりますか? – JimmyJames
はい、そうです。 – user123959
メモリ使用量の違いを数値化できれば助かります。例えばそれは100%多くですか? – JimmyJames