JVM的内存模型

JVM内存模型可分为栈区,堆区,方法区和程序计数器。

栈区可以分为java虚拟机栈和本地方法栈。

 1)java虚拟机栈是线程私有的,每个线程创建的时候都会创建相应的虚拟机栈。虚拟机栈生命周期与相关线程是相同的。

 2) 每个方法执行都会创建一个栈帧,用于存放局部变量表,操作栈,动态链接,方法出口等。

 3) 栈的大小决定了方法调用的可达深度,同时栈的大小可以是固定的也可以是可变的。

 4) 如果请求的的深度大于栈的深度,会出现stackOverflowError的错误。如果栈是可扩展的,但没有足够的空间支持扩展,则会出现OutofMemoryError的错误。

本地方法栈和虚拟机栈功能相似,区别在于本地方法栈管理本地用C实现的方法

堆区为所有线程共享的区域

存放所有对象实例和数组。是垃圾回收的主要区域。可以分为新生代和老年代。

新生代用于存放刚创建的对象以及年轻的对象,如果生存时间足够长就会被移入老年代。

方法区被所有线程共享区域,用于存放已被虚拟机加载的类信息,常量,静态变量等数据。也可以叫永久代,一般很少会回收这个区域的数据。只有一个类的定义信息不会被使用时,才会进行回收。

程序计数器在多线程运行时,当线程数超过CPU数量或CPU内核数量,线程之间就要根据时间片轮询抢夺CPU时间资源。因此每个线程都要有一个独立的程序计数器,记录下一条要运行的指令。线程私有的内存区域。如果执行的是JAVA方法,计数器记录正在执行的java字节码地址,如果执行的是native方法,则计数器为空。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值