2021-02-23关于java的方法区,为什么叫方法区,是否与实际用途相悖?

关于java的方法区,为什么叫方法区,是否与实际用途相悖?

在java中,栈中存放的是用来保存方法运行时状态的栈帧,存储了局部变量表,操作数栈等,而方法区存放的是已加载的类的基本信息、常量、静态变量等。
从上述看来,方法区存放的东西与方法并没有什么联系,反而栈中存放的是与方法相关的一些信息,那么为什么还取名为方法区,意义何在?

 

 

季冬

github.com/jidong-cs

20 人赞同了该回答

题主说到栈中存放了局部变量表等与方法有关的信息,但方法中还有指令代码这一重要内容,它既没有放在栈(Stack)中也没放在堆(Heap)中,那它放在哪呢?
其实,方法区中除了包括你所说的“已加载的类的基本信息、常量、静态变量等”外,还包括编译器编译后的代码,而且这应该是方法区中主要的一部分,毕竟类中主要是方法和属性,而类中的属性,如果是实例域的话则新建对象后存储在堆(Heap)中,静态的话就如你所说存储在方法区中,因此该区域中方法占主要部分,这应该是此运行时数据区称为方法区的原因吧。
题主可以参考JVM Specification中的相关内容:

  1. JVM运行时数据区
  2. 方法区

https://www.zhihu.com/question/23599282

https://www.zhihu.com/question/23599282

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值