关于java的方法区,为什么叫方法区,是否与实际用途相悖?
在java中,栈中存放的是用来保存方法运行时状态的栈帧,存储了局部变量表,操作数栈等,而方法区存放的是已加载的类的基本信息、常量、静态变量等。
从上述看来,方法区存放的东西与方法并没有什么联系,反而栈中存放的是与方法相关的一些信息,那么为什么还取名为方法区,意义何在?
github.com/jidong-cs
20 人赞同了该回答
题主说到栈中存放了局部变量表等与方法有关的信息,但方法中还有指令代码这一重要内容,它既没有放在栈(Stack)中也没放在堆(Heap)中,那它放在哪呢?
其实,方法区中除了包括你所说的“已加载的类的基本信息、常量、静态变量等”外,还包括编译器编译后的代码,而且这应该是方法区中主要的一部分,毕竟类中主要是方法和属性,而类中的属性,如果是实例域的话则新建对象后存储在堆(Heap)中,静态的话就如你所说存储在方法区中,因此该区域中方法占主要部分,这应该是此运行时数据区称为方法区的原因吧。
题主可以参考JVM Specification中的相关内容: