jvm运行时数据区

程序计数器
  • 可以看作是当前线程所执行的字节码的行号指示器。
  • 线程私有。
  • 程序计数器是唯一个不会出现OutOfMemoryError的内存区域,它的生命周期随着线程的创建而创建,随着线程的结束而死亡。
java虚拟机栈
  • 线程私有的,描述的是java方法执行的内存模型,每次方法调用的数据都是通过栈传递的。
  • java虚拟机栈有一个个栈帧组成,每个栈征都拥有,局部变量表,操作数栈,动态链接,方法出口信息。
  • 局部变量表主要存放了编译期可知的各种数据类型,对象应用。
  • 方法如何调用
    java栈可用类比数据结构种栈,java栈中保存的主要内容是栈帧,每一次函数调用都会有一个对应的栈帧被压入java栈,每一个函数调用结束,都会有一个栈帧被弹回。
    java方法有两种返回方式,return语句,抛出异常。不管哪种方式都会导致栈帧被弹出。
本地方法栈
  • 和虚拟机栈所发挥的作用非常相似, 本地方法栈则为虚拟机使用到的Native方法服务。
  • 线程共享,在启动时创建,存放对象实例和数组
  • 堆是垃圾收集器管理的主要区域,从垃圾回收的角度,java堆还可以被细分为新生代和老年代,新生代可以被分为Eden,From survivor,to survivor空间。进一步划分的目的是更好地回收内存。
  • 对象首先在Eden区域分配,在一次新生代垃圾回收后,如果对象还存活,则会进入s0或s1,并且对象年龄会加1,当它地年龄增加到一定程度(默认15岁)就会被晋升到老年代中。
方法区
  • 线程共享,用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。
  • 方法区也被称为永久代,方法区是一种规范,永久代是一种实现。
  • jdk1.8,方法区被元空间取代,元空间使用的是直接内存。与永久代很大不同的是,如果不指定大小,随着更多类的创建,虚拟机会耗尽所有可用的资源。
运行时常量池
  • 运行时常量池是方法区的一部分。用于存放编译期生成的各种字面量和符号引用。
  • jdk1.7前,字符串常量池在运行时常量池,jdk1.7之后,字符串常量池在堆中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值