2013-03-22 7 views
9

私のクラスの1つに、タイプCharacterのフィールドがあります。私はcharよりも優先しました。フィールドが「値なし」で、nullという継ぎ目があるため、この情報を表現する最もクリーンな方法です。Java文字対char:メモリ使用量はどうですか?

しかし、私はこのアプローチのメモリフットプリントについて疑問に思っています。私は何十万ものオブジェクトを扱っていますが、2つのオプションの差はごくわずかです。

私の最初の賭けはcharが2バイトであるのに対し、Characterはオブジェクトであるため、そのライフサイクルをサポートするためにはるかに多くの時間がかかります。しかし、IntegerCharacterなどのボクシングされたプリミティブは普通のクラスではないので(ボクシングとボクシングについて考えてください)、JVMが何らかの最適化をボンネットの下で行うことができるかどうか疑問です。

また、Characterは、他のもののように収集されたゴミ、または別のライフサイクルですか?共有リポジトリからプールされていますか?この標準またはJVM実装に依存していますか?

この問題についてインターネット上で明確な情報が見つかりませんでした。何か情報を教えてもらえますか?

+0

'のために\ 0 '*無価値* CHAR – UmNyobe

+0

確かとして使用することができ、私はこれを知っています。 :)アプリケーションドメインを考えると、〜、#または中国語の文字を使用することもできますが、これはポイント – gd1

+0

ではありません。プリミティブは、文字列にchar配列を使用することを知っているため、 (Javaの配列自体はオブジェクトだが議論の余地のある問題:D) – Freak

答えて

1

あなたはあなたがしてキャラクターを作成するためにCharacterを使用している場合は、

Character.valueOf('c'); // it returns cached value for 'c' 

Character c = new Character('c');// prefer to avoid 

後は、javadocのからの抜粋である使用することを好みます。

新しい文字インスタンスが必要とされていない場合、このメソッドが頻繁に要求された値をキャッシュすることで有意に良好空間と時間のパフォーマンスをもたらす可能性があるとして、この方法Character.valueOf()は一般的に、コンストラクタCharacter(char)に優先して使用する必要があります。

+0

実際、私はボクシングによってそれを暗黙的に作成する。 – gd1

+1

@ gd1ボクシングでは、キャッシュされた値が利用可能であれば使用されます。 – assylias

+0

'Character'ではjavapでチェックする必要がありますが、' Integer'では 'valueOf'が使われます。 –

0

あなたが述べたように、それはNULLにすることはできません通常のcharよりもRAMに多くの場所を取るために持っているので、Characterオブジェクトは、nullなりますように、Character sがchar秒のスーパーセットです。あなたのCharacterはこれ以上のRAMや実行を使用しないように

しかし、あなたのコードの特定の部分には、JITコンパイラは、その一部をごCharacterは決してnullであるAN常に定期charとして使用されていることを検出して最適化することができるかもしれません遅くはありません。私はちょうどこの時点で推測していますが、JITがこの正確な最適化を実際に実行できるかどうかはわかりません。

0

代わりにintを使用してください。 「no char」を表すには-1を使用してください。このパターンの優先順位の

多くは、たとえばint read() in java.io.Reader

+0

もう一度UmNyobeさんのコメントのように...私はあなたの良いアドバイスを感謝しますが、私はこのような回避策について考えることができます...実際にはすべてが代替パターンとして実行できます。それにもかかわらず、問題はそれに関するものではありません。 – gd1

+0

いいえ...私はここで 'int'について話しています、それはあなたのケースでは、すべての文字を表すことができます。センチネルの値は、0x0000-0xFFFFの文字であると誤解することはできません。これは一般的な習慣で、 'Reader.read()'のjavadocを参照してください。 – ZhongYu

+0

OK、私はあきらめます。気にしないで。 – gd1

関連する問題