Java中的内存管理


Java内存管理


  1. 对象内存管理
    • 编译好的Java程序需要运行在JVM中。
    • 程序,无论代码还是数据,都需要存储在内存中。JVM为Java程序提供并管理所需要的内存空间。
    • JVM内存分为“堆”、“栈”和“方法区”三个区域,分别用于存储不同的数据。

1.1 堆内存
堆用于储存通过使用new关键字所创建的对象。访问对象需靠引用变量(栈中创建)。
当一个对象没有任何引用时,被视为废弃的对象,属于被回收的范围。该对象中的所有成员变量也随之被回收。

JVM自带GC(Garbage Collection)垃圾回收机制,用于回收没有任何引用指向的对象。虽然有自动回收机制,但Java仍存在内存泄漏问题:不再使用的内存没有被及时的回收将导致内存泄漏,严重的内存泄漏会导致程序奔溃!GC线程判断对象是否可以回收的依据是该对象是否有引用指向,因此,当确定该对象不再使用时,应该及时将其引用设置为null。

1.2 非堆——栈
栈用于存储程序运行时在方法中声明的所有局部变量(栈主要存储方法中的局部变量)。JVM会为每一个方法的调用在栈中分配一个对应的空间,这个空间称为该方法的栈帧。一个栈帧对应一个正在调用的方法,栈帧中存储了该方法的参数、局部变量等数据。当某一个方法调用完成后,其对应的栈帧将被清除,局部变量失效。(方法结束,局部变量失效,从栈中清除)

成员变量和局部变量区别

成员变量局部变量
定义在类中,方法外定义在方法中
有默认初始值,可以不显式初始化没有默认值,必须自行设定初始值
所在类被初始化后(创建对象),存在堆中,对象被回收时,成员变量失效方法被调用时,存在栈中,方法调用结束,从栈中清除

1.3 非堆——方法区
方法区用于存放类的信息,Java程序运行时,首先会通过类装载器载入类文件的字节码信息,经过解析后将其装入方法区。类的各种信息(包括方法)都在方法区存储。(将类的成员都加载到方法区)
类在实例化对象时,多个对象会拥有各自在堆中的空间,但所有实例对象是共用在方法区中的一份方法定义的。方法只有一份

注意:当多个对象调用同个方法时,基本数据类型值的传递,分清局部变量和成员变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值