对象内存分析

    技术2024-07-23  67

    对象内存分析

      JAVA中的内存区域可以分为栈空间和堆空间两块区域。

    栈空间(虚拟机局域变量表):存放的是局部变量存放的是局部变量(包含编译期可知的各种基本数据类型、对象引⽤-即堆内存的地址,可以简单的理解为对象的名称), Java栈是与线程对应起来的,每当创建⼀个线程, JVM就会为这个线程创建⼀个对应的Java栈。堆内存:保存的是真正的数据,即对象的属性信息。

    用代码来看看这两个部分的内存。

    class Person{ String name; int age; } public class Test{ public static void main(String[] args) { Person per = new Person(); per.name = "张三" ; per.age = 18 ; } }

    main方法中的第一行代码

    Person per = new Person();

      出现关键字new 就表明在堆上分配内存并且产生了person类的对象per引用了这部分内存。内存图如下: 接下来的两句代码:

    per.name = "张三" ; per.age = 18 ;

    通过per引用设置堆中的属性值,内存图如下: 对象(引⽤数据类型)必须在实例化后调⽤,否则会产⽣ NullPointerException (运⾏时错误),编译时不会出错。 NullPointerException 在各位今后的开发⽣涯中会⼀直存在,只有引⽤类型(数组、类、接⼝)才会产⽣此类异常。以后出现此类异常,就根据出错位置查看引⽤类型变量是否初始化。

    Processed: 0.014, SQL: 10