Java から C への優れたクロスコンパイラを知っている人はいますか?
それらはうまく機能しますか?
これはこの質問と非常によく似ており、回答が役立つ場合があります。JavaをCに変換するコンパイラ。
概要: このためのツール(Toba、GCJなど)がありますが、移植されているすべてのJavaライブラリーで問題が発生する可能性があります。結局、ツールはおそらく作業の一部しか実行せず、残りの一部は手動でコーディングする必要があります。
最初のステップとして、JavaコードをJava1.4で使用可能な標準ライブラリのみを使用するように変換することをお勧めします。実際、移植手順を簡素化するために、java.lang。*またはjava.util。*パッケージに含まれていないものを可能な限り切り離したいと思うでしょう。
コードベースのサイズによっては、ツールに依存するよりも、バルクを直接書き直す方が実際には簡単な場合があります。 JavaとCには多くの構文の類似点がありますが、Cの単純な手続き型コードとJavaのオブジェクト指向機能との不一致により、問題が発生する可能性があります。 自動化されたツールは、これを回避しようとすると、実質的に保守不可能なCコードを生成する可能性があり、微妙なバグが発生する可能性が常にあります。
2016年の更新:これを行わないでください。これを提供するために使用されたオプション(GCJなど)は維持されておらず、CよりもJavaに堪能な開発者を見つけるのは間違いなく簡単です。また、Javaのパフォーマンスは向上し続けており、ベースラインの実装も同様のパフォーマンスになる傾向があります。最適化されたCはさらに高速ですが、JREバージョンごとにエッジがますます小さくなります。
Javaコードをcに移植したい理由を説明できますか?
パフォーマンスの場合は、あまり改善されない可能性があります。Java はガベージ コレクション言語であり、現在、メモリの割り当てと割り当て解除の呼び出しを効率的に挿入できるアルゴリズムはありません。この問題を解決しようとする多くの研究者がいて、興味深い解決策がいくつかありますが、大規模なプログラムに拡張できる優れた商用製品はまだ見たことがありません。詳細については、以前のISMM会議の議事録を参照してください。
コードを高速化したい場合は、プロファイラーを使用してホット メソッドを見つけることをお勧めします。ホットメソッドを試して最適化し、それでもまだ十分でない場合は、JNI を試して使用してください。