アセンブリレベルのデバッガを参照するJavaの参照変数のメンバーが証明した場合は、それ自体がスタック上に保存されていません

長い、長い時間の更新なしのブログ、物事が彼のために自分自身の、オフあまりにも多くのガードが起こるので、特に忙しい、まっすぐここで何かを追加しましたが、自分で理にかなって発見プロセスを送りたいです。

多くのJava開発者が誤解を招くされていることがポイント - 完了するために、早ければ2017年5月のように証明し、時間は多分、少し詳しく少し長いです、実際には、「変数が参照されている場合は、スタック上に保存されます」。忘れてしまいました。

私はここでの結論に話をしてみましょう:変数は、この変数は、内部に書かれた方法ではないことを、スタック上に保存されているかどうか、これは変数自体への参照であるかどうか。

次のサンプルコード:

パブリッククラスメイン{
	パブリック静的無効メイン(文字列[] args){
        テストテスト=新しいテスト();
        System.out.println( "テスト - >" +試験)。
        System.out.println( "T2->" + test.t2)。
        test.fn(1,2)。
        System.out.println( "I->" + test.t2.test2_age)。
	}
}

パブリッククラスTest {
    int型test_age = 5;
    TEST2さt2 =新しいTEST2()。
    
    公共int型のFN(INT A、INT B){
    	+ bを返します。
    }
}

クラスTest2を{
	int型test2_age = 6;
}

デバッグツールリファレンスRは、物品大文字https://rednaxelafx.iteye.com/blog/1847971をコマンド内の記事が開かないと、私は次のように、間接的にオープンにプログラムを書いて、ここにいます:

輸入sun.jvm.hotspot.HSDB。


パブリッククラスOpenHSDB {

	パブリック静的無効メイン(文字列[] args){
		HSDB.main(引数)。
	}
}

次に、以下のようHSDB頻繁に使用するコマンドは次のとおりです。

ヒープを見ます:
宇宙

検索は、ヒープからオブジェクト:
scanoops 0x0f200000 0x15200000にTest2
結果
0x0f2d7c50にTest2
0x0f2d7c68にTest2
0x0f2d84e8にTest2

オブジェクトの具体的な内容を確認します。
0x0f2d7c50検査

後方参照を探します:
revptrs 0x0f2d7c50

TLABでメインスレッドを確認します。
whatisは0x0f2d6d50

リサイクルは、コマンドJDB Javaプログラムの最初のステップ実行するには、以下の具体的な処理順序のスクリーンショット:

各テーマの具体的な説明、上の説明を参照してください。仮想マシンのバイトコード命令テーブルアドレスを

終わり。

おすすめ

転載: www.cnblogs.com/joey-hua/p/11363006.html