2011-01-24 9 views
7

JavaのC++スマートポインタの行に沿って何かがありますか?Javaに「スマートポインタ」はありますか?

+0

あなたは何かを混乱させるかもしれないと思います。スマートポインタは、例えばポインタを提供するラッパーである。参照カウントまたは境界チェック。 Javaには未処理のポインタはなく、GCが組み込まれています。 – delnan

+0

スマートポインタについては、Wikipediaの説明を参照してください。http://en.wikipedia.org/wiki/Smart_pointer –

+1

言語実装そのもの(JVM)すべてではないにしても)、通常はC++でスマートポインタによって処理されるジョブです。 –

答えて

12

Javaの「ポインタ」(参照情報)はすべてスマートポインタです。

Javaは管理対象環境で実行されます。つまり、Javaはガベージコレクタを使用して、もはや参照されなくなった変数をクリーンアップします。

Javaの参照は、ポインタとは少し異なります。 Javaは、C++で見られるすべてのポインタ値と数学を抽象化します。したがって、新しいオブジェクトを作成して変数に格納すると、そのオブジェクトをJavaの「スマートポインタ」のバージョンに格納しています。

+1

JavaのリファレンスとC++のスマートポインタとの違いについて詳しく説明することができます。 – Pacerier

+0

スマートポインタは、フリーでデストラクタが呼び出されたときの開発者コントロールを提供します。低レイテンシ・プログラミングでは、Javaで一般的な応答時間の「ジッタ」を排除します。 autoポインタも同様です。ヒープのどの部分でもなく、実際のオブジェクトをスタックに置くことで、より良いローカリティが得られます。 どちらもJavaで使用できない機能です。 –

3

いいえ、Javaにはどのクラスのポインターもありません。とにかくガベージコレクタがあると、メモリ割り当て/解放サイクルの自動管理の参照カウントが行われているため、一般にスマートポインタは必要ありません。

+0

@ pablo-tx ..ガベージコレクタだけがメモリ管理に役立つのですか? – garima

+2

これは正確ではありません。java **のオブジェクトは**実際のリソースへのポインタです。 –

+0

@garima:ご質問は分かりますが、YES:ガベージコレクタがメモリ管理に役立ちます。 –

5

はい、いいえ。いいえ、ポインタオブジェクトがJavaに存在するようなものはありません。はい、すべてのオブジェクトは「スマートポインタ」という意味でガベージコレクションの対象となり、それ自身の生涯を話すことになります。

6

私はメモリ管理のコンテキストでスマートポインタについて聞いたことがあります。メモリ管理はJavaプラットフォームの中核であるため、明らかにその必要はありません。

ガベージコレクションをある程度カスタマイズすることができるので、最も近いのはjava.lang.ref.WeakReferenceとjava.lang.ref.SoftReferenceです。

関連する問題