Java类和对象的内存分配

  • 类的加载时机:

1、创建对象

2、调用类的静态成员

3、加载子类

  • 类在实例化后的内存分配

Java类和对象的内存分配

1、每次创建对象时,都需要进行加载创建2个操作:

① 先去判断需要的类是否已经加载,如果已经加载了,则无需再加载,如果没有加载,则需要通过类加载器加载类信息到方法区

② 在堆中创建新对象

2、栈、堆、方法区的存储

栈:对象的引用、局部变量

堆:对象和全局变量(属性)

方法区:类信息、属性信息、方法信息

3、方法的调用机制

每次调用方法,伴随着“方法入栈”操作,也就是栈中为该方法分配了一块空间,用于保存该方法中涉及到的变量

每次方法调用结束,伴随着“方法出栈”操作,也就是栈中分配的空间被释放了

在类的方法调用过程中,首先判断方法区是否存在该方法,存在则方法入栈,调用结束后出栈。

  • 对象在调用类方法时的内存分配

Java类和对象的内存分配

Java中方法传递参数是按值传递

如果是基本类型,则值 代表元素内容

如果是引用类型,则值 代表地址号

特殊情况

在调用的方法中对引用型变量形参重新实例化,改变的是地址,则不会影响实参,即传值进去没用重新实例化为新地址。

class Test{
      public void method(Person persion){
        person=new Person();
        person.name = "Zane";
        System.out.println(p.name);    // 输出为Zane
    }
}
class Person{
    String name;
}
public static void main(String[] args){
    Test t = new Test();
    Person p = new Person();
    p.name = "Mort";
    t.method(p);
    System.out.println(p.name);    // 输出为Mort
}
  • 基本类型调用方法内存分配

Java类和对象的内存分配