ホームページ  >  記事  >  Java  >  メモリ内の Java オブジェクトの構造は何ですか

メモリ内の Java オブジェクトの構造は何ですか

PHPz
PHPz転載
2023-04-30 13:31:141232ブラウズ

1. オブジェクト ヘッダーは MarkWord と KlassPoint に分かれています。

MarkWord (マーク フィールド): 年齢やロックされたマークの位置情報の代わりに、オブジェクトの HashCode がデフォルトで保存されます。オブジェクトの状態に応じて独自の記憶領域を再利用します。つまり、MarkWord に保存されているデータは、ロック マークの位置が変わると変化します。

KlassPoint (タイプ ポインター): オブジェクトのクラス メタデータへのポインター仮想マシンはこのポインターを使用して、オブジェクトがどのクラスに属しているかを判断します。

2. インスタンス データ。この部分には主にデータ情報と親クラス情報が格納されます。

3. 位置合わせの充填。仮想マシンではオブジェクトの開始アドレスが 8 バイトの整数倍である必要があるため、パディング データはバイト アライメントのためだけに存在する必要はありません。

空のオブジェクトは、位置合わせとパディングにより 8 バイトを占めます。位置合わせとパディングを 8 バイト未満にすると、自動的に完了することができます。

public class TestStudent {
public static void main(String[] args) {
int n = 10;  //栈存储
int m = 10;  //栈存储
Student stu = new Student();
//属性赋值
stu.name="张三";
System.out.println(stu.name);  //null   张三
System.out.println(stu.age);   //0  
//调用
String name = "ls";   //局部变量(常量池)
String aaaa="ls";
String pwd = "123";
stu.login(name,pwd);
System.out.println("name:"+name);   //ls
System.out.println("执行");
}
}
 
class Student {
// 属性
String name;
int age;
//用户登录
// String userName;
// String pwd;
public void login(String userName,String pwd){
System.out.println(userName+"===="+pwd);   //ls  123
}
public void show() {
System.out.println("姓名:" + name + ",年龄:" + age);
}
}

以上がメモリ内の Java オブジェクトの構造は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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