浅谈Java对象内存管理

Java对象内存管理分为三块
分别为 堆内存 方法区
JVM提供为java程序提供并且管理所需的空间

- 堆

  • 专门存储用new关键字创建的对象
Student s = new Student();//new一个对象

对象new Student()创建的对象位于堆内,其成员变量也位于堆中。

  • 成员变量的生命周期
s=null;
System.gc();//让垃圾回收器快些回收

对象被创建时存在堆内存活,当不存在任何引用指向该对象(s被指向null)时对象被垃圾回收器生命周期结束。

  • 内存泄漏
    不再使用的对象没有被垃圾回收器回收;若对象不再用了,及时将引用设置为null

- 栈

  • 存放正在调用中方法的所有局部变量
    调用该方法时在栈中分配一块区间作为栈帧,栈帧包含所有的局部变量(包含参数)
    调用方法结束时,栈帧消失,局部变量也一块消失
public void test(){
    Student s = new Student();//new一个对象
    Student ss = s;
    int num = 5;
}

test函数被调用时候
对象new Student()存放于堆中。
引用 s存放于栈中。
Student ss = s;引用 ss存放于栈中。 栈中存在两个引用,s(0x1111)与ss(0x1111),两者地址相同所以指向同一个对象。
num变量存放于栈中为当前正在执行的方法分配的栈帧中。
方法执行完毕
栈中为当前正在执行的方法分配的栈帧消失,栈帧内的局部变量num也一并消失

s = null;

将s指向null后,栈中依然存在两个引用,s(null)与ss(0x1111),两者地址不相同,ss依然指向之前创建的Student对象,而s不指向任何对象。

- 方法区

  • 专门用于存放类的信息(方法),程序执行时通过类装载器载入类的信息,经过解析后将其装入方法区。重复使用只装载一次
  • 方法区只存放类信息的方法,堆中存放成员变量,每个对象拥有自己的成员变量,共享方法区中类的成员方法。
  • 方法只有一份 通过this区分具体的引用
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值