Java 内存分配

1 Java中的内存分配

Java 程序在运行的时候,需要在内存中分配空间。为了提高运算效率,对空间进行了区域划分,每一片区域都有特定的数据处理方式和内存管理方式。Java 内存空间分为五个区域:

  • 栈(存储局部变量)

局部变量:在方法定义中或者方法声明上的变量。

栈内存中的变量在用完(脱离作用域)后立即消失。

  • 堆(存储 new 出来的东西)

堆内存的特点:

1、每一个 new 出来的东西都有地址值;

2、每个变量都有默认值

        byte、short、int、long 默认值为0

        float、double 默认值为 0.0

        char 默认值为 '\u0000'

        boolean 默认值为 false

        引用类型默认值为 null

 3、变量使用完毕后就变成垃圾,不会立即被回收,会在垃圾回收器空闲的时候被会回收。栈内存中的变量在用完(脱离作用域)后立即消失。

  • 方法区
  • 本地方法区(系统相关)
  • 寄存器(CPU 使用)

2 对象的内存图

                    

                    

1、将相关的 .class 文件加载到方法区中

2、在栈内存中加载 main()

3、生成对象 Phone phone =  new Phone()

4、对 phone 的成员变量赋值

5、调用方法时先根据方法标记在栈内存中加载方法,调用完毕后立刻消失。

6、main() 在栈内存中消失

3 成员变量和局部变量的区别:

  • 类中的位置不同

成员变量:在类中、方法外

局部变量:在方法定义中或者方法声明上

  • 在内存中的位置不同

成员变量:堆内存中

局部变量:栈内存中

  • 生命周期不同

成员变量:随着对象的创建而存在,随着对象的消失而消失

局部变量:随着方法的调用而存在,随着方法调用完毕而消失

  • 初始化值不同

成员变量:有默认的初始值

局部变量:没有默认初始化值,必须定义、赋值才能使用

  • 注意:

局部变量可以和成员变量的名称一样,方法在调用变量时,采用的是就近原则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值