简单代码的内存分析

1.代码1的内存分析:


分析:1.程序从main入口,首先要将Person类的字节码文件加载到方法区,且只在首次调用该类时加载一次,再次使用该类创建对象不需要加载。2.new Person()时会在堆中开辟一块区域,如0x5555,作为类的对象的存储区域,此时会初始化属性值。3.main方法中的p1为局部变量,所以存储在栈中,且p1为引用数据类型,指向了0x5555.

2.代码2的内存分析(复杂)

代码如下:

class Person{

        int id;

        int age;

        String school;

        Person (int a,int b,String c){

                id=a;

                age=b;

                school=c;

        }


        public void setAge(int a){

                age=a;

        }

}

public class Test {

    public static void main(String[] args) {

                  Test t=new Test();

                  int age=40;

                  Person tom=new Person(1,20,"海淀");

                  Person jack=new Person(2,30,"朝阳");

                  t.change1(age);

                  t.change2(tom);

                  t.change3(jack);

                  System.out.println(age); //40

                  System.out.println("id:"+jack.id+",age:"+jack.age+",school:"+jack.school); //id:2,age:66,school:"朝阳"

    }

    public void change1(int i){

                i=3366;

    }

    public void change2(Person p){

              p=new Person(3,22,"西城");

    }

    public void change3(Person p){

        p.setAge(66);

    }

}

内存分析如下:

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。