2010-11-23 10 views
1

私はちょうど約writing efficient code in J2MEのBlackBerryドキュメントの記事を読んでいます。最終的な静的な文字列は、静的な最終的な文字列より効率的ですか?

この記事では、「文字列に静的変数を使用する」ようにアドバイスするセクションがあります。推論の理由は、コンパイラはstatic finalの参照を文字列リテラルとしてインライン展開するので、最終的にはそれを残すほうがよい(静的参照を取得する方が文字列プールから取得するよりも安価であると仮定していると思います)。

これはすべてのJVMで当てはまりますか?私の最後の仕事で私の上司は私たちの頭に私たちは常に、私たちの定数のためにstatic finalを使用しなければならないと打ちました。私たちはJavaでの組み込みプログラミングを行っていたので、彼はパフォーマンスのために本当に頼りになりました(この場合、メモリやスピードにもっと関心があるかどうかはわかりませんが)。私の上司は何年もJavaをやっており、本当に彼のことを知っています。今私は矛盾したアドバイスを得ています!

だからどちらが本当に良いですか?メモリ節約の観点かスピードの観点か、J2MEかJ2SEのどちらかで答えることができます。

+7

おそらくstatic finalを使用してください。マシンに何かインライン化すべきかどうかを判断させる。また、文字列のインライン展開のパフォーマンスが心配な方には、javaはおそらく適切な言語ではありません – Falmarri

+0

AndroidまたはBlackBerry用のUIをプログラミングする場合、言語の選択肢はありません。しかしそれを超えて、何が起こっているのかを知っておくのが一番です!さあ、男、それは原則の問題です!あなたはマシンに従わず、マシンはあなたに従います!また、なぜこれはコメントであり、答えではないのですか? –

+0

アンドロイドのようなものには選択肢がないが、インライン化する文字列はボトルネックではなく、バックグラウンドで実行されている60の他のアプリケーションです。また、実際に何が起こっているのかを知ることをお勧めしますが、javaなどの言語では、仮想マシンが自分の望むコードを実行することができます。 – Falmarri

答えて

3

一般に、それらは同じである必要があります。 (同じが、それは決して重要でなることを十分に近いと定義付)

私は非常に強く、あなたがすなわち、これはであるかどうかによって定義された非静的ネス対静的を持つ(自分の意図をエンコードする必要があることを主張するだろうむしろ、いくつかの任意の「性能向上」

あなたは、これは重大なパフォーマンスの問題は(そしてあなたがそれを測定するだけで、AFTER!)であることが判明した場合、私はコンパイラとしてそれを分類するよりも)インスタンス定数対定数クラス/JVMの不具合を修正し、静的な問題を解決する回避策を、その理由を示すコメントとともに配置します。

+0

私は静的なものを交換していません、私は最終的なものを交換しています。そして、私は通常、その違いはごくわずかであることに同意するでしょうが、一方で、RIMのこの人にはそうではないと言ってきました。あなたは7000点以上のポイントを持っていますが、この人はおそらくVM自体の共同作者です。私は誰を信じるべきですか? –

+0

回答:私はベンチマークを信じて、そのベンチマークを_only_するべきです。はい、知っています。しかし、これは特定のパフォーマンス向上に関するものではありません。これは私の全チームが今後使用できるプログラミングスタイルを選択することです。私は両方の方法の長所と短所を比較し、それに基づいて1つを選ぶことができれば、ベンチマークを実行する必要はありません。 –

+0

@Neil Traft:私の担当者に基づいて私の答えを判断すべきではありません:)それは、古い情報に基づいてパフォーマンスを向上させることは本当に簡単です。次のリリースが来て、コンパイラ/ VMの遅さを修正すると、おそらくパフォーマンスが向上します!あなたは、決して知らない。だから私はあなたがそれについて考えすぎる前にそれが遅すぎるかどうかを見るためにそれを測定すべきだと言う理由です。 –