对象创建的内存细节及匿名对象

本文深入解析Java内存模型,包括栈、堆、方法区等区域的功能与特性。详细介绍了对象的创建、存储位置及其生命周期,以及垃圾回收机制如何工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建对象内存

  • Java栈的区域很小 , 大概2m左右 , 特点是存取的速度特别快。栈存储的特点是, 先进后出
  • 存储的是: 基本数据类型的数据 以及 引用数据类型的引用!
  • 存放的是:类的对象 。

  • Java是一个纯面向对象语言, 限制了对象的创建方式: 所有类的对象都是通过new关键字创建。

  • new关键字, 是指告诉JVM , 需要明确的去创建一个新的对象 , 去开辟一块新的堆内存空间:

    堆内存与栈内存不同, 优点在于我们创建对象时 , 不必关注堆内存中需要开辟多少存储空间 , 也不需要关注内存占用时长 !

  • 堆内存中内存的释放是由GC(垃圾回收器)完成的。

  • 垃圾回收器 回收堆内存的规则: 当栈内存中不存在此对象的引用时,则视其为垃圾 , 等待垃圾回收器回收 !

    Person p1=new Person();
    Person p2=p1;  //p1和p2共用一个内存空间,两者指向的内容一致
                   //p1调用的属性改变,则p2的相应属性也变
    
方法区

当类的对象被创建时,该类的属性和方法就会被加载到方法区中。

存放的是

  • 类信息

  • 静态的变量

  • 常量

  • 成员方法

    方法区中包含了一个特殊的区域 ( 常量池 )(存储的是使用static修饰的成员)

PC寄存器
  • PC寄存器保存的是 当前正在执行的 JVM指令的 地址 !
  • 在Java程序中, 每个线程启动时, 都会创建一个PC寄存器 !
本地方法栈
  • 保存本地(native)方法的地址。

总结:
对象被创建后,存放在堆中,堆存放的是地址;对象的相关属性的值存放在栈中。
当某个栈无任何对象引用时,该栈就会变成垃圾,等待GC回收。
方法区:存放类的相关属性和方法及静态变量。

匿名对象

  • 没有对象名称的对象 就是匿名对象。例,new Person();
  • 匿名对象只能使用一次,因为没有任何的对象引用,所以将称为垃圾,等待被G·C回收。
  • 只使用一次的对象可以通过匿名对象的方式完成,这一点在以后的开发中将经常使用到。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值