jvm的内存:
1、堆
2、方法区:
方法区与JAVA堆一样,是各个线程共享的内存区域用于存放- 已被类加载的信息- 编译器编译过后的代码- 常量- 静态变量- 运行时常量池等数据运行时常量池用来存储编译器生成的各种字面量和符号引用。
什么是常量池
1.字节码文件中有个constant pool,就是常量池。2.当字节码文件被加载到内存中之后,方法区中会存放字节码文件的constant pool相关信息,这时候就成为了运行时常量池。3.常量池保存了各种字面量和对类型、域和方法的符号引用。4.常量池可以看做是一张表,虚拟机指令根据这张表找到要执行的方法名、类名、参数类型、字面量等类型。
为什么需要常量池
一个java源文件中的类、接口,编译后会产生一个字节码文件,而java中的字节码文件需要其他的数据支撑,通常这种数据很大,不能直接存放到字节码里面。所以把对这些数据的引用存放到常量池,在真正需要使用的时候,通过动态链接将符号引用转换为直接引用。
运行时常量池
运行时常量池具有动态性。也就是在方法区中的运行时常量池是可以发生变化的。而常量池就不行,它是静态的,当编译生成字节码文件直接就不变了
3、虚拟机栈
虚拟机栈是java方法执行的内存模型,线程私有,每个方法都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链表和方法出口等信息。每个方法从被调用到执行结束,就对应着一个栈帧从虚拟机栈中从入栈到出栈的过程。stackOverflowError:线程请求的深度大于虚拟机允许的深度;OutOfMemoryError:如果虚拟机可以动态扩展,而拓展是无法申请到足够的内存。4、本地方法栈
jvm调用本地方法
5、程序计数器
记录当前线程所执行到的字节码的行号,每个线程都有一个程序计数器,唯一没OutOfMemoryError情况的内存区域。
jvm的内存
最新推荐文章于 2022-06-30 18:28:25 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)