Java虚拟机有一个在所有JavaVirtualMachine线程之间共享的方法区域,该方法区域类似于用于编译常规语言代码的存储区域,或类似于操作系统进程中的“文本”段。它存储每个类的结构,例如运行时常量池、字段和方法数据,以及方法和构造函数的代码,包括类和实例初始化和接口初始化中使用的特殊方法(2.9)。本规范没有规定方法区域的位置或用于管理编译代码的策略,方法区域可以是固定大小的,也可以根据计算的要求进行扩展,如果不需要更大的方法区域,则可能会收缩。方法区域的内存不需要是连续的。
Java虚拟机实现可以为程序员或用户提供对方法区域初始大小的控制,在不同大小的方法区域中,还可以提供对最大值和最小方法区域大小的控制。
与方法区域相关的例外情况如下:
如果方法区域中的内存无法满足
分配请求时,Java虚拟机抛出一个outofMemoryError。
在jdk1.8之后方法区转移到了本地内存中,一般很难出现内存溢出的现象。