JVM内存模型有堆、栈和方法区,每一个都有其独特的作用,不过最让大家感兴趣的是java内存的方法区,很多人想知道java内存的方法区其他叫法是什么?接下来我们就来给大家讲解一下这方面的内容。
方法区(Method Area)与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数(是唯一的数据)。当java虚拟机通过类加载器加载这个类的时候,这个类的信息就会保存到方法区中,虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-Heap(非堆),目的应该是与Java堆区分开来。
java方法区存储哪些数据?
方法区可以看作是一块独立于Java堆的内存空间。方法区的内存结构方法区保存的信息包括:
(1)类型信息:包括了JVM加载类型(类class、接口interface、枚举enum、注解annotation)的完整有效名称(包名+类名)、其直接父类的完整有效名称、类型的修饰符、其直接继承的接口列表。
(2)域(成员变量)信息:类型的所有成员变量的相关信息以及成员变量的声明顺序。
(3)方法信息:包括了类型的成员方法的名称、返回类型、参数列表、修饰符、字节码、操作数栈、局部变量表、异常表等。
(4)静态变量:non-final的静态类变量和全局常量。区别在于全局常量在编译器给指定值,静态类变量在加载时准备阶段赋初值,初始化阶段再给指定值。
(5)JIT代码缓存:即时编译产生的代码缓存,将热点代码编译成与本地平台相关的机器码,并保存到内存。
(6)运行时常量池:各种字面量和对类型、域和方法的符号引用。
总之方法区与Java堆一样,是各个线程共享的内存区域,但是方法区可以看作是一块独立于Java堆的内存空间,用于存储已被虚拟机加载的各种数据!最后大家如果想要了解更多java常见问答知识,敬请关注奇Q工具网。
推荐阅读:
java关键字能定义成实体类参数吗?java关键字static 怎么用?