JVM実装と運用原則スタックとヒープ

個人ブログのナビゲーションページ(クリック、右側にリンク個人のブログを開くために):ダニエルは、テクノロジ・スタックにあなたを取ります 

(0,1バイナリであるの.classファイル)プラットフォームに依存しない「バイトコード・プログラム」にコンパイルされたJavaコンパイラで書かれたJava言語のソースコードは、その後、OS上のJavaインタプリタは、インタプリタJVMは、基礎とコアのjava、コンパイラとOSプラットフォーム間でのJava仮想プロセッサです。

A、JVM原則

1. JVMはじめに

JVMは、基礎とコアのjava、コンパイラとOSプラットフォーム間でのJava仮想プロセッサです。上記のjavaで実行することができる基礎となるオペレーティング・システムおよびハードウェアプラットフォームのコンピュータベースの抽象化のソフトウェアに実装される方法を利用し、バイトコードプログラムです。

限り、JVMなどのJavaコンパイラは、JVMコードまたはバイトコードファイルを理解することができる構築します。バイトコードプログラムにコンパイルされたJavaソースファイル、JVMによって各命令は、特定のプラットフォームで実行し、異なるプラットフォーム上でマシンコードに変換します。

【/ erji] 2 [/ erji]実行するためのJava言語処理し
0,1バイナリで、プラットフォームに依存しない「バイトコードプログラム」(の.classファイルにコンパイルされたJavaコンパイラで書かれたJava言語のソースプログラムを、 )、その後、OS上でJavaインタプリタで解釈。

JVM実装と運用原則スタックとヒープ

プログラムの実行の3 JVMプロセス

I.読み込みクラスファイル。

II。管理とメモリの割り当て。

III。実行ガベージコレクション。

JavaのプログラムのJVMランタイム環境の構造によって、JRE(Javaランタイム環境)

JVM実装と運用原則スタックとヒープ

スタックとヒープで二、JVM

JVMでは、メモリは二つの部分、スタック(積み重ね)、およびヒープ(ヒープ)に分割され、ここでは、JVMの原則の観点から、スタックとヒープメモリ管理を知るようになり、そしてこれらの原則によって、Javaの静的メソッドと静的の明確な理解プロパティの問題。

1.はじめに

スタック(積み重ね)がJVM命令メモリ領域です。スタック管理が非常に簡単であり、バイト変位を対応するスタックポインタを押して、データまたは命令のバイトの長さを押し、データまたは命令のバイト数に一定の長さをPOP、スタックポインタがポップされます。速く、容易な管理、および各データのバイト長の命令や操作のスタックが知られています。したがって、基本データ型のJava、Javaの命令コードは、定数がスタックに格納されています。

ヒープ(ヒープ)JVMデータ記憶領域。ヒープ管理オブジェクトのインスタンスを保存するように設計された、メモリ空間の各割り当ての非常に複雑な、可変長です。特定のオブジェクト・インスタンスを格納するためのヒープ割り当てメモリ、実際には、唯一のオブジェクトのインスタンスが格納された属性値、属性タイプとオブジェクト自体や他のマークの種類、方法は、(命令がスタックに格納された)オブジェクトを保存しません、オブジェクトインスタンスと類似の配列のヒープ比較に格納されたメモリオブジェクトを割り当てます。オブジェクトインスタンスおよびヒープ内の良好な分布したら、スタック、ヒープ内のオブジェクトのインスタンスを見つけるのは簡単、ヒープ内のオブジェクトのインスタンスの位置を突き止めるために使用される4バイトのメモリアドレスを保存する必要があります。

次の図に示すJVMアーキテクチャ:

JVM実装と運用原則スタックとヒープ

データは何2、命令は何である、オブジェクトのどのメソッドとプロパティは、オブジェクトのですか?

1)メソッド自体は、スタックに格納された命令のオペコード部分です。

2)実際のアドレスに格納されたスタック、スタックオブジェクト・タイプに格納されたスタック(単純型、ヒープに格納された値)に格納された命令のオペコードの次の命令のオペランド部分として内部変数の方法は、。命令オペコードと命令とオペランドの完全なJava命令を構成しています。

3)データ領域ヒープに格納されたデータとしてオブジェクト・インスタンスの属性値を含みます。

