方法到底放在虚拟机栈Java Stack、方法区Method Area和堆Heap三者中的哪一个地方呢?

请添加图片描述

方法到底存放在哪个位置呢?

看了很多博客有说方法在方法区里的,还有说方法在堆里的,还有说方法是从方法区加载到堆里的,过程中造成了很堵混淆的地方,个人疏离了一遍,才疏学浅,理解错误请指正。

个人理解:

  • Java栈存储的是栈帧,方法的栈帧而非方法;每个方法对应一个栈帧
  • 方法区比较容易理解的就是它存放的是类的信息,类的信息自然也就包括类里面的方法信息、字段信息等等,这里容易混淆的是:方法区存放的是类的信息也可以说是模版,套用过去普通的方法信息,也就是方法的模版;所以实际方法存放的位置还是不在这里,这里存放的知识模版
  • 堆:关于堆我是看了这么一段理解的
    “类加载器读取了类文件后,需要把类、方法、常变量放到堆内存中,保存所有引用类型的真实信息,以方便执行器执行。”
    很多博客上都说是把类、方法、常变量放到堆内存,这里又造成一次混淆:类、堆到底在方法区还是在堆;但是结合另一种说法应该就能比较清楚了。
    “堆Heap存放的是类的实例”,那么这句话就已经说的很清楚了类加载器加载到堆内存的东西,实际就成了对象实例,那么类里面定义的普通方法,自然也就包含在实例对象里面

结论

栈存放的是方法的栈帧,不是方法
方法区:存放的是方法的信息,相当于方法的模版,被包含在类的信息里,也不是方法
堆:存放的才是实际对象的方法,实例化后的方法

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值