jvm的内存

本文解析JVM内存结构,重点讲解堆、方法区(包括常量池)、虚拟机栈和本地方法栈的作用,探讨为何需要常量池以及其动态特性。理解程序计数器在执行流程中的角色,以及可能遇到的错误类型如StackOverflowError和OutOfMemoryError。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值