Java类和对象的内存分配

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

一、每次建立对象时,都须要进行加载建立2个操做:
spa

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

② 在堆中建立新对象对象

二、栈、堆、方法区的存储blog

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

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

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

三、方法的调用机制变量

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

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

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

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

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
}
  • 基本类型调用方法内存分配

相关文章
相关标签/搜索