2011-12-17 4 views
3

私はいつもクロスプラットフォームアプリケーションの開発にJavaを使用しましたが、今回はJavaが私の問題を解決できません。問題は、計算コストがかかるアプリケーションを開発しなければならないことです。より正確に言えば、私のアプリケーションには少し重すぎるシミュレーションがあります。私はJavaのプロトタイプアプリケーションを作ったが、それは十分に速くないし、私のシミュレーションではいくつかの遅れがあるので、私はC++に切り替えることを考え始めた。 私のアプリケーションにGUIがあり、クロスプラットフォームアプリケーションのためにC++に切り替える必要があるのか​​、GUIを使ってどうすればいいですか? 私の質問は以下のとおりです。クロスプラットフォームアプリケーションを開発するためのJavaの適切な置き換え

  1. 私はQtフレームワークを使用している場合は、私のアプリケーションが大幅にに高速になるだろうか?
  2. 私のjarファイルをネイティブOSの実行ファイル(.exe、.appなど)にデプロイすると、私のアプリケーションはになりますが、かなり速くなります

p.s. Mac OSx、Windows、およびUbuntuは、私のソフトウェアのターゲットプラットフォームです。

+11

Javaバージョンでパフォーマンスが低下している箇所を分析して改善しましたか? –

+0

はい。私は自分のコードを可能な限り最高レベルまで清掃/改善しました。まだ遅いです。スレッディングは問題を解決しません。 – Pouya

+1

@JonSkeetが言ったように、Javaバージョンの問題を見つけて改良したら、C++で「遅い」部分を書くことができ、JNI経由で呼び出すことができます – Deco

答えて

4

この記事はあなたを助けるかもしれませんが、私は数年前に同じ質問に直面します。私は自分のプログラミング経験のためにJavaに固執することに決めました。なぜなら、私はC++でそれほど良くなく、プロジェクトは正直でとてもシンプルだったからです。ご存じのように、Javaは世界中で非常に普及しており、数多くのドキュメントとライブラリを用意しています.Qtの方が速いですが、手を汚す必要があります。パフォーマンスがあなたの目標なら、Go Qt。または、Java/Swing GUIおよびC++プログラムのサーバー側にアプリケーションを再設計します。とにかくここにリンクがあります。

http://turing.iimas.unam.mx/~elena/PDI-Lic/qt-vs-java-whitepaper.pdf

のJava/Swingは、特に、それらのGUI ことなく又は限定されたGUIの機能と、特定のプロジェクトのために適切であり得ます。 C++/Qtは、特にGUIアプリケーションのための総合的な優れたソリューションです。

+0

+1のQt! Javaを望んでいない/できないなら、C++で移植可能なGUIアプリケーションを作る方法は間違いありません。 – fge

2

Javaの代わりにC++を使用すると、CPUのパフォーマンスが向上します。時には10-30%も向上します。しかし、複数のスレッドを使用すると、使用可能なCPUの量も増えます。複数のスレッドを使用しても問題が解決しない場合は、ボトルネックがCPUになく、スイッチング言語が役に立たないと思われます。

ここで、Cはグラフィックカードのプログラミングに役立ちます。 CUDA。高性能処理カードを使用して、特定のタイプの問題に対して劇的に高速な結果を得ることができます。 http://www.nvidia.co.uk/object/cuda_home_new_uk.html JavaからCUDAを使用するためのJOCLライブラリがありますが、実際の作業を行うコードはC言語のようなものです。

C + +に切り替えてもキャッシュのサイズ、メモリの帯域幅、IOの帯域幅、メインメモリのサイズが増えないので、ボトルの首が本当にどこにあるのかを判断することをお勧めします。

関連する問題