2012-02-09 23 views

答えて

4

コードをプロファイリングしていないかぎり、どちらを使用しても問題はありません。この最適化を行うと、読みやすさの面でコストがかかることになります。ほとんどの場合、このようなマイクロ最適化はパフォーマンスの向上に値するものではありません。 Oracleによると

ブール:...このデータ型は、1ビットの情報を表すが、その 「サイズ」は、正確に定義されていますものではありません。

1

はい、ブール値は1ビットしか使用できません。しかし、もっと重要なのは、コードを読んでいる別の開発者にとっては、2つの可能な状態しかないことを明確にしているからです。

+3

[ブール値](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html) - このデータ型は1ビットの情報を表しますが、その「サイズ」は正確に定義される。 – paislee

+1

このデータタイプは1ビットの情報を表しますが、その「サイズ」は正確に定義されたものではありません。 –

+0

それはそうかもしれませんが。最適なスペースを使用するためのJVMを提供するいくつかの最適化はありますか? –

1

答えは、JVMとコードによって異なります。確実に確認する唯一の方法は、実際のコードをプロファイリングすることです。

2

私は一度、ミニショップ(16ビットマシン)で相談しました。

時には、人々は16個のブール値フラグのためのスペースを含むグローバルな "フラグワード"を持つことになります。

これはスペースを節約するためです。

フラグをテストするには2つの16ビット命令が必要であり、3つ以上のフラグが必要です。

+1

「ペニー・ワイズ、ポンド・ア・フール」の素晴らしい例! –

1

表現したい状態が2つしかなく、メモリ使用量を減らしたい場合は、java.util.BitSetを使用できます。

1

ブール値が1バイトと同じ量の領域を使用するほとんどのJVMだけです。バイト/ブール値へのアクセスは、intまたはlongへのアクセスよりも機能します。したがって、パフォーマンスが唯一の考慮事項であれば、intまたはlongの方が高速になります。スレッド間で値を共有すると、キャッシュライン全体をフィールドに予約する利点があります(極端な場合)。これは多くのCPUで64バイトです。

関連する問題