发布网友
共5个回答
热心网友
方法区,又称永久代(Permanent Generation),常称为PermGen,位于非堆空间,又称非堆区(Non-Heap space)。
方法区是被所有线程共享。
所有字段和方法字节码,以及一些特殊方法如构造函数,接口代码也在此定义。
简单说,所有定义的方法的信息都保存在该区域,此区属于共享区间。
静态变量 + 常量 + 类信息(构造方法/接口定义) + 运行时常量池存 在方法区中 。
但是, 实例变量 存在 堆内存 中,和方法区无关。
以上,只是逻辑上的定义。在HotSpot中,方法区仅仅只是逻辑上的,实际上还是包含在Java堆中,也是就说,方式区在物理上属于Java堆区中的一部分,而永久区(Permanent Generation)就是方法区的实现。
热心网友
方法区跟堆不是一个概念,是不同的2个区域,也没有从属关系
热心网友
可以说是堆的逻辑部分,但是它有一个别名为Non-Heap(非堆),目的就是为了将其与Java堆区分开。
热心网友
好像不是,编程语言的方法据我所知都是通过栈内存来存储的,栈后进先出的特性很适合存储方法
热心网友
jdk 8 已经没有永久代 即把方法区放到了 native 本地内存中 , 方法区还是方法区 但是 实现从堆的永久变到了真正的外部, 好像是为了合并做准备