オブジェクトインスタンスの一部として、非静的オブジェクトプロパティヒープに格納され、オブジェクトのインスタンスがアクセスするスタックポインタアドレスで保存されなければなりません。あなたがオブジェクトインスタンスとその非静的プロパティの値にアクセスすることができますこのように、完全にオブジェクトのインスタンスで利用可能スタック・アドレス・ポインタに依存します。

3.非静的メソッドと静的メソッドの違いは?

非静的メソッドがそれにJVMを暗黙の着信パラメータを、持っている、と我々は独立したコードを書くか、この暗黙のパラメータは、スタック内のオブジェクトのインスタンスである:非静的メソッドと静的メソッドは、非常に有意差を持っていますアドレスポインタ。したがって、非静的メソッド(コードにスタック命令)は、常に彼らのプライベートデータ(ヒープのオブジェクト属性値)を見つけることができます。もちろん、非静的メソッドも呼び出す前に隠されたパラメータを、非静的メソッドを取得する必要があり、新しいオブジェクトインスタンスである必要があり、アドレスポインタスタックを取得し、それ以外のJVMは、非静的メソッドに渡されたパラメータを非表示にすることはありません。

静的メソッドは、そのような隠れたパラメータではありませんので、クラスファイルは静的メソッドを呼び出すことができますスタックJVM、クラスローダへの負荷である限り、新しいオブジェクトを必要としません。もちろん、この時点では、静的オブジェクト属性へのアクセスがヒープではないです。

概要:JVMのClassLoader負荷にクラスファイルは、メソッドの命令は、この時点で、スタックに保持するとデータがヒープではありません。非静的メソッド場合、与えられる暗黙的なパラメータ値が存在しないので、技術は、データ領域ヒープにアクセスすることができない方法は、静的な、直接シーケンス実行される命令コードである場合には、命令コードが、この時はもちろんである、命令の実行を開始します。プログラムが順次命令技術を実行されるように、したがって、スタック・アドレス・ポインタに非静的メソッド、ヒープ割り当てデータの最初の新しいオブジェクト、および非静的メソッドを実行する前に、命令コードはデータヒープにアクセスすることができるであろうゾーン。

静的および動的属性:

前述のダイナミック・オブジェクト・インスタンスと属性がヒープに格納されており、ヒープスタック・アドレス・ポインタはアクセス命令に(クラスメソッド)であることができなければなりません。

したがって、それを推測することができます:動的な属性はヒープに格納されているとは異なり、静的属性は、スタックに格納されています。それはオフセットを計算することは容易であるように、すべてのスタックであるため、スタック命令とデータが固定されている長さ、したがって、どのような指示(クラスメソッド)に関係なくは、静的クラスのプロパティにアクセスすることができます。静的プロパティは、スタックに格納されているのではなく、グローバルな性質を持っているからです。

JVMにおいて、静的属性は、スタック、ヒープ動的属性は、データ記憶領域に記憶されている命令メモリ領域に格納されています。

要約:

1)ランタイムスタック、およびヒープ記憶ユニットのユニットです。

ヒープは、データストレージの問題を解決するため、どこに置くために、データを配置する、すなわち方法、すなわちどのようにプログラムの実行に、操作上の問題を解決するために、またはデータを処理する方法2)スタック・プログラム。

4.なぜヒープを区別し、それから出てスタックする必要がありますか?

まず、ソフトウェア設計の観点から、スタックは、処理ロジック、およびヒープを示すデータを表します。この分離、処理ロジック明確になるように。分割統治のアイデア。この分離は、モジュラー思考は、ソフトウェア設計のあらゆる側面に反映されています。

第二に、単離されたスタックとスタック、スタックの内容スタックの複数の(同一のオブジェクトにアクセスする複数のスレッドとして理解されるべきで)共有することができるようになっています。この共有の利点は多いです。一方で、これは(例えば:共有メモリ)のデータ相互作用の効率的な共有を提供し、他方では、ヒープ・キャッシュは、スペースを節約する、スタックの全てへのアクセスを共有し、一定にすることができます。

このようなシステムのコンテキストの保存など理由は必要ランタイムスタックの第三は、実行されている、我々はセグメントを分割する必要があります。それはスタックの記憶内容への能力に制限されますので、スタックだけなので、育つことができます。ヒープ内の山盛り異なるオブジェクトは、それが動的に成長させることが可能となるよう、必要に応じて、スタックとヒープの分割として動的にスタックにスタック内のみ対応するアドレスレコードを増加させることができます。

