質問
Cで、Iは、例えば、変数のレジスタを割り当てることができます:
register int i = 0;
私はJavaはインタプリタ言語である、と離れてCPUから多くの多くの抽象化であることを認識しています。
私の変数がレジスタに代わりにキャッシュするように移動するか、メインメモリのままであることを?この要求を均等に利用可能なメカニズムがあります(とアーキテクチャがそれを許可しない場合、だから何)
私はどのような方法があるとしていないが、私は前に驚いていた。
タグ、ありがとう
解決
いいえ、Javaでこれを要求する方法はありません。しかし、あなたはそのようなメンバ変数にvolatile
修飾子を適用すると、使用されてからレジスタを防ぐことができます行うことができますいくつかのものがあります。
他のヒント
Cでregister
は、登録するための変数を入れていません。それは単におそらくレジスタにそれを置くために良いだろうと、コンパイラにヒントを与えます。
Javaでは等価なものはありません。
それはそれはレジスタintは価値があるだろう作るという短いスペースで十分に使われている場合は、ホットスポットコンパイラは自分自身をそれを把握することができる必要があります。
それはで動作するようにより多くの情報を持っているので、実際には、ホットスポットのコンパイラは、C / C ++コンパイラよりも良い仕事をすることができるはずです。 C / C ++コンパイラは推測する必要が。ホットスポットは、測定することができます。
のJavaには同等ではありません。でもCに変数がレジスタに格納し、コンパイラはそれを無視するのは自由ですされるという保証はありません。
ホットスポットJITはヒューリスティックそれはコンパイルする必要があると判断するまで、Javaでは、この方法は、解釈されます。コンパイルされたコードのためには、レジスタに変数と一時的な値を割り当てる、またはレジスタのオーバフローの場合にRAMから/に書き込むための着色アルゴリズムを使用します。
私は、Javaが解釈されていることを認識しています 言語、および多くの多くであります 離れCPUから抽象ます。
あなたはかなりそこにあなた自身の質問に答え: - )
しかし、真剣に、一般的に、として明確かつ簡単にすることができますようにあなたのコードを書き、JVMは、あなたのコードの権利を治療するために何ができるでしょう。
あなたは@registerと呼ばれる注釈を作成することができますが、JVMは間違いなくそれを無視します。 例えばます。
@register int i = 0;