(Java)关于·类的内存分析,及调用方法内存的具体变化

1·第一个需要分析内存的代码

public class Person{
int id;
int age;
public static void main(String args[] ) {
Person pl=new Person ();
}
  1. 初步分析,创建对象前,需要先加载类,这个类加载在方法区
  2. 只要带new,就在堆中开辟空间
  3. 总结一下过程,首先先加载=右边的代码,因为是要运行方法,所以要先加载方法,根据方法所含内容在堆中创建一个对象,并赋予它属性 (如果有构造器的话,按构造器来初始化属性),再然后在main方法的栈帧中给p1开辟一个空间,将创建对象的地址赋予他

 


2·第二个需要分析的代码

public class Person{
int id;
int age;
String school:
public Person(int a, int b, String c) {
id=a;
age=b;
school=c;
}
public static void main(String args[) {
Person p=new Person(1, 20, “海淀") ;
}
}

完整步骤

  1. 首先在栈中为main方法创建一个栈帧,并且在栈桢中为p开辟一块空间
  2. 其次再栈中为构造器在一个栈帧,并在此栈帧中开辟三个空间,分别给形参a b c
  3. 之后运行等号右边的代码,创建对象。先加载方法,将person.class的字节码信息在方法区创建
  4. 再根据方法,在队中开辟一块空间(地址是0x67),并且空间中有id age school三个空间
  5. 再调用有参构造器,将1,20赋给形参a,b。
  6. 创造一个字符串常量池,将"海淀"(只要是汉字都要放里面)放里面,并且赋予一个地址
  7. 将“海淀”的地址0x38赋给c
  8. 之后再将栈中的a b c分别再赋给堆中id age school(注意,school的值依然是一个地址值)
  9. 再将0x67赋给p

 

对不同空间的总结

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值