第四には、オブジェクト指向のヒープとスタックの完璧な組み合わせです。実際には、途中でオブジェクト指向プログラミングは、プログラムの以前の構造は、実装の違いがありません。しかし、オブジェクト指向の導入は、その問題への思考アプローチが変更されていますが、思考のより自然な方法があります。我々はオブジェクトを開くと、オブジェクトのプロパティが実際にヒープに格納されたデータであることがわかります。そしてオブジェクト(メソッド)の行動、スタック上のロジックを実行することです。我々はオブジェクトを作成するときに、データ構造の製造である実際には、ロジックは、プロセスデータに書き込まれました。

プログラムを実行するには、常に出発点があります。C言語と同じように、Javaがメインで開始点です。どのようなJavaのプログラム、実行するプログラムを見つけるために、メインの入り口を見つける:)

5.ヒープメモリとは何ですか?どのようなスタック預金?

1)オブジェクトがスタックに格納されています。スタックは、ヒープ内のオブジェクトに基本データ型と参照を格納しています。オブジェクトの大きさが推定されていない、または動的に変更することができるが、スタック、4btyeの基準に1つのオブジェクトのみに対応します。

2)なぜ、基本的なタイプがそれをヒープ入れませんか?それが占めるスペースのは、1から8つのバイトが一般的であるので - より少ないスペースが必要とされる基本的なタイプのため、それはダイナミックな成長には表示されませんので - 彼がいる場合、スタックは、十分に保存されているので、固定長(また、後述のスペースの無駄、)ヒープのほとんど意味があります。基本的なタイプを引用し、オブジェクトがスタックに格納されている、といくつかのプログラムを実行して、彼らのアプローチが統一され、バイト数がある、と言うことができます。データ・スタックは、データのヒープであるので、しかし、基本的なタイプ、オブジェクト参照、およびオブジェクト自体の区別は、あります。最も一般的な問題は、Javaパラメータの受け渡しでその問題です。

3)Javaのパラメータはそれに値渡しすると?または参照?プログラムは常にこのようにパラメータを渡し、スタック内で行われる実行されている場合、配信の問題は、基本的な型とオブジェクト参照を存在します。これは、直接オブジェクト自体を渡しません。

何ポインタが存在しないので、Javaメソッド呼び出しは、パラメータを渡す場合は、call-行われます

PS:ヒープとスタック、スタックは、最も基本的なことを実行しています。プログラムではなく、スタックせずに、ヒープを実行することはできません。ヒープは、白色は、共有メモリの一部であることをスタックするためのデータ・ストレージ・サービス、ヒープです。しかし、からこそのJavaガベージコレクションすることが可能となり、ヒープとスタックのイデオロギー分離、の。

付属のJava / C / C ++ /機械学習/アルゴリズムとデータ構造/フロントエンド/アンドロイド/パイソン/プログラマ読み/シングル書籍図書Daquanは:

(乾燥した個人ブログでそこ開くには、右クリックしてください):技術的なドライ開花を
===== >> ①[Javaのダニエルは、高度なへの道であなたを取る] << ====
===== >> ②[+ ACMアルゴリズムデータ構造ダニエルは、高度なへの道であなたを取る] << ===
===== >> ③[データベースダニエルは高度への道であなたを取る] << == ===
===== >> ④[ダニエルWebフロントエンドの高度への道であなたを取るために] << ====
===== >> ⑤[機械学習のPythonとダニエルあなたにエントリを取ります高度なロード] << ====
===== >> ⑥[建築家ダニエルは高度への道であなたを取る] << =====
===== >> ⑦[C ++ダニエルは、道路上をお連れに進ん] << ====
===== >> ⑧[ダニエルは高度への道であなたを取るのiOS] << ====
=====> > ⑨[ウェブセキュリティダニエルは、高度なへの道であなたを取る] ===== <<
===== >> ⑩[Linuxオペレーティングシステムを、ダニエルは高度への道であなたを取る] = << ====

何の未収果物はありません、あなたの若い友人は、友人がテクニックを学びたい願って、道路の方法ですべての障害を克服することは、技術に結びつける本を理解して、コードをノック、原理を理解し、実践を行くことになります決定しましたそれはあなたの将来、あなたの夢を生活、あなたの仕事をもたらすでしょう。

公開された30元の記事 ウォンの賞賛0 ビュー904

おすすめ

転載: blog.csdn.net/jishulaozhuanjia/article/details/104716778