[ノートを読む] JavaプログラミングのアイデアのJavaデータの格納場所

Javaのデータ格納場所

P46ページ感想

まず、事前知識

  • スタックは、システムによって自動的に割り当てられ、Javaプログラマは、スタックを動作させるためには直接の権限を持っていません
  • ヒープメモリ領域のすべてのスレッドで共有され、各スレッドのスタックは、排他的です。
  • ヒープは、オブジェクトを作成するために、新しいキーワードを使用して、オブジェクトをヒープメモリに割り当てられますとき、プログラマアプリケーションです。スタックので、システムによって自動的に割り当てられ、したがって、アプリケーションは、メモリヒープのために使用される新しいキーワードの効率及び速度より高くなっています。
  • 、およびヒープ空間が連続した領域ではなく、スタックは連続領域であり、必要なスタック空間が少ない残りのスペースよりも、システムが自動的に割り当て、スタックオーバーフローエラーが他の報告されますされた場合、システムは、よくスタックのサイズを決定しますオペレーティングシステムは、アプリケーション・ヒープ・メモリは、システムは、その後、リンクリストをトラバースアプリケーション空間での行の最初のメモリ空間のノードアドレスを見つけ、そしてうレコードの空きメモリアドレスのリンクリストを持っていることをオペレーティング・システム上の研究のコースが知ることができる場合ノードは、フリーリストから削除した後、プログラムメモリ空間に割り当てられています。割り当てプロセスの詳細については、オペレーティング・システム上のコースを学ぶために行くことができます。

二、Javaの6つの保管場所

2.1。登録

登録に対処するための場所で最速のコンピュータハードウェアであるCPU、内部に位置し、それは本当のハンドラの場所です。コンパイラによる登録は必要に応じて割り当て、さらにはコンパイラ、および、そのため、オペレーティングシステムのプリエンプティブスケジューリングを通じて非常に限られた時間の記憶レジスタをCPUの処理を得ることができるようにする必要性、開発者は登録されませんプログラムで直接制御は、また、レジスタ上の任意の操作をすることはできません。

2.2。スタック

一般的にスタックと呼ばれるスタックは、一般的には処理速度レジスタの後、RAM領域を参照します。スタックでは、参照されるオブジェクトは、通常時にスタックポインタの下に、あなたはその逆メモリーや悪徳を解放、新しいメモリを作成し、保存されています。オブジェクトが作成されるとき。オブジェクトはヒープメモリ空間に配置され、オブジェクトへの参照は、スタックメモリに配置されます。そして、Javaコンパイラは正確にすべてのスタックと上に保存されたデータの「長さ」を知っている必要があります「保存
の時間を。」どのくらいの残りのスペースをスタックメモリ領域を回復し、また知るために。

2.3。ヒープ

ヒープメモリはRAM領域であり、それは新しいオブジェクトをヒープメモリに保存され、Javaコンパイラはスペースがヒープ内に残っているどのくらいのを気にする必要はありません、特別なJavaがあった場合には、オブジェクトの実際の位置が格納されています「ガベージコレクタは」、それは新しいで作成されたすべてのオブジェクトを検索し、もはや参照されているものを識別しません。その後、それは自動的に新しいオブジェクトを使用することができるようにするために、メモリにそれらの未使用のオブジェクトによって占有解放します。この手段は、私たちは回復メモリの問題を心配する必要はありません。単にオブジェクトを作成し、あなたが不要になったとき、彼らは自動的に残します。この排除C ++プログラミングにおける一般的な問題:それはスタックからの参照を使用して終了しましたので、オブジェクトの破壊---スタック上のオブジェクトを引用メモリ「メモリ」を解放するプログラマ忘れ、破壊され、それは、ガベージコレクタを破壊するだけ出ていたときに実際のオブジェクトはまだのみ使用への参照が存在しない場合に、ヒープに格納されています。

class StaticTest { 
Static int i = 47; 
}
//现在我们 new两个对象
StaticTest st1 = new StaticTest(); 
StaticTest st2 = new StaticTest();
//st1.i和st2.i都是47 尽管我们制作了两个StaticTest对象,但它们仍然只占据StaticTest.i的一个存储空间。这两个对象都共享同样的i 此时不管是哪个对象执行st1++,另一个对象的i也会加一

2.5。定数プール

定数記憶。定数の値は、多くの場合、プログラムコードに直接配置されています。彼らは決して変更ので、これは、安全です。いくつかの定数は、ROMにそれらを考慮することが可能である、保護されています。

2.6非RAMストレージ

非RAMストレージ。データがプログラム外部から完全に独立している場合、プログラムは、プログラムの制御外に存在することができる実行されていません。二つの主要な例は、「ストリームオブジェクト」とは「固定物。」オブジェクトをストリーミングする場合、オブジェクトは、一般的に別のマシンに送信するバイトのストリームとなります。固定オブジェクトの場合、ディスク上に保存されたオブジェクト。プログラムが終了した場合でも、彼らは変更されずにその状態を保持します。データ記憶装置、他の媒体上に存在することができる特に有用な技術何かこれらのタイプのために。必要であれば、まだ通常、RAMベースのオブジェクトに戻すことができます。Javaの1.1は軽量永続化のためのサポートを提供します。Javaの将来のバージョンでは、より完全なソリューションを提供するかもしれません。

保管場所の3つの基本タイプ

基本データ型のための非常に多くの言葉がでJavaプログラミングのアイデアの保存場所にあります。

これらのプリミティブ型は、Javaは、同様にCとC ++との採用しました。言い換えれば、代わりに新しいと変数を作成するのが、「自動」変数が参照されていません作成します。特定の変数の値を受信し、スタックに配置され、それがより効率的にアクセスすることができます。

しかし、私はいくつかの関連情報を見つけるためにBaiduの、だけでなく、ヒープ上の基本データ型は語りました。基本的なタイプは、クラス内に作成されたときに、まず、オブジェクトの8つの基本タイプが保管場所の基本的な種類として見ることができない櫛は、分割されるべきです。このような

class Demo{
    int a = 1;//情况1
    public int test(){
        int b = 2;//情况2
    }
}

ケース1では、グローバル変数を作成します。オブジェクトはヒープに一緒に保存されているとおり、2の場合には、プログラムがメソッドを呼び出したときに、システムはメソッドスタックのための方法を確立し、ローカル変数を作成し、変数がメソッドを置く彼らのアプローチの中で宣言しましたスタック、方法は終了するスタックは、メソッドをリリースする際に、対応する変数がスタックの破壊、唯一の理由の方法で有効であることができるローカル変数で終了過程で宣言されました。このように、基本的なタイプは、完全にスタック領域に格納されていません。基本は、上述したその理由は、されるヒープメモリ領域のすべてのスレッドで共有され、各スレッドのスタックは、排他的ですあなたはインスタンス変数の中にスタック上になる場合は、グローバル変数はヒープ上に作成されるので、何も複数のスレッドが、明らかに間違っている同じリソースオブジェクトにアクセスしないがあり、スレッドセーフではありません。しかし、ローカル変数がスタック上に作成されるため、各メソッド呼び出しがスタック方式、メモリの排他的な領域を作成するために、他のスレッドは、スタック上のGCを軽減します作成するために、スレッドのリソースへのアクセスを持っていません。ローカル変数は、スレッドセーフであるので、圧力は、プロセスの終了、スタックメモリを排除する、対応する方法で、メモリは、自然に消えるようなローカル変数によって占められます。

おすすめ

転載: www.cnblogs.com/blackmlik/p/12203771.html