• Java类和对象的内存分配


    • 类的加载时机:

    1、创建对象

    2、调用类的静态成员

    3、加载子类

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

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

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

    ② 在堆中创建新对象

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

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

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

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

    3、方法的调用机制

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

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

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

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

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

  • 相关阅读:
    【一些思路】web和app测试的区别
    【Python】I/O和比赛的其他一些问题
    【Python】迭代器和生成器的个人理解,再讲一讲协程
    【TCP/IP】如果打不开一个网页,需要如何处理?
    DOM事件
    GASP动画的基本使用
    Velocity的使用方法
    Swiper和Swiper Animate使用方法
    DOM操作
    JavaScript函数
  • 原文地址:https://www.cnblogs.com/MWCloud/p/11163320.html
Copyright © 2020-2023  润新知