java运行时区域

java运行时区域

程序计数器

  • 一块较小内存空间,当前线程执行字节码的行号指示器。
  • 线程私有,线程切换后恢复到正确执行位置的基础。
  • 循环,异常处理,线程恢复等检基础功能都需要依赖这个计数器完成。

虚拟机栈

  • 线程私有
  • 生命周期与线程相同
  • 方法执行时JVM会创建栈帧,用于存储局部变量表,操作数栈,动态连接,方法出口等一些信息
    • 局部变量表存放了编译期可知的各种jvm基本数据类型,引用类型,returnAddress
    • 局部变量表在方法进入时的空间是完全确定的
  • 方法调用==栈帧出栈入栈

本地方法栈

  • 与虚拟机栈类似
  • 为native方法服务

  • 被所有线程共享的一块内存区域,虚拟机启动时创建
  • “几乎”所有对象实列都在这里分配
  • 可以划分出多个线程私有的分配缓冲区,提升对象分配时的效率

方法区

  • 线程共享内存
  • 存储被jvm加载的类型信息,常量,静态常量,即时编译器编译后的代码缓存等数据
  • 方法区和永久代并不是等价的,JDK8就没有永久代了,变成了元空间(Metaspace)

运行时常量池

  • 是方法区的一部分
  • Class文件有一个常量池表(Constant Pool Table),用于存放编译期生成的各种字面量与符号引用,这部分内容在类加载后放到方法区的运行时常量池中
  • 运行期也能将常量放入常量池中,如String类的intren()方法

相关文章:

  • 2021-07-27
  • 2021-11-09
猜你喜欢
  • 2021-05-11
  • 2022-01-02
  • 2021-11-02
  • 2022-01-09
相关资源
相似解决方案