検索
ホームページJava&#&チュートリアルJavaオブジェクトストレージのメモリレイアウト方式とは

Java オブジェクト ストレージのメモリ レイアウト

ご存知のとおり、Java はオブジェクト指向言語です。では、オブジェクトには何がメモリ内に含まれますか? まず第一に、ほとんどのオブジェクトはヒープに格納されます。 (エスケープ を除く)。

ヒープ内のオブジェクト ストレージは主に 3 つの部分に分割されます。

  • オブジェクト ヘッダー、オブジェクト インスタンス データ、アライメント補足 (配列は配列の長さがもう 1 つあります)

  • オブジェクト ヘッダー:

    マーク ワード: ハッシュコードとロックを格納しますオブジェクトの情報(ロックアップグレード)、または世代経過やGCフラグなどの情報

    Type pointer: オブジェクトが属するクラスへのポインタを格納します(class file#) ## in メタデータ)、JVM はこのオブジェクトがどのクラスに属するかを決定します。

  • オブジェクト インスタンス データ:

    によって生成されたオブジェクト情報new は、親クラスの属性情報を含む、クラスの属性データ情報を格納します。

  • アライメントの補足

    配列オブジェクトには複数のデータが格納されます。アライメント

    JVM にはオブジェクトの占有が必要です。スペースはメモリ割り当てを容易にするために 8 の倍数でなければなりません (最小単位としてバイト単位で割り当てられます)。そのため、この部分は、番号。

Java オブジェクトのアクセス位置決め

  • 主流のアクセス方法には、主に

    handledirect が含まれますポインタ

  • ハンドル:

    メモリの一部は、ハンドル プールとして Java ヒープと、そこに格納されるオブジェクトに分割されます。スタック内の参照 ハンドル アドレス。ハンドルには、オブジェクト インスタンス データとデータ型の特定のアドレス情報が含まれます。

  • ダイレクト ポインタ:

    java ヒープ オブジェクトのメモリレイアウトはデータ型の関連情報へのアクセスを防ぐ方法を考慮する必要があり、参照に格納されるのはオブジェクトのアドレスです。

  • オブジェクトへの直接ポインター アクセスは、追加の間接アクセス オーバーヘッドを必要とせず、ハンドルは便利です。オブジェクト アドレスが変更された場合 (ガベージ コレクションによってオブジェクト アドレスが移動されます)、必要なのは、ハンドル内のポインタ参照自体を変更する必要がありますが、変更する必要はありません。

Java オブジェクトの作成プロセス

  • 仮想マシンは新しい命令を受け取ると、まず指定されたクラスが

    であるかどうかを確認します。ロードおよび検証済み、準備 (クラス内のすべての静的変数にメモリ領域を割り当て、それらの初期値を設定します )解析および初期化

  • クラス チェックの後、仮想マシンは新しいオブジェクトにメモリを割り当てます

    同時実行状況で割り当てられたヒープ メモリの安全性を確保する方法

    仮想マシンは CAS を使用して障害回復を構成します。アトミック性を確保してください。

    メモリ割り当てをスレッドに残し、スレッドの作成時に領域を割り当て、メモリを割り当てるタスクをスレッドに残します。 TLAB (スレッドローカル割り当てバッファ) で開く

  • メモリを割り当てた後、どのクラスのインスタンス、ハッシュコード、クラスのメタデータ情報ポインタ(メソッド領域)などのオブジェクトヘッダを設定します

  • init メソッド (カーネル メソッド) を実行し、メンバー変数を初期化し、インスタンス化コード ブロックを実行し、クラスの構築メソッドを呼び出し、ヒープ内のオブジェクトの最初のアドレスを参照に割り当てます。変数。

Java オブジェクトによって割り当てられたメモリはスレッドセーフですか?

  • CAS は、更新のアトミック性を確保するために失敗時の再試行を追加します。

  • メモリ割り当てをスレッドごとに異なるスペースに分割します。つまり、各スレッドは、ローカル スレッド割り当てバッファ TLAB と呼ばれる Java ヒープ内の小さなメモリ ブロックを事前に割り当てます。 . どのスレッドがメモリを割り当てたいですか? 対応する TLAB に割り当て、TLAB が使い果たされた後に同期します。

Java クラスのインスタンス化シーケンス

  • 親クラスの静的メンバーと静的初期化ブロックは、コード内に出現する順序で実行されます

  • サブクラスの静的メンバーと静的初期化ブロックは、コード内に出現する順序で実行されます

  • 親クラスのインスタンス メンバーとインスタンス初期化ブロックは実行されます

  • 親クラスの構築メソッド

  • サブクラスのインスタンス メンバーとインスタンスの初期化ブロックを、出現する順序で実行します。コード内で、

  • サブクラス構築メソッドを順番に実行します。

以上がJavaオブジェクトストレージのメモリレイアウト方式とはの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター