天天看点

jvm内存区域分配

关于jvm内存区域(如下图所示),一说是分成四块,即方法区、java堆、java栈、本地方法栈,另一说是分成五块,在前四块基础上加上一个指令计数器及其他隐含寄存器。

其实本质都是一样的,寄存器确实也算一小块区域,但是有时候因为占的空间太小了也就没算在内了,下面对前四块的功能进行一个介绍与分析。

jvm内存区域分配

方法区(method)

方法区是系统分配的一个内存逻辑区域,是JVM在装载类文件时,用于存储类型信息的(类的描述信息)。

它保存方法代码(编译后的java代码)和符号表。存放了要加载的类信息、静态变量、final类型的常量、属性和方法信息。JVM用持久代(Permanet Generation)来存放方法区,可通过-XX:PermSize和-XX:MaxPermSize来指定最小值和最大值。

我通俗一点来说,就是方法区里面保存了类的很多信息,包括字段的信息(字段名、类型、修饰符)、方法的信息(方法名、参数类型、返回值类型、修饰符、异常、字节码)等等。

另外在方法区中还存在着一个静态区,像被static、final等修饰的变量(final修饰的自然是常量)都存放在静态区中。

java堆(heap) 和 java栈(stack)

本地方法栈(java中的jni调用)