java 对象 栈_java----对象,堆,栈,方法区问题

问题是:每个实例对象(包含了Filed对象和Method对象)中的方法对象是真实的方法对象还是对该方法对象的引用?

1

当一个类有多个实例对象时,那么这些对象中的方法对象指向的是同一个方法对象么?

指向的是方法区中的同一段地址空间么?那么这些不同实例对象中的相同的方法对象是相等的么?

本人测试结果:

jdk的api中重写了method对象的equals方法(该方法中认为只要方法签名相同,参数列表相同,返回值相同或者是同一对象是返回true);测试结果:同一个类的不同的实例对象的相同的方法即是相等的;(通过内容判断,是相等的)

但是使用==判断时,就不相等,此结果说明了不同的实例对象的同一个方法引用的对象不是同一个;同时也说明了一个类中的方法的实例对象不止一个(静态方法除外);

由测试结果初步认为,每一个实例对象都有自己的独自的方法对象,

想问一下,每一实例对象在自己的方法对象中保存了什么?好像除了对方法签名与方法区的方法地址做映射之外,什么也保存不了,(否则在多线程单例模式下会有线程危机),

所以既然这样,java设计之初为什么将对象中的方法对象的引用变量指向另一个对象,再指向方法区的地址??有必要绕一圈么?

个人以前以为,堆中的对象中的方法对象就是对方法区中方法的直接引用(即==的结果应该相等,即引用的是同一个地址),但现在看来,好像不是,貌似是通过方法对象在中间进行了过渡(准确说是插了一脚),但实在不了解他的存在价值,不知道是不是设计时存在其他考虑,或有其他用途?还是我上面的验证结果是错的?突然发现以前习以为常用着很简单的东西,只要一深想会发现都不简单!

https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5.4

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值